From 593b22626d04782ce78a6e2a5efbcdcca58f788c Mon Sep 17 00:00:00 2001 From: History <2596007731@qq.com> Date: Mon, 30 Jun 2025 09:33:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=96=86=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XinjiangProject/PodFile | 50 + XinjiangProject/Podfile.lock | 516 + .../XinjiangProject.xcodeproj/project.pbxproj | 687 + .../contents.xcworkspacedata | 7 + .../contents.xcworkspacedata | 10 + .../Categorys/NSArray/NSArray+Sudoku.h | 90 + .../Categorys/NSArray/NSArray+Sudoku.m | 209 + .../Categorys/NSAttributedString+Extension.h | 16 + .../Categorys/NSAttributedString+Extension.m | 12 + .../Categorys/NSDate/NSDate+IH.h | 239 + .../Categorys/NSDate/NSDate+IH.m | 264 + .../Categorys/NSDictionary/NSDictionary+Log.h | 20 + .../Categorys/NSDictionary/NSDictionary+Log.m | 74 + .../NSDictionary/NSDictionary+NilSafe.h | 17 + .../NSDictionary/NSDictionary+NilSafe.m | 113 + .../Categorys/NSString/NSString+FKTools.h | 59 + .../Categorys/NSString/NSString+FKTools.m | 230 + .../Categorys/UIButton/UIButton+HXExtension.h | 14 + .../Categorys/UIButton/UIButton+HXExtension.m | 53 + .../Categorys/UIButton/UIButton+NYS.h | 41 + .../Categorys/UIButton/UIButton+NYS.m | 309 + .../Categorys/UIDevice/UIDevice+model.h | 18 + .../Categorys/UIDevice/UIDevice+model.m | 115 + .../Categorys/UIImage+RoundedCorner.h | 16 + .../Categorys/UIImage+RoundedCorner.m | 34 + .../UILabel+ChangeLineSpaceAndWordSpace.h | 31 + .../UILabel+ChangeLineSpaceAndWordSpace.m | 42 + .../Categorys/UILabel/UILabel+Extension.h | 16 + .../Categorys/UILabel/UILabel+Extension.m | 62 + .../Categorys/UIView/UIView+FK.h | 25 + .../Categorys/UIView/UIView+FK.m | 55 + .../Define/FontAndColorMacros.h | 58 + .../XinjiangProject/Define/StatusMacros.h | 93 + .../XinjiangProject/Define/ThirdMacros.h | 43 + .../XinjiangProject/Define/YYUtilsMacros.h | 217 + .../Manager/AudioManager/CQAudioPlayManager.h | 25 + .../Manager/AudioManager/CQAudioPlayManager.m | 34 + .../NetworkHelpManager/DownToolsManager.h | 20 + .../NetworkHelpManager/DownToolsManager.m | 103 + .../Manager/NetworkHelpManager/JKCQAPI.h | 126 + .../Manager/NetworkHelpManager/JKCQAPI.m | 751 + .../JKCQNetworkingWithCache.h | 56 + .../JKCQNetworkingWithCache.m | 508 + .../SDGETHealthTokenManager.h | 27 + .../SDGETHealthTokenManager.m | 195 + .../NetworkHelpManager/SDHttpRequest.h | 33 + .../NetworkHelpManager/SDHttpRequest.m | 133 + .../RuntimeManager/SwapMethodManager.h | 20 + .../RuntimeManager/SwapMethodManager.m | 33 + .../Manager/TUIManager/ESCTUIManager.h | 68 + .../Manager/TUIManager/ESCTUIManager.m | 116 + .../Manager/UserManager/HQUserInfo.h | 40 + .../Manager/UserManager/HQUserInfo.m | 77 + .../Manager/UserManager/XMKeychainTool.h | 36 + .../Manager/UserManager/XMKeychainTool.m | 57 + .../AppDelegate/AppDelegate+AppService.h | 35 + .../AppDelegate/AppDelegate+AppService.m | 408 + .../AppDelegate/AppDelegate+PushService.h | 18 + .../AppDelegate/AppDelegate+PushService.m | 64 + .../Project/AppDelegate/AppDelegate.h | 30 + .../Project/AppDelegate/AppDelegate.m | 178 + .../Project/Base/BaseWebViewVC.h | 39 + .../Project/Base/BaseWebViewVC.m | 249 + .../Project/Base/DownPDFFileVC.h | 18 + .../Project/Base/DownPDFFileVC.m | 31 + .../Project/Base/HQBaseNavigationController.h | 25 + .../Project/Base/HQBaseNavigationController.m | 305 + .../Project/Base/HQBaseTabBarController.h | 25 + .../Project/Base/HQBaseTabBarController.m | 157 + .../Project/Base/HQBaseViewController.h | 91 + .../Project/Base/HQBaseViewController.m | 255 + .../Project/Base/TabBarView/HQTabBar.h | 13 + .../Project/Base/TabBarView/HQTabBar.m | 60 + .../Base/TabBarView/UITabBar+CustomBadge.h | 32 + .../Base/TabBarView/UITabBar+CustomBadge.m | 115 + .../CustomModel/CustomSystemEvaluateModel.h | 26 + .../CustomModel/CustomSystemEvaluateModel.m | 12 + .../CustomModel/CustomTUIHistoryModel.h | 42 + .../CustomModel/CustomTUIHistoryModel.m | 12 + .../CustomModel/CustomTextModel.h | 24 + .../CustomModel/CustomTextModel.m | 12 + .../Project/CustomTUIChat/CustomTUIModel.h | 60 + .../Project/CustomTUIChat/CustomTUIModel.m | 53 + .../VC/CustomTUIBaseMessageController.h | 18 + .../VC/CustomTUIBaseMessageController.m | 244 + .../CustomTUIChat/VC/CustomTUIHistoryTable.h | 18 + .../CustomTUIChat/VC/CustomTUIHistoryTable.m | 164 + .../CustomTUIChat/cell/CustomAudioCell.h | 16 + .../CustomTUIChat/cell/CustomAudioCell.m | 23 + .../cell/CustomDoctorIDTableViewCell.h | 16 + .../cell/CustomDoctorIDTableViewCell.m | 23 + .../cell/CustomHealthFileVideoCell.h | 16 + .../cell/CustomHealthFileVideoCell.m | 23 + .../cell/CustomHealthReportVideoCell.h | 16 + .../cell/CustomHealthReportVideoCell.m | 39 + .../CustomTUIChat/cell/CustomMapMessageCell.h | 17 + .../CustomTUIChat/cell/CustomMapMessageCell.m | 79 + .../cell/CustomReviceTableViewCell.h | 16 + .../cell/CustomReviceTableViewCell.m | 23 + .../cell/CustomSystemImageCell.h | 19 + .../cell/CustomSystemImageCell.m | 102 + .../CustomTUIChat/cell/CustomSystemTextCell.h | 17 + .../CustomTUIChat/cell/CustomSystemTextCell.m | 167 + .../cell/CustomSystemVideoCell.h | 16 + .../cell/CustomSystemVideoCell.m | 23 + .../cellData/CustomMapMessageCellData.h | 18 + .../cellData/CustomMapMessageCellData.m | 79 + .../Login/HQLoginViewController.h | 16 + .../Login/HQLoginViewController.m | 576 + .../Login/LoginFoundPasswordViewController.h | 16 + .../Login/LoginFoundPasswordViewController.m | 211 + .../Login/LoginSetPasswordViewController.h | 18 + .../Login/LoginSetPasswordViewController.m | 229 + .../Login/Model/IMUserInfoModel.h | 25 + .../Login/Model/IMUserInfoModel.m | 43 + .../register/HQRegisterViewController.h | 16 + .../register/HQRegisterViewController.m | 264 + .../Controller/AddContactViewController.h | 21 + .../Controller/AddContactViewController.m | 356 + .../Controller/EditSystemViewController.h | 16 + .../Controller/EditSystemViewController.m | 239 + .../MinePictureRecordViewController.h | 18 + .../MinePictureRecordViewController.m | 561 + .../MineQuestionRecordViewController.h | 18 + .../MineQuestionRecordViewController.m | 256 + .../Controller/MineUserInfoViewController.h | 16 + .../Controller/MineUserInfoViewController.m | 141 + .../MineVideoRecordViewController.h | 19 + .../MineVideoRecordViewController.m | 374 + .../Controller/MyCenterViewController.h | 16 + .../Controller/MyCenterViewController.m | 345 + .../MainCenter/Model/BigillessDetailModel.h | 38 + .../MainCenter/Model/BigillessDetailModel.m | 17 + .../MainCenter/Model/BigillessHospitalModel.h | 19 + .../MainCenter/Model/BigillessHospitalModel.m | 18 + .../MainCenter/Model/BigillnessModel.h | 24 + .../MainCenter/Model/BigillnessModel.m | 19 + .../MainCenter/Model/EmergencyContactModel.h | 23 + .../MainCenter/Model/EmergencyContactModel.m | 19 + .../MainCenter/Model/MineCenterUserModel.h | 30 + .../MainCenter/Model/MineCenterUserModel.m | 12 + .../Model/SOSDoctorDetailInfoModel.h | 107 + .../Model/SOSDoctorDetailInfoModel.m | 40 + .../Project/MainCenter/Model/SOSDoctorModel.h | 38 + .../Project/MainCenter/Model/SOSDoctorModel.m | 37 + .../MainCenter/View/BigilessTopStatusView.h | 25 + .../MainCenter/View/BigilessTopStatusView.m | 120 + .../MainCenter/View/BigillessListTable.h | 22 + .../MainCenter/View/BigillessListTable.m | 137 + .../MainCenter/View/BigillessTableViewCell.h | 18 + .../MainCenter/View/BigillessTableViewCell.m | 193 + .../View/HistoryOrderTableViewCell.h | 18 + .../View/HistoryOrderTableViewCell.m | 101 + .../MainCenter/View/MineHeardTableViewCell.h | 18 + .../MainCenter/View/MineHeardTableViewCell.m | 77 + .../MainCenter/View/MineUserInfoTable.h | 29 + .../MainCenter/View/MineUserInfoTable.m | 265 + .../MainCenter/View/MyCenterHeardView.h | 50 + .../MainCenter/View/MyCenterHeardView.m | 203 + .../MainCenter/View/MyCenterTableView.h | 33 + .../MainCenter/View/MyCenterTableView.m | 253 + .../MainCenter/View/SOSDetailTableHeardView.h | 22 + .../MainCenter/View/SOSDetailTableHeardView.m | 207 + .../MainCenter/View/SOSDoctorDetailTable.h | 18 + .../MainCenter/View/SOSDoctorDetailTable.m | 182 + .../MainCenter/View/SOSDoctorTableView.h | 21 + .../MainCenter/View/SOSDoctorTableView.m | 137 + .../MainCenter/View/SOSDoctorTableViewCell.h | 18 + .../MainCenter/View/SOSDoctorTableViewCell.m | 149 + .../Project/MainCenter/View/SliderView.h | 21 + .../Project/MainCenter/View/SliderView.m | 157 + .../Monitoring/HeartBadViewController.h | 16 + .../Monitoring/HeartBadViewController.m | 223 + .../Monitoring/Model/MonitoringDataModel.h | 25 + .../Monitoring/Model/MonitoringDataModel.m | 12 + .../Monitoring/View/HeardBadHeardView.h | 16 + .../Monitoring/View/HeardBadHeardView.m | 214 + .../Monitoring/View/HeardBadTabFooterView.h | 16 + .../Monitoring/View/HeardBadTabFooterView.m | 88 + .../Monitoring/View/HeardBadTableView.h | 20 + .../Monitoring/View/HeardBadTableView.m | 136 + .../Monitoring/View/HeardBadTableViewCell.h | 16 + .../Monitoring/View/HeardBadTableViewCell.m | 104 + .../Controller/AddQuestionViewController.h | 19 + .../Controller/AddQuestionViewController.m | 598 + .../BasicHealthInfoViewController.h | 19 + .../BasicHealthInfoViewController.m | 290 + .../Controller/DoctorMainViewController.h | 21 + .../Controller/DoctorMainViewController.m | 733 + .../Controller/EvaluationListViewController.h | 20 + .../Controller/EvaluationListViewController.m | 264 + .../Controller/ExpertMainViewController.h | 18 + .../Controller/ExpertMainViewController.m | 711 + .../Controller/FileDataDetailViewController.h | 16 + .../Controller/FileDataDetailViewController.m | 68 + .../Controller/HospitalIntroViewController.h | 19 + .../Controller/HospitalIntroViewController.m | 307 + .../HospitalJianjieViewController.h | 16 + .../HospitalJianjieViewController.m | 31 + .../Controller/HospitalMainViewController.h | 18 + .../Controller/HospitalMainViewController.m | 505 + .../LookModficalFileViewController.h | 38 + .../LookModficalFileViewController.m | 1040 ++ .../QuesstionDetailLookFileViewController.h | 18 + .../QuesstionDetailLookFileViewController.m | 580 + .../QuestionMustKnowViewController.h | 18 + .../QuestionMustKnowViewController.m | 252 + .../Controller/QuestionPeopleMangerVC.h | 16 + .../Controller/QuestionPeopleMangerVC.m | 205 + .../Controller/QuestionViewController.h | 16 + .../Controller/QuestionViewController.m | 787 + .../AudioVideoRecordViewController.h | 16 + .../AudioVideoRecordViewController.m | 229 + .../PictureRecordViewController.h | 16 + .../PictureRecordViewController.m | 477 + .../QuestionCompleteViewController.h | 16 + .../QuestionCompleteViewController.m | 196 + .../QuestionJingxingViewController.h | 16 + .../QuestionJingxingViewController.m | 196 + .../QustionRecordViewController.h | 16 + .../QustionRecordViewController.m | 272 + .../QustionWaitEvlaViewController.h | 16 + .../QustionWaitEvlaViewController.m | 196 + .../Qusetion/Controller/RoomDoctorRecordsVC.h | 16 + .../Qusetion/Controller/RoomDoctorRecordsVC.m | 302 + .../RoomSearchResultViewController.h | 18 + .../RoomSearchResultViewController.m | 134 + .../FoundExpertSubViewController.h | 20 + .../FoundExpertSubViewController.m | 108 + .../FoundExpertViewController.h | 16 + .../FoundExpertViewController.m | 476 + .../FoundHospitalViewController.h | 16 + .../FoundHospitalViewController.m | 196 + .../FoundJIBingViewController.h | 16 + .../FoundJIBingViewController.m | 237 + .../FoundRoomsViewController.h | 16 + .../FoundRoomsViewController.m | 232 + .../MainSearchViewController.h | 18 + .../MainSearchViewController.m | 767 + .../SearchZhuangJiaViewController.h | 28 + .../SearchZhuangJiaViewController.m | 883 + .../Controller/SearchMainViewController.h | 16 + .../Controller/SearchMainViewController.m | 53 + .../SelectFIleDateDetailViewController.h | 18 + .../SelectFIleDateDetailViewController.m | 636 + .../Controller/SelectedDoctorTimeVC.h | 18 + .../Controller/SelectedDoctorTimeVC.m | 488 + .../SelectedQuestionViewController.h | 21 + .../SelectedQuestionViewController.m | 449 + .../Controller/SmallHelpHandViewController.h | 16 + .../Controller/SmallHelpHandViewController.m | 31 + .../Qusetion/Model/DoctorDetailModel.h | 53 + .../Qusetion/Model/DoctorDetailModel.m | 39 + .../Qusetion/Model/DoctorRecommendModel.h | 39 + .../Qusetion/Model/DoctorRecommendModel.m | 34 + .../Qusetion/Model/DoctorReportModel.h | 140 + .../Qusetion/Model/DoctorReportModel.m | 80 + .../Project/Qusetion/Model/DoctorTimeModel.h | 26 + .../Project/Qusetion/Model/DoctorTimeModel.m | 20 + .../Project/Qusetion/Model/EvaluatListModel.h | 26 + .../Project/Qusetion/Model/EvaluatListModel.m | 19 + .../Model/FamilyMemberRelationModel.h | 22 + .../Model/FamilyMemberRelationModel.m | 12 + .../Project/Qusetion/Model/FileDataModel.h | 20 + .../Project/Qusetion/Model/FileDataModel.m | 12 + .../Project/Qusetion/Model/FoundExpertModel.h | 83 + .../Project/Qusetion/Model/FoundExpertModel.m | 58 + .../Qusetion/Model/HomeQusetionRecordsModel.h | 39 + .../Qusetion/Model/HomeQusetionRecordsModel.m | 19 + .../Qusetion/Model/HospitalInfoModel.h | 56 + .../Qusetion/Model/HospitalInfoModel.m | 18 + .../Qusetion/Model/LookFileDataModel.h | 34 + .../Qusetion/Model/LookFileDataModel.m | 19 + .../Qusetion/Model/QuestionBodyReportModel.h | 21 + .../Qusetion/Model/QuestionBodyReportModel.m | 13 + .../Qusetion/Model/QuestionDiseaseInfoModel.h | 63 + .../Qusetion/Model/QuestionDiseaseInfoModel.m | 40 + .../Qusetion/Model/QuestionItemModel.h | 20 + .../Qusetion/Model/QuestionItemModel.m | 12 + .../Qusetion/Model/QuestionOptionModel.h | 47 + .../Qusetion/Model/QuestionOptionModel.m | 56 + .../Qusetion/Model/QuestionPeopleModel.h | 33 + .../Qusetion/Model/QuestionPeopleModel.m | 19 + .../Qusetion/Model/QuestionRecordModel.h | 43 + .../Qusetion/Model/QuestionRecordModel.m | 20 + .../Qusetion/Model/RecordIMListDateModel.h | 52 + .../Qusetion/Model/RecordIMListDateModel.m | 19 + .../Project/Qusetion/Model/SOSGroupIMModel.h | 25 + .../Project/Qusetion/Model/SOSGroupIMModel.m | 19 + .../Project/Qusetion/Model/SearchRoomModel.h | 26 + .../Project/Qusetion/Model/SearchRoomModel.m | 19 + .../Project/Qusetion/Model/SearchSicksModel.h | 27 + .../Project/Qusetion/Model/SearchSicksModel.m | 19 + .../Qusetion/Model/SmallHelpIMDataModel.h | 24 + .../Qusetion/Model/SmallHelpIMDataModel.m | 18 + .../Qusetion/OtherFile/ADJumpViewController.h | 18 + .../Qusetion/OtherFile/ADJumpViewController.m | 35 + .../Project/Qusetion/OtherFile/HQSearchView.h | 26 + .../Project/Qusetion/OtherFile/HQSearchView.m | 106 + .../Qusetion/OtherFile/HealthPhyReportModel.h | 99 + .../Qusetion/OtherFile/HealthPhyReportModel.m | 80 + .../OtherFile/HealthPhyReportTableView.h | 21 + .../OtherFile/HealthPhyReportTableView.m | 371 + .../OtherFile/HealthSugReportTableViewCell.h | 34 + .../OtherFile/HealthSugReportTableViewCell.m | 223 + .../OtherFile/LookReportImageViewController.h | 23 + .../OtherFile/LookReportImageViewController.m | 173 + .../OtherFile/SickNameSubTableViewCell.h | 19 + .../OtherFile/SickNameSubTableViewCell.m | 221 + .../OtherFile/SickNameTopTableViewCell.h | 23 + .../OtherFile/SickNameTopTableViewCell.m | 134 + .../OtherFile/imageReportTableViewCell.h | 22 + .../OtherFile/imageReportTableViewCell.m | 235 + .../Qusetion/View/AppointmentInfoView.h | 40 + .../Qusetion/View/AppointmentInfoView.m | 314 + .../AllHospitalConditionView.h | 26 + .../AllHospitalConditionView.m | 56 + .../AllRoomsConditionView.h | 31 + .../AllRoomsConditionView.m | 102 + .../AllSicksConditionView.h | 32 + .../AllSicksConditionView.m | 95 + .../BasicHealthInfoView.h | 16 + .../BasicHealthInfoView.m | 70 + .../DataDetail(档案详情)/DetailTitleView.h | 18 + .../DataDetail(档案详情)/DetailTitleView.m | 68 + .../DataDetail(档案详情)/DetailUserInfoView.h | 21 + .../DataDetail(档案详情)/DetailUserInfoView.m | 153 + .../FileDataDeatilCenterView.h | 18 + .../FileDataDeatilCenterView.m | 221 + .../DataDetail(档案详情)/HQPhotoCollectView.h | 31 + .../DataDetail(档案详情)/HQPhotoCollectView.m | 144 + .../HQPhotoPostCollectionViewCell.h | 27 + .../HQPhotoPostCollectionViewCell.m | 73 + .../DataDetail(档案详情)/QuestionItemTable.h | 26 + .../DataDetail(档案详情)/QuestionItemTable.m | 134 + .../QuestionItemTableViewCell.h | 19 + .../QuestionItemTableViewCell.m | 108 + .../SelectedFileDateCenterView.h | 49 + .../SelectedFileDateCenterView.m | 618 + .../Qusetion/View/DoctorEvaluationTable.h | 22 + .../Qusetion/View/DoctorEvaluationTable.m | 151 + .../View/DoctorEvaluationTableViewCell.h | 19 + .../View/DoctorEvaluationTableViewCell.m | 150 + .../Project/Qusetion/View/DoctorInfoTopView.h | 27 + .../Project/Qusetion/View/DoctorInfoTopView.m | 531 + .../Qusetion/View/DoctorRoomCollectionView.h | 21 + .../Qusetion/View/DoctorRoomCollectionView.m | 105 + .../View/DoctorRoomCollectionViewCell.h | 19 + .../View/DoctorRoomCollectionViewCell.m | 116 + .../View/DoctorSelectTimeCollectionCell.h | 19 + .../View/DoctorSelectTimeCollectionCell.m | 145 + .../Project/Qusetion/View/DoctorStatusView.h | 24 + .../Project/Qusetion/View/DoctorStatusView.m | 120 + .../View/DoctorTimeSelectedCollectView.h | 27 + .../View/DoctorTimeSelectedCollectView.m | 128 + .../Qusetion/View/EvaluationListTableView.h | 20 + .../Qusetion/View/EvaluationListTableView.m | 138 + .../Qusetion/View/FoundExpertSubCollection.h | 22 + .../Qusetion/View/FoundExpertSubCollection.m | 113 + .../View/FoundExpertSubCollectionViewCell.h | 18 + .../View/FoundExpertSubCollectionViewCell.m | 40 + .../Qusetion/View/FoundLeftTableView.h | 26 + .../Qusetion/View/FoundLeftTableView.m | 147 + .../Qusetion/View/FoundRightTableView.h | 24 + .../Qusetion/View/FoundRightTableView.m | 195 + .../Qusetion/View/FoundRoomsTableViewCell.h | 21 + .../Qusetion/View/FoundRoomsTableViewCell.m | 118 + .../View/HealthyDoctorTableViewCell.h | 18 + .../View/HealthyDoctorTableViewCell.m | 214 + .../Qusetion/View/HealthyQuestionHeardView.h | 32 + .../Qusetion/View/HealthyQuestionHeardView.m | 171 + .../Qusetion/View/HealthyQuestionTable.h | 29 + .../Qusetion/View/HealthyQuestionTable.m | 180 + .../Project/Qusetion/View/HealthyToolsView.h | 24 + .../Project/Qusetion/View/HealthyToolsView.m | 86 + .../Qusetion/View/HospitalListTableCell.h | 19 + .../Qusetion/View/HospitalListTableCell.m | 352 + .../EvaluationTiitleTableViewCell.h | 16 + .../EvaluationTiitleTableViewCell.m | 64 + .../EvaluationTitleTableViewCell.h | 20 + .../EvaluationTitleTableViewCell.m | 85 + .../HospatilDoctorCollectionViewCell.h | 19 + .../HospatilDoctorCollectionViewCell.m | 106 + .../HospatilIntroduceTableViewCell.h | 16 + .../HospatilIntroduceTableViewCell.m | 74 + .../HospitalEvaluationTableViewCell.h | 19 + .../HospitalEvaluationTableViewCell.m | 160 + .../HospitalLocationTableViewCell.h | 19 + .../HospitalLocationTableViewCell.m | 118 + .../HospitalMainDoctorCollectView.h | 25 + .../HospitalMainDoctorCollectView.m | 150 + .../View/HospitalMain/HospitalMainHeardView.h | 22 + .../View/HospitalMain/HospitalMainHeardView.m | 131 + .../View/HospitalMain/HospitalMainTableView.h | 26 + .../View/HospitalMain/HospitalMainTableView.m | 150 + .../MainSearchExpertTableCell.h | 29 + .../MainSearchExpertTableCell.m | 398 + .../View/MainSearchView/MainSearchTable.h | 53 + .../View/MainSearchView/MainSearchTable.m | 724 + .../MainSearchView/SearchConetShowTable.h | 22 + .../MainSearchView/SearchConetShowTable.m | 125 + .../SearchShowUpTableViewCell.h | 19 + .../SearchShowUpTableViewCell.m | 57 + .../MainSearchView/SearchZhuangjiaTable.h | 28 + .../MainSearchView/SearchZhuangjiaTable.m | 127 + .../ZongheZhuangjiaTableViewCell.h | 29 + .../ZongheZhuangjiaTableViewCell.m | 387 + .../Project/Qusetion/View/PopView/PopupView.h | 21 + .../Project/Qusetion/View/PopView/PopupView.m | 131 + .../View/QuestionAddPeopleTableCell.h | 27 + .../View/QuestionAddPeopleTableCell.m | 75 + .../View/QuestionChange/AllRoomRecordsCell.h | 17 + .../View/QuestionChange/AllRoomRecordsCell.m | 223 + .../QuestionChange/QustionHomeRecordsCell.h | 20 + .../QuestionChange/QustionHomeRecordsCell.m | 331 + .../Qusetion/View/QuestionDiseaseTableView.h | 31 + .../Qusetion/View/QuestionDiseaseTableView.m | 160 + .../View/QuestionDiseaseTableViewCell.h | 28 + .../View/QuestionDiseaseTableViewCell.m | 149 + .../View/QuestionPeopleManagerTable.h | 18 + .../View/QuestionPeopleManagerTable.m | 121 + .../View/QuestionPeopleManagerTableCell.h | 22 + .../View/QuestionPeopleManagerTableCell.m | 138 + .../QuestionRecordTableViewCell.h | 19 + .../QuestionRecordTableViewCell.m | 288 + .../QuestionRecoredTable.h | 25 + .../QuestionRecoredTable.m | 134 + .../View/SelectedQuestionFirstTableCell.h | 18 + .../View/SelectedQuestionFirstTableCell.m | 140 + .../Qusetion/View/SelectedQuestionTableView.h | 24 + .../Qusetion/View/SelectedQuestionTableView.m | 270 + .../View/SelectedQuestionTypeTableCell.h | 23 + .../View/SelectedQuestionTypeTableCell.m | 79 + .../Qusetion/View/UserInfoHealthPopView.h | 28 + .../Qusetion/View/UserInfoHealthPopView.m | 88 + .../Project/Qusetion/View/evaluationPopView.h | 21 + .../Project/Qusetion/View/evaluationPopView.m | 147 + .../BasicHealthTable.h | 19 + .../BasicHealthTable.m | 237 + .../HealthTypeOneTableViewCell.h | 19 + .../HealthTypeOneTableViewCell.m | 188 + .../HealthTypeTwoTableViewCell.h | 22 + .../HealthTypeTwoTableViewCell.m | 341 + .../Qusetion/View/hospitalListTableView.h | 22 + .../Qusetion/View/hospitalListTableView.m | 129 + .../View/searchHospatilCellTableViewCell.h | 19 + .../View/searchHospatilCellTableViewCell.m | 257 + .../SOS/Controller/SosCenterViewController.h | 16 + .../SOS/Controller/SosCenterViewController.m | 996 ++ .../Project/SOS/Model/AEDNetWrokModel.h | 75 + .../Project/SOS/Model/AEDNetWrokModel.m | 19 + .../SOS/Model/HealthInterveneAEDModel.h | 36 + .../SOS/Model/HealthInterveneAEDModel.m | 19 + .../SOS/Model/HealthInterveneHomeModel.h | 56 + .../SOS/Model/HealthInterveneHomeModel.m | 18 + .../Project/SOS/Model/SOSCenterModel.h | 54 + .../Project/SOS/Model/SOSCenterModel.m | 36 + .../Project/SOS/View/SOSAddressView.h | 34 + .../Project/SOS/View/SOSAddressView.m | 224 + .../Project/TUIChat/ChatDoctorInfoModel.h | 19 + .../Project/TUIChat/ChatDoctorInfoModel.m | 12 + .../TUIChat/ChatList/ChatListViewController.h | 16 + .../TUIChat/ChatList/ChatListViewController.m | 65 + .../Project/TUIChat/ChatViewController.h | 68 + .../Project/TUIChat/ChatViewController.m | 948 ++ .../Controller/ChatMapViewController.h | 20 + .../Controller/ChatMapViewController.m | 152 + .../CurrentLocationViewController.h | 21 + .../CurrentLocationViewController.m | 138 + .../Controller/SendHealthDataViewController.h | 18 + .../Controller/SendHealthDataViewController.m | 110 + .../DoctorCardCell/DoctiorIDCardCellData.h | 24 + .../DoctorCardCell/DoctiorIDCardCellData.m | 44 + .../DoctorCardCell/DoctorIDCardMessageCell.h | 28 + .../DoctorCardCell/DoctorIDCardMessageCell.m | 129 + .../EndSystemCell/CompleteReviewCell.h | 25 + .../EndSystemCell/CompleteReviewCell.m | 90 + .../EndSystemCell/CompleteReviewCellData.h | 20 + .../EndSystemCell/CompleteReviewCellData.m | 42 + .../EndSystemCell/EndSystemCellData.h | 21 + .../EndSystemCell/EndSystemCellData.m | 43 + .../EndSystemCell/EndSystemSoSCell.h | 31 + .../EndSystemCell/EndSystemSoSCell.m | 126 + .../chatPictureCollectionViewCell.h | 21 + .../chatPictureCollectionViewCell.m | 30 + .../HealthDataCustom/healthDataCustomCell.h | 29 + .../HealthDataCustom/healthDataCustomCell.m | 211 + .../healthDataCustomCellData.h | 31 + .../healthDataCustomCellData.m | 71 + .../sendPhysicalCustomCell.h | 21 + .../sendPhysicalCustomCell.m | 84 + .../sendPhysicalCustomCellData.h | 26 + .../sendPhysicalCustomCellData.m | 39 + .../StarMarkCustom/StarMarkCellData.h | 21 + .../StarMarkCustom/StarMarkCellData.m | 35 + .../StarMarkCustom/StarMarkCustomCell.h | 26 + .../StarMarkCustom/StarMarkCustomCell.m | 85 + .../userCustom/userDataInfoCellData.h | 19 + .../userCustom/userDataInfoCellData.m | 44 + .../userCustom/userDataInfoChatCell.h | 24 + .../userCustom/userDataInfoChatCell.m | 64 + .../Project/TUIChat/DoctorHomePageDetailVC.h | 18 + .../Project/TUIChat/DoctorHomePageDetailVC.m | 212 + .../Project/TUIChat/Model/SendReportModel.h | 32 + .../Project/TUIChat/Model/SendReportModel.m | 12 + .../Project/TUIChat/Model/sendHealthModel.h | 16 + .../Project/TUIChat/Model/sendHealthModel.m | 12 + .../TUIChat/View/SendHealthDataTable.h | 21 + .../TUIChat/View/SendHealthDataTable.m | 129 + .../View/SendHealthDataTableViewCell.h | 22 + .../View/SendHealthDataTableViewCell.m | 99 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 + .../Assets.xcassets/Contents.json | 6 + .../Assets.xcassets/Monitoring/Contents.json | 6 + .../homePageTiwen.imageset/Contents.json | 23 + .../homePageTiwen.imageset/homePageTiwen.png | Bin 0 -> 1369 bytes .../homePageTiwen@2x.png | Bin 0 -> 2375 bytes .../homePageTiwen@3x.png | Bin 0 -> 5710 bytes .../homePageXinlv.imageset/Contents.json | 23 + .../homePageXinlv.imageset/homePageXinlv.png | Bin 0 -> 1468 bytes .../homePageXinlv@2x.png | Bin 0 -> 2130 bytes .../homePageXinlv@3x.png | Bin 0 -> 5079 bytes .../homePageXueyang.imageset/Contents.json | 23 + .../homePageXueyang.png | Bin 0 -> 1201 bytes .../homePageXueyang@2x.png | Bin 0 -> 1825 bytes .../homePageXueyang@3x.png | Bin 0 -> 4051 bytes .../homePageYali.imageset/Contents.json | 23 + .../homePageYali.imageset/homePageYali.png | Bin 0 -> 1345 bytes .../homePageYali.imageset/homePageYali@2x.png | Bin 0 -> 1952 bytes .../homePageYali.imageset/homePageYali@3x.png | Bin 0 -> 4565 bytes .../sleepIcon.imageset/Contents.json | 23 + .../sleepIcon.imageset/sleepIcon.png | Bin 0 -> 984 bytes .../sleepIcon.imageset/sleepIcon@2x.png | Bin 0 -> 1602 bytes .../sleepIcon.imageset/sleepIcon@3x.png | Bin 0 -> 5096 bytes .../stepNumberIcon.imageset/Contents.json | 23 + .../stepNumberIcon.png | Bin 0 -> 1095 bytes .../stepNumberIcon@2x.png | Bin 0 -> 1854 bytes .../stepNumberIcon@3x.png | Bin 0 -> 5904 bytes .../Assets.xcassets/MyCenetr/Contents.json | 6 + .../HeardHistory_icon.imageset/Contents.json | 23 + .../HeardHistory_icon.png | Bin 0 -> 5072 bytes .../HeardHistory_icon@2x.png | Bin 0 -> 13237 bytes .../HeardHistory_icon@3x.png | Bin 0 -> 22885 bytes .../HeardProgress_icon.imageset/Contents.json | 23 + .../HeardProgress_icon.png | Bin 0 -> 5027 bytes .../HeardProgress_icon@2x.png | Bin 0 -> 13128 bytes .../HeardProgress_icon@3x.png | Bin 0 -> 23569 bytes .../Seedoctor_icon.imageset/Contents.json | 23 + .../Seedoctor_icon.png | Bin 0 -> 521 bytes .../Seedoctor_icon@2x.png | Bin 0 -> 806 bytes .../Seedoctor_icon@3x.png | Bin 0 -> 1151 bytes .../acccountSafety.imageset/Contents.json | 23 + .../acccountSafety.png | Bin 0 -> 601 bytes .../acccountSafety@2x.png | Bin 0 -> 1196 bytes .../acccountSafety@3x.png | Bin 0 -> 2003 bytes .../alreadyEveal.imageset/Contents.json | 23 + .../alreadyEveal.imageset/alreadyEveal.png | Bin 0 -> 5041 bytes .../alreadyEveal.imageset/alreadyEveal@2x.png | Bin 0 -> 13201 bytes .../alreadyEveal.imageset/alreadyEveal@3x.png | Bin 0 -> 23750 bytes .../MyCenetr/heard_man.imageset/Contents.json | 23 + .../MyCenetr/heard_man.imageset/heard_man.png | Bin 0 -> 3010 bytes .../heard_man.imageset/heard_man@2x.png | Bin 0 -> 7136 bytes .../heard_man.imageset/heard_man@3x.png | Bin 0 -> 12267 bytes .../heard_woman.imageset/Contents.json | 23 + .../heard_woman.imageset/heard_woman.png | Bin 0 -> 3131 bytes .../heard_woman.imageset/heard_woman@2x.png | Bin 0 -> 7441 bytes .../heard_woman.imageset/heard_woman@3x.png | Bin 0 -> 12959 bytes .../medicalReson_icon.imageset/Contents.json | 23 + .../medicalReson_icon.png | Bin 0 -> 456 bytes .../medicalReson_icon@2x.png | Bin 0 -> 697 bytes .../medicalReson_icon@3x.png | Bin 0 -> 957 bytes .../myLove_icon.imageset/Contents.json | 23 + .../myLove_icon.imageset/myLove_icon.png | Bin 0 -> 656 bytes .../myLove_icon.imageset/myLove_icon@2x.png | Bin 0 -> 1522 bytes .../myLove_icon.imageset/myLove_icon@3x.png | Bin 0 -> 2602 bytes .../myReport_icon.imageset/Contents.json | 23 + .../myReport_icon.imageset/myReport_icon.png | Bin 0 -> 497 bytes .../myReport_icon@2x.png | Bin 0 -> 867 bytes .../myReport_icon@3x.png | Bin 0 -> 1357 bytes .../myinfo_icon.imageset/Contents.json | 23 + .../myinfo_icon.imageset/myinfo_icon.png | Bin 0 -> 629 bytes .../myinfo_icon.imageset/myinfo_icon@2x.png | Bin 0 -> 1358 bytes .../myinfo_icon.imageset/myinfo_icon@3x.png | Bin 0 -> 2241 bytes .../relatives_icon.imageset/Contents.json | 23 + .../relatives_icon.png | Bin 0 -> 640 bytes .../relatives_icon@2x.png | Bin 0 -> 1480 bytes .../relatives_icon@3x.png | Bin 0 -> 2410 bytes .../waitEveal_icon.imageset/Contents.json | 23 + .../waitEveal_icon.png | Bin 0 -> 5160 bytes .../waitEveal_icon@2x.png | Bin 0 -> 13111 bytes .../waitEveal_icon@3x.png | Bin 0 -> 23169 bytes .../Assets.xcassets/Question/Contents.json | 6 + .../Satisfaction_icon.imageset/Contents.json | 23 + .../Satisfaction_icon.png | Bin 0 -> 2398 bytes .../Satisfaction_icon@2x.png | Bin 0 -> 6728 bytes .../Satisfaction_icon@3x.png | Bin 0 -> 13660 bytes .../audioPlayIcon.imageset/Contents.json | 21 + .../audioPlayIcon.imageset/audioPlayIcon.png | Bin 0 -> 614 bytes .../cancalSuccess.imageset/Contents.json | 23 + .../cancalSuccess.imageset/cancalSuccess.png | Bin 0 -> 5197 bytes .../cancalSuccess@2x.png | Bin 0 -> 15056 bytes .../cancalSuccess@3x.png | Bin 0 -> 29753 bytes .../Question/delect.imageset/Contents.json | 23 + .../Question/delect.imageset/delect.png | Bin 0 -> 672 bytes .../Question/delect.imageset/delect@2x.png | Bin 0 -> 1355 bytes .../Question/delect.imageset/delect@3x.png | Bin 0 -> 2352 bytes .../detail_collect.imageset/Contents.json | 23 + .../detail_collect.png | Bin 0 -> 2111 bytes .../detail_collect@2x.png | Bin 0 -> 4512 bytes .../detail_collect@3x.png | Bin 0 -> 7239 bytes .../Question/doctorHot.imageset/Contents.json | 23 + .../Question/doctorHot.imageset/doctorHot.png | Bin 0 -> 477 bytes .../doctorHot.imageset/doctorHot@2x.png | Bin 0 -> 894 bytes .../doctorHot.imageset/doctorHot@3x.png | Bin 0 -> 1379 bytes .../foundDoctor.imageset/Contents.json | 23 + .../foundDoctor.imageset/foundDoctor.png | Bin 0 -> 810 bytes .../foundDoctor.imageset/foundDoctor@2x.png | Bin 0 -> 1690 bytes .../foundDoctor.imageset/foundDoctor@3x.png | Bin 0 -> 2259 bytes .../hospatilAddress.imageset/Contents.json | 23 + .../hospatilAddress.png | Bin 0 -> 623 bytes .../hospatilAddress@2x.png | Bin 0 -> 1225 bytes .../hospatilAddress@3x.png | Bin 0 -> 1880 bytes .../line_selected.imageset/Contents.json | 23 + .../line_selected.imageset/line_selected.png | Bin 0 -> 317 bytes .../line_selected@2x.png | Bin 0 -> 486 bytes .../line_selected@3x.png | Bin 0 -> 744 bytes .../mustKnow_Nomal.imageset/Contents.json | 23 + .../mustKnow_Nomal.png | Bin 0 -> 490 bytes .../mustKnow_Nomal@2x.png | Bin 0 -> 991 bytes .../mustKnow_Nomal@3x.png | Bin 0 -> 1488 bytes .../mustKnow_Selected.imageset/Contents.json | 23 + .../mustKnow_Selected.png | Bin 0 -> 625 bytes .../mustKnow_Selected@2x.png | Bin 0 -> 1451 bytes .../mustKnow_Selected@3x.png | Bin 0 -> 2462 bytes .../myQuestion.imageset/Contents.json | 23 + .../myQuestion.imageset/myQuestion.png | Bin 0 -> 588 bytes .../myQuestion.imageset/myQuestion@2x.png | Bin 0 -> 1144 bytes .../myQuestion.imageset/myQuestion@3x.png | Bin 0 -> 1746 bytes .../Contents.json | 23 + .../pictureQuestion_Left.png | Bin 0 -> 2326 bytes .../pictureQuestion_Left@2x.png | Bin 0 -> 6239 bytes .../pictureQuestion_Left@3x.png | Bin 0 -> 12716 bytes .../questionDetailBack.imageset/Contents.json | 23 + .../questionDetailBack.png | Bin 0 -> 62588 bytes .../questionDetailBack@2x.png | Bin 0 -> 262512 bytes .../questionDetailBack@3x.png | Bin 0 -> 586749 bytes .../questionHeardBack.imageset/Contents.json | 23 + .../questionHeardBack.png | Bin 0 -> 48621 bytes .../questionHeardBack@2x.png | Bin 0 -> 231710 bytes .../questionHeardBack@3x.png | Bin 0 -> 562052 bytes .../questionLeft_icon.imageset/Contents.json | 23 + .../questionLeft_icon.png | Bin 0 -> 650 bytes .../questionLeft_icon@2x.png | Bin 0 -> 1333 bytes .../questionLeft_icon@3x.png | Bin 0 -> 2107 bytes .../questionTitleImg.imageset/Contents.json | 23 + .../questionTitleImg.png | Bin 0 -> 35979 bytes .../questionTitleImg@2x.png | Bin 0 -> 130412 bytes .../questionTitleImg@3x.png | Bin 0 -> 247303 bytes .../readingNumber.imageset/Contents.json | 23 + .../readingNumber.imageset/readingNumber.png | Bin 0 -> 555 bytes .../readingNumber@2x.png | Bin 0 -> 1186 bytes .../readingNumber@3x.png | Bin 0 -> 2615 bytes .../repay_Icon.imageset/Contents.json | 23 + .../repay_Icon.imageset/repay_Icon.png | Bin 0 -> 2100 bytes .../repay_Icon.imageset/repay_Icon@2x.png | Bin 0 -> 5743 bytes .../repay_Icon.imageset/repay_Icon@3x.png | Bin 0 -> 11728 bytes .../reportBackImg.imageset/Contents.json | 23 + .../reportBackImg.imageset/reportBackImg.png | Bin 0 -> 8282 bytes .../reportBackImg@2x.png | Bin 0 -> 22391 bytes .../reportBackImg@3x.png | Bin 0 -> 46836 bytes .../report_navRight.imageset/Contents.json | 21 + .../report_navRight.png | Bin 0 -> 1204 bytes .../rightSelectedImg.imageset/Contents.json | 23 + .../rightSelectedImg.png | Bin 0 -> 1104 bytes .../rightSelectedImg@2x.png | Bin 0 -> 2539 bytes .../rightSelectedImg@3x.png | Bin 0 -> 4633 bytes .../roomPlaceholder.imageset/Contents.json | 23 + .../roomPlaceholder.png | Bin 0 -> 1370 bytes .../roomPlaceholder@2x.png | Bin 0 -> 2544 bytes .../roomPlaceholder@3x.png | Bin 0 -> 3949 bytes .../samllAssistant.imageset/Contents.json | 23 + .../samllAssistant.png | Bin 0 -> 631 bytes .../samllAssistant@2x.png | Bin 0 -> 1307 bytes .../samllAssistant@3x.png | Bin 0 -> 1973 bytes .../searchRightNav.imageset/Contents.json | 21 + .../searchRightNav.png | Bin 0 -> 444 bytes .../selectedNomal.imageset/Contents.json | 23 + .../selectedNomal.imageset/selectedNomal.png | Bin 0 -> 1103 bytes .../selectedNomal@2x.png | Bin 0 -> 2101 bytes .../selectedNomal@3x.png | Bin 0 -> 5239 bytes .../statusTop_nomal.imageset/Contents.json | 23 + .../statusTop_nomal.png | Bin 0 -> 596 bytes .../statusTop_nomal@2x.png | Bin 0 -> 1172 bytes .../statusTop_nomal@3x.png | Bin 0 -> 1807 bytes .../statusTop_selected.imageset/Contents.json | 23 + .../statusTop_selected.png | Bin 0 -> 1233 bytes .../statusTop_selected@2x.png | Bin 0 -> 2626 bytes .../statusTop_selected@3x.png | Bin 0 -> 4064 bytes .../videQuestion_Left.imageset/Contents.json | 23 + .../videQuestion_Left.png | Bin 0 -> 2068 bytes .../videQuestion_Left@2x.png | Bin 0 -> 5854 bytes .../videQuestion_Left@3x.png | Bin 0 -> 12248 bytes .../SOS/AEDIcon.imageset/AEDIcon.png | Bin 0 -> 1487 bytes .../SOS/AEDIcon.imageset/AEDIcon@2x.png | Bin 0 -> 3298 bytes .../SOS/AEDIcon.imageset/AEDIcon@3x.png | Bin 0 -> 5439 bytes .../SOS/AEDIcon.imageset/Contents.json | 23 + .../Assets.xcassets/SOS/Contents.json | 6 + .../SOSLinkagePeople.imageset/Contents.json | 23 + .../SOSLinkagePeople.png | Bin 0 -> 1492 bytes .../SOSLinkagePeople@2x.png | Bin 0 -> 3102 bytes .../SOSLinkagePeople@3x.png | Bin 0 -> 4998 bytes .../Contents.json | 23 + .../address_NavLoctaion.png | Bin 0 -> 1338 bytes .../address_NavLoctaion@2x.png | Bin 0 -> 2758 bytes .../address_NavLoctaion@3x.png | Bin 0 -> 4453 bytes .../SOS/address_phone.imageset/Contents.json | 23 + .../address_phone.imageset/address_phone.png | Bin 0 -> 1339 bytes .../address_phone@2x.png | Bin 0 -> 2739 bytes .../address_phone@3x.png | Bin 0 -> 4492 bytes .../SOS/callHospation.imageset/Contents.json | 23 + .../callHospation.imageset/callHospation.png | Bin 0 -> 1151 bytes .../callHospation@2x.png | Bin 0 -> 2837 bytes .../callHospation@3x.png | Bin 0 -> 4661 bytes .../SOS/callSoSIcon.imageset/Contents.json | 23 + .../SOS/callSoSIcon.imageset/callSoSIcon.png | Bin 0 -> 897 bytes .../callSoSIcon.imageset/callSoSIcon@2x.png | Bin 0 -> 1786 bytes .../callSoSIcon.imageset/callSoSIcon@3x.png | Bin 0 -> 2748 bytes .../SOS/garyRight.imageset/Contents.json | 23 + .../SOS/garyRight.imageset/garyRight.png | Bin 0 -> 464 bytes .../SOS/garyRight.imageset/garyRight@2x.png | Bin 0 -> 1025 bytes .../SOS/garyRight.imageset/garyRight@3x.png | Bin 0 -> 2017 bytes .../SOS/hezuoHospital.imageset/Contents.json | 23 + .../hezuoHospital.imageset/hezuoHospital.png | Bin 0 -> 1374 bytes .../hezuoHospital@2x.png | Bin 0 -> 2675 bytes .../hezuoHospital@3x.png | Bin 0 -> 4032 bytes .../medicalAnnitation.imageset/Contents.json | 23 + .../medicalAnnitation.png | Bin 0 -> 1432 bytes .../medicalAnnitation@2x.png | Bin 0 -> 2904 bytes .../medicalAnnitation@3x.png | Bin 0 -> 4361 bytes .../SOS/myLocationIcon.imageset/Contents.json | 23 + .../myLocationIcon.png | Bin 0 -> 1851 bytes .../myLocationIcon@2x.png | Bin 0 -> 4409 bytes .../myLocationIcon@3x.png | Bin 0 -> 7730 bytes .../SOS/sosCard.imageset/Contents.json | 23 + .../SOS/sosCard.imageset/sosCard.png | Bin 0 -> 1574 bytes .../SOS/sosCard.imageset/sosCard@2x.png | Bin 0 -> 3276 bytes .../SOS/sosCard.imageset/sosCard@3x.png | Bin 0 -> 5050 bytes .../SOS/sosPeople.imageset/Contents.json | 23 + .../SOS/sosPeople.imageset/sosPeople.png | Bin 0 -> 1521 bytes .../SOS/sosPeople.imageset/sosPeople@2x.png | Bin 0 -> 3305 bytes .../SOS/sosPeople.imageset/sosPeople@3x.png | Bin 0 -> 5261 bytes .../youtianHosoital.imageset/Contents.json | 23 + .../youtianHosoital.png | Bin 0 -> 1559 bytes .../youtianHosoital@2x.png | Bin 0 -> 3877 bytes .../youtianHosoital@3x.png | Bin 0 -> 7606 bytes .../Assets.xcassets/TUIResource/Contents.json | 6 + .../endQuestionItem.imageset/Contents.json | 23 + .../endQuestionItem.png | Bin 0 -> 1542 bytes .../endQuestionItem@2x.png | Bin 0 -> 3058 bytes .../endQuestionItem@3x.png | Bin 0 -> 4973 bytes .../noQuestionImg.imageset/Contents.json | 23 + .../noQuestionImg.imageset/noQuestionImg.png | Bin 0 -> 18871 bytes .../noQuestionImg@2x.png | Bin 0 -> 57491 bytes .../noQuestionImg@3x.png | Bin 0 -> 95014 bytes .../Assets.xcassets/other/Contents.json | 6 + .../FeminineSymbol.imageset/Contents.json | 23 + .../Feminine Symbol.png | Bin 0 -> 598 bytes .../Feminine Symbol@2x.png | Bin 0 -> 1247 bytes .../Feminine Symbol@3x.png | Bin 0 -> 2092 bytes .../MasculineMark.imageset/Contents.json | 23 + .../MasculineMark.imageset/MasculineMark.png | Bin 0 -> 678 bytes .../MasculineMark@2x.png | Bin 0 -> 1462 bytes .../MasculineMark@3x.png | Bin 0 -> 2082 bytes .../other/add.imageset/Contents.json | 21 + .../other/add.imageset/add@3x.png | Bin 0 -> 3220 bytes .../addQuestionPeople.imageset/Contents.json | 23 + .../addQuestionPeople.png | Bin 0 -> 370 bytes .../addQuestionPeople@2x.png | Bin 0 -> 446 bytes .../addQuestionPeople@3x.png | Bin 0 -> 626 bytes .../other/back.imageset/Contents.json | 23 + .../other/back.imageset/back.png | Bin 0 -> 294 bytes .../other/back.imageset/back@2x.png | Bin 0 -> 486 bytes .../other/back.imageset/back@3x.png | Bin 0 -> 740 bytes .../Contents.json | 22 + .../c_chaKeyboardButton.png | Bin 0 -> 3007 bytes .../c_chaKeyboardButton@2x.png | Bin 0 -> 3425 bytes .../Contents.json | 22 + .../c_chaKeyboardButtonSel.png | Bin 0 -> 3018 bytes .../c_chaKeyboardButtonSel@2x.png | Bin 0 -> 3443 bytes .../Contents.json | 22 + .../c_chaKeyboardShiftButton.png | Bin 0 -> 3258 bytes .../c_chaKeyboardShiftButton@2x.png | Bin 0 -> 4004 bytes .../Contents.json | 22 + .../c_chaKeyboardShiftButtonSel.png | Bin 0 -> 3165 bytes .../c_chaKeyboardShiftButtonSel@2x.png | Bin 0 -> 3736 bytes .../Contents.json | 22 + .../c_charKeyboardButton.png | Bin 0 -> 3007 bytes .../c_charKeyboardButton@2x.png | Bin 0 -> 3425 bytes .../Contents.json | 21 + .../c_charKeyboardButtonSel@2x.png | Bin 0 -> 3443 bytes .../Contents.json | 22 + .../c_charKeyboardShiftButton.png | Bin 0 -> 3258 bytes .../c_charKeyboardShiftButton@2x.png | Bin 0 -> 4004 bytes .../Contents.json | 22 + .../c_charKeyboardShiftButtonSel.png | Bin 0 -> 3165 bytes .../c_charKeyboardShiftButtonSel@2x.png | Bin 0 -> 3736 bytes .../Contents.json | 22 + .../c_character_keyboardDeleteButton.png | Bin 0 -> 3370 bytes .../c_character_keyboardDeleteButton@2x.png | Bin 0 -> 4358 bytes .../Contents.json | 22 + .../c_character_keyboardDeleteButtonSel.png | Bin 0 -> 3255 bytes ...c_character_keyboardDeleteButtonSel@2x.png | Bin 0 -> 3984 bytes .../Contents.json | 22 + .../c_character_keyboardSwitchButton.png | Bin 0 -> 2943 bytes .../c_character_keyboardSwitchButton@2x.png | Bin 0 -> 3194 bytes .../Contents.json | 22 + .../c_character_keyboardSwitchButtonSel.png | Bin 0 -> 2915 bytes ...c_character_keyboardSwitchButtonSel@2x.png | Bin 0 -> 3141 bytes .../Contents.json | 21 + .../c_chraKeyboardButtonSel.png | Bin 0 -> 3018 bytes .../Contents.json | 22 + .../c_keyboardBackground.png | Bin 0 -> 2797 bytes .../c_keyboardBackground@2x.png | Bin 0 -> 2802 bytes .../Contents.json | 22 + .../c_numKeyboardButton.png | Bin 0 -> 3055 bytes .../c_numKeyboardButton@2x.png | Bin 0 -> 3543 bytes .../Contents.json | 22 + .../c_numKeyboardButtonSel.png | Bin 0 -> 3056 bytes .../c_numKeyboardButtonSel@2x.png | Bin 0 -> 3546 bytes .../Contents.json | 22 + .../c_number_keyboardDeleteButton.png | Bin 0 -> 3560 bytes .../c_number_keyboardDeleteButton@2x.png | Bin 0 -> 4854 bytes .../Contents.json | 22 + .../c_number_keyboardDeleteButtonSel.png | Bin 0 -> 3407 bytes .../c_number_keyboardDeleteButtonSel@2x.png | Bin 0 -> 4332 bytes .../Contents.json | 22 + .../c_number_keyboardSwitchButton.png | Bin 0 -> 3022 bytes .../c_number_keyboardSwitchButton@2x.png | Bin 0 -> 3575 bytes .../Contents.json | 22 + .../c_number_keyboardSwitchButtonSel.png | Bin 0 -> 3060 bytes .../c_number_keyboardSwitchButtonSel@2x.png | Bin 0 -> 3466 bytes .../Contents.json | 22 + .../c_symbolKeyboardButton.png | Bin 0 -> 3007 bytes .../c_symbolKeyboardButton@2x.png | Bin 0 -> 3425 bytes .../Contents.json | 22 + .../c_symbolKeyboardButtonSel.png | Bin 0 -> 3018 bytes .../c_symbolKeyboardButtonSel@2x.png | Bin 0 -> 3443 bytes .../Contents.json | 22 + .../c_symbol_keyboardDeleteButton.png | Bin 0 -> 3508 bytes .../c_symbol_keyboardDeleteButton@2x.png | Bin 0 -> 4764 bytes .../Contents.json | 22 + .../c_symbol_keyboardDeleteButtonSel.png | Bin 0 -> 3475 bytes .../c_symbol_keyboardDeleteButtonSel@2x.png | Bin 0 -> 4635 bytes .../Contents.json | 22 + .../c_symbol_keyboardSwitchButton.png | Bin 0 -> 3090 bytes .../c_symbol_keyboardSwitchButton@2x.png | Bin 0 -> 3637 bytes .../Contents.json | 22 + .../c_symbol_keyboardSwitchButtonSel.png | Bin 0 -> 3053 bytes .../c_symbol_keyboardSwitchButtonSel@2x.png | Bin 0 -> 3525 bytes .../choose_Selected.imageset/Contents.json | 23 + .../choose_Selected.png | Bin 0 -> 540 bytes .../choose_Selected@2x.png | Bin 0 -> 997 bytes .../choose_Selected@3x.png | Bin 0 -> 1548 bytes .../other/choose_nomal.imageset/Contents.json | 23 + .../choose_nomal.imageset/choose_nomal.png | Bin 0 -> 342 bytes .../choose_nomal.imageset/choose_nomal@2x.png | Bin 0 -> 573 bytes .../choose_nomal.imageset/choose_nomal@3x.png | Bin 0 -> 835 bytes .../other/collectLove.imageset/Contents.json | 23 + .../collectLove.imageset/collectLove.png | Bin 0 -> 484 bytes .../collectLove.imageset/collectLove@2x.png | Bin 0 -> 889 bytes .../collectLove.imageset/collectLove@3x.png | Bin 0 -> 1321 bytes .../downArrow_icon.imageset/Contents.json | 23 + .../downArrow_icon.png | Bin 0 -> 519 bytes .../downArrow_icon@2x.png | Bin 0 -> 1024 bytes .../downArrow_icon@3x.png | Bin 0 -> 1961 bytes .../fileDataTopImage.imageset/Contents.json | 23 + .../fileDataTopImage.png | Bin 0 -> 52054 bytes .../fileDataTopImage@2x.png | Bin 0 -> 186425 bytes .../fileDataTopImage@3x.png | Bin 0 -> 405617 bytes .../other/fw_close.imageset/Contents.json | 21 + .../other/fw_close.imageset/fw_close.png | Bin 0 -> 2647 bytes .../garyBlueAccow.imageset/Contents.json | 23 + .../garyBlueAccow.imageset/garyBlueAccow.png | Bin 0 -> 337 bytes .../garyBlueAccow@2x.png | Bin 0 -> 487 bytes .../garyBlueAccow@3x.png | Bin 0 -> 987 bytes .../other/greenAccow.imageset/Contents.json | 23 + .../other/greenAccow.imageset/greenAccow.png | Bin 0 -> 372 bytes .../greenAccow.imageset/greenAccow@2x.png | Bin 0 -> 736 bytes .../greenAccow.imageset/greenAccow@3x.png | Bin 0 -> 1408 bytes .../greenAccow_icon.imageset/Contents.json | 23 + .../greenAccow_icon.png | Bin 0 -> 362 bytes .../greenAccow_icon@2x.png | Bin 0 -> 624 bytes .../greenAccow_icon@3x.png | Bin 0 -> 870 bytes .../greenSmallTime.imageset/Contents.json | 23 + .../greenSmallTime.png | Bin 0 -> 617 bytes .../greenSmallTime@2x.png | Bin 0 -> 1145 bytes .../greenSmallTime@3x.png | Bin 0 -> 2776 bytes .../other/home_star.imageset/Contents.json | 23 + .../other/home_star.imageset/home_star.png | Bin 0 -> 954 bytes .../other/home_star.imageset/home_star@2x.png | Bin 0 -> 1909 bytes .../other/home_star.imageset/home_star@3x.png | Bin 0 -> 2984 bytes .../homestar_gray.imageset/Contents.json | 23 + .../homestar_gray.imageset/homestar_gray.png | Bin 0 -> 837 bytes .../homestar_gray@2x.png | Bin 0 -> 1584 bytes .../homestar_gray@3x.png | Bin 0 -> 2482 bytes .../ic_more_archives.imageset/Contents.json | 21 + .../ic_more_archives.png | Bin 0 -> 3927 bytes .../other/ic_more_info.imageset/Contents.json | 21 + .../ic_more_info.imageset/ic_more_info.png | Bin 0 -> 921 bytes .../ic_more_location.imageset/Contents.json | 21 + .../ic_more_location.png | Bin 0 -> 4930 bytes .../Contents.json | 21 + .../ic_more_medical_examination_report.png | Bin 0 -> 4416 bytes .../info_samllHeard.imageset/Contents.json | 23 + .../info_samllHeard.png | Bin 0 -> 813 bytes .../info_samllHeard@2x.png | Bin 0 -> 1386 bytes .../info_samllHeard@3x.png | Bin 0 -> 3451 bytes .../info_smallCard.imageset/Contents.json | 23 + .../info_smallCard.png | Bin 0 -> 766 bytes .../info_smallCard@2x.png | Bin 0 -> 1267 bytes .../info_smallCard@3x.png | Bin 0 -> 3267 bytes .../info_smallDanwei.imageset/Contents.json | 23 + .../info_smallDanwei.png | Bin 0 -> 849 bytes .../info_smallDanwei@2x.png | Bin 0 -> 1435 bytes .../info_smallDanwei@3x.png | Bin 0 -> 3665 bytes .../leftAccow_Selected.imageset/Contents.json | 23 + .../leftAccow _Selected.png | Bin 0 -> 348 bytes .../leftAccow _Selected@2x.png | Bin 0 -> 602 bytes .../leftAccow _Selected@3x.png | Bin 0 -> 846 bytes .../Contents.json | 22 + .../login_c_character_keyboardLoginButton.png | Bin 0 -> 3089 bytes ...gin_c_character_keyboardLoginButton@2x.png | Bin 0 -> 3601 bytes .../Contents.json | 21 + .../login_c_number_keyboardLoginButton.png | Bin 0 -> 3090 bytes .../Contents.json | 21 + ...in_c_number_keyboardLoginButton.png@2x.png | Bin 0 -> 3577 bytes .../Contents.json | 21 + .../login_c_symbol_keyboardLoginButton.png | Bin 0 -> 3089 bytes .../Contents.json | 21 + ...in_c_symbol_keyboardLoginButton.png@2x.png | Bin 0 -> 3601 bytes .../Contents.json | 22 + .../login_c_symbol_keyboardLoginButtonSel.png | Bin 0 -> 3021 bytes ...gin_c_symbol_keyboardLoginButtonSel@2x.png | Bin 0 -> 3483 bytes .../Contents.json | 22 + .../login_c_symbol_keyboardSwitchButton.png | Bin 0 -> 3075 bytes ...login_c_symbol_keyboardSwitchButton@2x.png | Bin 0 -> 3593 bytes .../Contents.json | 22 + ...login_c_symbol_keyboardSwitchButtonSel.png | Bin 0 -> 3021 bytes ...in_c_symbol_keyboardSwitchButtonSel@2x.png | Bin 0 -> 3483 bytes .../other/navBackImg.imageset/Contents.json | 21 + .../other/navBackImg.imageset/navBackImg.png | Bin 0 -> 1142 bytes .../other/noNetwork.imageset/Contents.json | 21 + .../other/noNetwork.imageset/noNetwork@2x.png | Bin 0 -> 7040 bytes .../other/placeholdIMG.imageset/Contents.json | 21 + .../placeholdIMG.imageset/placeholdIMG.png | Bin 0 -> 4279 bytes .../popChoose_normal.imageset/Contents.json | 23 + .../popChoose_normal.png | Bin 0 -> 389 bytes .../popChoose_normal@2x.png | Bin 0 -> 596 bytes .../popChoose_normal@3x.png | Bin 0 -> 915 bytes .../popChoose_selected.imageset/Contents.json | 23 + .../popChoose_selected.png | Bin 0 -> 538 bytes .../popChoose_selected@2x.png | Bin 0 -> 995 bytes .../popChoose_selected@3x.png | Bin 0 -> 1379 bytes .../processNextIcon.imageset/Contents.json | 23 + .../processNextIcon.png | Bin 0 -> 565 bytes .../processNextIcon@2x.png | Bin 0 -> 1071 bytes .../processNextIcon@3x.png | Bin 0 -> 1698 bytes .../Contents.json | 23 + .../rightAccow_Selected.png | Bin 0 -> 360 bytes .../rightAccow_Selected@2x.png | Bin 0 -> 621 bytes .../rightAccow_Selected@3x.png | Bin 0 -> 872 bytes .../other/setting_icon.imageset/Contents.json | 23 + .../setting_icon.imageset/setting_icon.png | Bin 0 -> 611 bytes .../setting_icon.imageset/setting_icon@2x.png | Bin 0 -> 1338 bytes .../setting_icon.imageset/setting_icon@3x.png | Bin 0 -> 2200 bytes .../other/upAccow_gary.imageset/Contents.json | 23 + .../upAccow_gary.imageset/upAccow_gary.png | Bin 0 -> 324 bytes .../upAccow_gary.imageset/upAccow_gary@2x.png | Bin 0 -> 542 bytes .../upAccow_gary.imageset/upAccow_gary@3x.png | Bin 0 -> 912 bytes .../whiteBack_icon.imageset/Contents.json | 23 + .../whiteBack_icon.png | Bin 0 -> 300 bytes .../whiteBack_icon@2x.png | Bin 0 -> 498 bytes .../whiteBack_icon@3x.png | Bin 0 -> 759 bytes .../stepNumerIcon.imageset/Contents.json | 23 + .../stepNumerIcon.imageset/stepNumerIcon.png | Bin 0 -> 8418 bytes .../stepNumerIcon@2x.png | Bin 0 -> 22951 bytes .../stepNumerIcon@3x.png | Bin 0 -> 41445 bytes .../Base.lproj/LaunchScreen.storyboard | 25 + .../Supporting Files/HQConst.h | 20 + .../Supporting Files/HQConst.m | 19 + .../Supporting Files/Info.plist | 44 + .../Supporting Files/PrefixHeader.pch | 86 + .../XinjiangProject/Supporting Files/main.m | 18 + .../AddressPickerView/BRAddressModel.h | 51 + .../AddressPickerView/BRAddressModel.m | 24 + .../BRAddressPickerView.bundle/BRCity.json | 13634 ++++++++++++++++ .../AddressPickerView/BRAddressPickerView.h | 127 + .../AddressPickerView/BRAddressPickerView.m | 562 + .../ThirdParty/BRPickerView/BRPickerView.h | 17 + .../ThirdParty/BRPickerView/Base/BRBaseView.h | 76 + .../ThirdParty/BRPickerView/Base/BRBaseView.m | 398 + .../BRPickerView/Base/BRPickerStyle.h | 251 + .../BRPickerView/Base/BRPickerStyle.m | 494 + .../en.lproj/Localizable.strings | 35 + .../zh-Hans.lproj/Localizable.strings | 35 + .../zh-Hant.lproj/Localizable.strings | 35 + .../BRPickerView/Base/BRPickerViewMacro.h | 87 + .../BRPickerView/Base/NSBundle+BRPickerView.h | 26 + .../BRPickerView/Base/NSBundle+BRPickerView.m | 68 + .../DatePickerView/BRDatePickerView+BR.h | 111 + .../DatePickerView/BRDatePickerView+BR.m | 755 + .../DatePickerView/BRDatePickerView.h | 274 + .../DatePickerView/BRDatePickerView.m | 1965 +++ .../DatePickerView/NSDate+BRPickerView.h | 126 + .../DatePickerView/NSDate+BRPickerView.m | 400 + .../StringPickerView/BRResultModel.h | 37 + .../StringPickerView/BRResultModel.m | 41 + .../StringPickerView/BRStringPickerView.h | 191 + .../StringPickerView/BRStringPickerView.m | 571 + .../ThirdParty/EasyShowView/EasyAlertConfig.h | 45 + .../ThirdParty/EasyShowView/EasyAlertConfig.m | 99 + .../EasyShowView/EasyAlertGlobalConfig.h | 50 + .../EasyShowView/EasyAlertGlobalConfig.m | 30 + .../ThirdParty/EasyShowView/EasyAlertItem.h | 22 + .../ThirdParty/EasyShowView/EasyAlertItem.m | 25 + .../ThirdParty/EasyShowView/EasyAlertPart.h | 29 + .../ThirdParty/EasyShowView/EasyAlertPart.m | 60 + .../ThirdParty/EasyShowView/EasyAlertTypes.h | 65 + .../ThirdParty/EasyShowView/EasyAlertTypes.m | 13 + .../ThirdParty/EasyShowView/EasyAlertView.h | 78 + .../ThirdParty/EasyShowView/EasyAlertView.m | 671 + .../ThirdParty/EasyShowView/EasyEmptyConfig.h | 53 + .../ThirdParty/EasyShowView/EasyEmptyConfig.m | 118 + .../EasyShowView/EasyEmptyGlobalConfig.h | 40 + .../EasyShowView/EasyEmptyGlobalConfig.m | 32 + .../ThirdParty/EasyShowView/EasyEmptyPart.h | 31 + .../ThirdParty/EasyShowView/EasyEmptyPart.m | 75 + .../ThirdParty/EasyShowView/EasyEmptyTypes.h | 33 + .../ThirdParty/EasyShowView/EasyEmptyTypes.m | 13 + .../ThirdParty/EasyShowView/EasyEmptyView.h | 34 + .../ThirdParty/EasyShowView/EasyEmptyView.m | 365 + .../EasyShowView/EasyLoadingConfig.h | 96 + .../EasyShowView/EasyLoadingConfig.m | 132 + .../EasyShowView/EasyLoadingGlobalConfig.h | 61 + .../EasyShowView/EasyLoadingGlobalConfig.m | 31 + .../EasyShowView/EasyLoadingTypes.h | 52 + .../EasyShowView/EasyLoadingTypes.m | 19 + .../ThirdParty/EasyShowView/EasyLoadingView.h | 41 + .../ThirdParty/EasyShowView/EasyLoadingView.m | 630 + .../ThirdParty/EasyShowView/EasyShowLabel.h | 15 + .../ThirdParty/EasyShowView/EasyShowLabel.m | 51 + .../ThirdParty/EasyShowView/EasyShowUtils.h | 125 + .../ThirdParty/EasyShowView/EasyShowUtils.m | 90 + .../ThirdParty/EasyShowView/EasyShowView.h | 20 + .../ThirdParty/EasyShowView/EasyTextBgView.h | 26 + .../ThirdParty/EasyShowView/EasyTextBgView.m | 310 + .../ThirdParty/EasyShowView/EasyTextConfig.h | 102 + .../ThirdParty/EasyShowView/EasyTextConfig.m | 118 + .../EasyShowView/EasyTextGlobalConfig.h | 59 + .../EasyShowView/EasyTextGlobalConfig.m | 38 + .../ThirdParty/EasyShowView/EasyTextTypes.h | 59 + .../ThirdParty/EasyShowView/EasyTextTypes.m | 27 + .../ThirdParty/EasyShowView/EasyTextView.h | 46 + .../ThirdParty/EasyShowView/EasyTextView.m | 504 + .../EasyShowView/UIView+EasyShowExt.h | 45 + .../EasyShowView/UIView+EasyShowExt.m | 173 + .../GKCycleScrollView/GKCycleScrollView.h | 143 + .../GKCycleScrollView/GKCycleScrollView.m | 866 + .../GKCycleScrollView/GKCycleScrollViewCell.h | 28 + .../GKCycleScrollView/GKCycleScrollViewCell.m | 54 + .../GKCycleScrollView/GKPageControl.h | 38 + .../GKCycleScrollView/GKPageControl.m | 270 + .../ThirdParty/LVKeyboard/LVKeyboard.h | 31 + .../ThirdParty/LVKeyboard/LVKeyboard.m | 130 + .../ThirdParty/LVKeyboard/LVKeyboardTool.h | 34 + .../ThirdParty/LVKeyboard/LVKeyboardTool.m | 40 + .../ThirdParty/LVKeyboard/LVLetterKeyboard.h | 16 + .../ThirdParty/LVKeyboard/LVLetterKeyboard.m | 216 + .../ThirdParty/LVKeyboard/LVNumberKeyboard.h | 15 + .../ThirdParty/LVKeyboard/LVNumberKeyboard.m | 167 + .../ThirdParty/LVKeyboard/LVSymbolKeyboard.h | 16 + .../ThirdParty/LVKeyboard/LVSymbolKeyboard.m | 139 + .../LVKeyboard/UIView+LVExtension.h | 20 + .../LVKeyboard/UIView+LVExtension.m | 108 + .../LXScrollContentView.h | 60 + .../LXScrollContentView.m | 288 + .../LXSegmentTitleView.h | 103 + .../LXSegmentTitleView.m | 262 + .../ThirdParty/LYEmptyView/LYEmptyBaseView.h | 146 + .../ThirdParty/LYEmptyView/LYEmptyBaseView.m | 212 + .../ThirdParty/LYEmptyView/LYEmptyView.h | 142 + .../ThirdParty/LYEmptyView/LYEmptyView.m | 656 + .../LYEmptyView/LYEmptyViewHeader.h | 15 + .../ThirdParty/LYEmptyView/UIView+Empty.h | 54 + .../ThirdParty/LYEmptyView/UIView+Empty.m | 224 + .../LYEmptyView/UIView+LYExtension.h | 26 + .../LYEmptyView/UIView+LYExtension.m | 108 + .../XinjiangProject/ThirdParty/MQTextField.h | 16 + .../XinjiangProject/ThirdParty/MQTextField.m | 28 + .../ThirdParty/PSCheckVersion/PSAppInfo.h | 70 + .../ThirdParty/PSCheckVersion/PSAppInfo.m | 56 + .../PSCheckVersion/PSCheckVersion.h | 45 + .../PSCheckVersion/PSCheckVersion.m | 196 + .../PSCheckVersion/PSCheckVersionRequest.h | 19 + .../PSCheckVersion/PSCheckVersionRequest.m | 54 + .../PSCheckVersion/PSCheckVersionView.h | 36 + .../PSCheckVersion/PSCheckVersionView.m | 320 + .../XinjiangProject/ThirdParty/RSAObjC.h | 46 + .../XinjiangProject/ThirdParty/RSAObjC.m | 527 + .../Reader/Graphics/AppIcon-076.png | Bin 0 -> 9090 bytes .../Reader/Graphics/AppIcon-120.png | Bin 0 -> 23805 bytes .../Reader/Graphics/AppIcon-152.png | Bin 0 -> 38221 bytes .../Reader/Graphics/AppIcon-167.png | Bin 0 -> 46058 bytes .../Reader/Graphics/AppIcon-180.png | Bin 0 -> 53367 bytes .../Reader/Graphics/Reader-Button-H.png | Bin 0 -> 495 bytes .../Reader/Graphics/Reader-Button-H@2x.png | Bin 0 -> 1204 bytes .../Reader/Graphics/Reader-Button-H@3x.png | Bin 0 -> 1730 bytes .../Reader/Graphics/Reader-Button-N.png | Bin 0 -> 497 bytes .../Reader/Graphics/Reader-Button-N@2x.png | Bin 0 -> 1310 bytes .../Reader/Graphics/Reader-Button-N@3x.png | Bin 0 -> 1762 bytes .../Reader/Graphics/Reader-Email.png | Bin 0 -> 366 bytes .../Reader/Graphics/Reader-Email@2x.png | Bin 0 -> 783 bytes .../Reader/Graphics/Reader-Email@3x.png | Bin 0 -> 1217 bytes .../Reader/Graphics/Reader-Export.png | Bin 0 -> 421 bytes .../Reader/Graphics/Reader-Export@2x.png | Bin 0 -> 665 bytes .../Reader/Graphics/Reader-Export@3x.png | Bin 0 -> 903 bytes .../Reader/Graphics/Reader-Mark-N.png | Bin 0 -> 165 bytes .../Reader/Graphics/Reader-Mark-N@2x.png | Bin 0 -> 200 bytes .../Reader/Graphics/Reader-Mark-N@3x.png | Bin 0 -> 367 bytes .../Reader/Graphics/Reader-Mark-Y.png | Bin 0 -> 165 bytes .../Reader/Graphics/Reader-Mark-Y@2x.png | Bin 0 -> 201 bytes .../Reader/Graphics/Reader-Mark-Y@3x.png | Bin 0 -> 368 bytes .../Reader/Graphics/Reader-Print.png | Bin 0 -> 301 bytes .../Reader/Graphics/Reader-Print@2x.png | Bin 0 -> 474 bytes .../Reader/Graphics/Reader-Print@3x.png | Bin 0 -> 639 bytes .../Reader/Graphics/Reader-Thumbs.png | Bin 0 -> 228 bytes .../Reader/Graphics/Reader-Thumbs@2x.png | Bin 0 -> 311 bytes .../Reader/Graphics/Reader-Thumbs@3x.png | Bin 0 -> 380 bytes .../ThirdParty/Reader/Sources/CGPDFDocument.h | 39 + .../ThirdParty/Reader/Sources/CGPDFDocument.m | 242 + .../Reader/Sources/ReaderConstants.h | 39 + .../Reader/Sources/ReaderConstants.m | 28 + .../Reader/Sources/ReaderContentPage.h | 50 + .../Reader/Sources/ReaderContentPage.m | 593 + .../Reader/Sources/ReaderContentTile.h | 31 + .../Reader/Sources/ReaderContentTile.m | 71 + .../Reader/Sources/ReaderContentView.h | 66 + .../Reader/Sources/ReaderContentView.m | 402 + .../Reader/Sources/ReaderDocument.h | 57 + .../Reader/Sources/ReaderDocument.m | 354 + .../Reader/Sources/ReaderDocumentOutline.h | 45 + .../Reader/Sources/ReaderDocumentOutline.m | 467 + .../Reader/Sources/ReaderMainPagebar.h | 88 + .../Reader/Sources/ReaderMainPagebar.m | 642 + .../Reader/Sources/ReaderMainToolbar.h | 57 + .../Reader/Sources/ReaderMainToolbar.m | 367 + .../Reader/Sources/ReaderThumbCache.h | 54 + .../Reader/Sources/ReaderThumbCache.m | 228 + .../Reader/Sources/ReaderThumbFetch.h | 36 + .../Reader/Sources/ReaderThumbFetch.m | 128 + .../Reader/Sources/ReaderThumbQueue.h | 54 + .../Reader/Sources/ReaderThumbQueue.m | 141 + .../Reader/Sources/ReaderThumbRender.h | 36 + .../Reader/Sources/ReaderThumbRender.m | 204 + .../Reader/Sources/ReaderThumbRequest.h | 45 + .../Reader/Sources/ReaderThumbRequest.m | 96 + .../Reader/Sources/ReaderThumbView.h | 45 + .../Reader/Sources/ReaderThumbView.m | 93 + .../Reader/Sources/ReaderThumbsView.h | 68 + .../Reader/Sources/ReaderThumbsView.m | 545 + .../Reader/Sources/ReaderViewController.h | 46 + .../Reader/Sources/ReaderViewController.m | 921 ++ .../Reader/Sources/ThumbsMainToolbar.h | 47 + .../Reader/Sources/ThumbsMainToolbar.m | 170 + .../Reader/Sources/ThumbsViewController.h | 66 + .../Reader/Sources/ThumbsViewController.m | 515 + .../Reader/Sources/UIXToolbarView.h | 40 + .../Reader/Sources/UIXToolbarView.m | 131 + .../RingView/QHCircleProgressView.h | 48 + .../RingView/QHCircleProgressView.m | 153 + .../SDPhotoBrowser/SDBrowserImageView.h | 27 + .../SDPhotoBrowser/SDBrowserImageView.m | 237 + .../SDPhotoBrowser/SDPhotoBrowser.h | 37 + .../SDPhotoBrowser/SDPhotoBrowser.m | 377 + .../SDPhotoBrowser/SDPhotoBrowserConfig.h | 42 + .../ThirdParty/SDPhotoBrowser/SDWaitingView.h | 17 + .../ThirdParty/SDPhotoBrowser/SDWaitingView.m | 93 + .../ThirdParty/TYMapNavSheet/TYMapNavSheet.h | 28 + .../ThirdParty/TYMapNavSheet/TYMapNavSheet.m | 167 + .../UIPlaceHolderTextView.h | 18 + .../UIPlaceHolderTextView.m | 119 + .../ThirdParty/UIViewAdditions.h | 58 + .../ThirdParty/UIViewAdditions.m | 227 + .../UIImage+XLExtension.h | 18 + .../UIImage+XLExtension.m | 34 + .../UIView+XLExtension.h | 117 + .../UIView+XLExtension.m | 346 + .../Vender/FSActionSheet/FSActionSheet.h | 65 + .../Vender/FSActionSheet/FSActionSheet.m | 469 + .../Vender/FSActionSheet/FSActionSheetCell.h | 19 + .../Vender/FSActionSheet/FSActionSheetCell.m | 141 + .../FSActionSheet/FSActionSheetConfig.h | 103 + .../FSActionSheet/FSActionSheetConfig.m | 26 + .../Vender/FSActionSheet/FSActionSheetItem.h | 64 + .../Vender/FSActionSheet/FSActionSheetItem.m | 24 + .../FSActionSheet_cancel@2x.png | Bin 0 -> 441 bytes .../FSActionSheet_cancel@3x.png | Bin 0 -> 629 bytes .../XLPhotoBrowser+CoderXL/XLPhotoBrowser.h | 186 + .../XLPhotoBrowser+CoderXL/XLPhotoBrowser.m | 1085 ++ .../XLPhotoBrowserConfig.h | 79 + .../XLPhotoBrowserTypeDefine.h | 59 + .../XLPhotoBrowser+CoderXL/XLProgressView.h | 17 + .../XLPhotoBrowser+CoderXL/XLProgressView.m | 80 + .../XLZoomingScrollView.h | 78 + .../XLZoomingScrollView.m | 331 + .../Utils/3DMAP/CommonUtility.h | 46 + .../Utils/3DMAP/CommonUtility.m | 367 + .../Utils/3DMAP/ErrorInfoUtility.h | 15 + .../Utils/3DMAP/ErrorInfoUtility.m | 78 + .../3DMAP/POI/PoiSearchNearByController.h | 13 + .../3DMAP/POI/PoiSearchNearByController.m | 141 + .../3DMAP/POI/PoiSearchPerIdController.h | 13 + .../3DMAP/POI/PoiSearchPerIdController.m | 141 + .../3DMAP/POI/PoiSearchPerKeywordController.h | 41 + .../3DMAP/POI/PoiSearchPerKeywordController.m | 325 + .../POI/PoiSearchWithInPolygonController.h | 13 + .../POI/PoiSearchWithInPolygonController.m | 145 + .../Utils/3DMAP/POI/TipViewController.h | 11 + .../Utils/3DMAP/POI/TipViewController.m | 434 + .../Utils/3DMAP/POI/model/AMapTipAnnotation.h | 31 + .../Utils/3DMAP/POI/model/AMapTipAnnotation.m | 46 + .../Utils/3DMAP/POI/model/BusStopAnnotation.h | 31 + .../Utils/3DMAP/POI/model/BusStopAnnotation.m | 49 + .../Utils/3DMAP/POI/model/POIAnnotation.h | 31 + .../Utils/3DMAP/POI/model/POIAnnotation.m | 48 + .../Utils/3DMAP/UIView+Toast.h | 408 + .../Utils/3DMAP/UIView+Toast.m | 535 + .../AnimatedAnnotationViewController.h | 11 + .../AnimatedAnnotationViewController.m | 120 + .../annotation/AnnotationViewController.h | 12 + .../annotation/AnnotationViewController.m | 177 + .../annotation/model/AnimatedAnnotation.h | 23 + .../annotation/model/AnimatedAnnotation.m | 30 + .../annotation/model/MATrackPointAnnotation.h | 19 + .../annotation/model/MATrackPointAnnotation.m | 13 + .../annotation/view/AnimatedAnnotationView.h | 16 + .../annotation/view/AnimatedAnnotationView.m | 64 + .../annotation/view/CustomAnnotationView.h | 20 + .../annotation/view/CustomAnnotationView.m | 166 + .../3DMAP/annotation/view/CustomCalloutView.h | 13 + .../3DMAP/annotation/view/CustomCalloutView.m | 70 + .../Utils/CustomGraph/DashesLineView.h | 15 + .../Utils/CustomGraph/DashesLineView.m | 65 + .../Utils/CustomGraph/GraphBar.h | 16 + .../Utils/CustomGraph/GraphBar.m | 73 + .../Utils/CustomGraph/GraphConstants.h | 82 + .../Utils/CustomGraph/GraphDot.h | 19 + .../Utils/CustomGraph/GraphDot.m | 38 + .../Utils/CustomGraph/GraphLine.h | 38 + .../Utils/CustomGraph/GraphLine.m | 191 + .../Utils/CustomGraph/GraphPopView.h | 18 + .../Utils/CustomGraph/GraphPopView.m | 70 + .../Utils/CustomGraph/GraphView.h | 71 + .../Utils/CustomGraph/GraphView.m | 217 + .../XinjiangProject/Utils/HQCommonUtils.h | 110 + .../XinjiangProject/Utils/HQCommonUtils.m | 450 + .../XinjiangProject/Utils/LineTextField.h | 19 + .../XinjiangProject/Utils/LineTextField.m | 26 + .../Utils/PopAnimation/HQPopTool.h | 36 + .../Utils/PopAnimation/HQPopTool.m | 74 + .../Utils/Star/FSXBStarRateView.h | 45 + .../Utils/Star/FSXBStarRateView.m | 149 + .../Utils/TagsView/ZHTagListView.h | 49 + .../Utils/TagsView/ZHTagListView.m | 270 + .../Utils/ViewEffects/UIView+Effects.h | 55 + .../Utils/ViewEffects/UIView+Effects.m | 391 + .../XinjiangProject/Utils/XLCircle.h | 22 + .../XinjiangProject/Utils/XLCircle.m | 146 + .../XinjiangProject/Utils/XLCircleProgress.h | 22 + .../XinjiangProject/Utils/XLCircleProgress.m | 55 + .../XinjiangProject/Utils/XMButton/XMButton.h | 38 + .../XinjiangProject/Utils/XMButton/XMButton.m | 147 + .../Utils/XMButton/XMCommonUtils.h | 132 + .../Utils/XMButton/XMCommonUtils.m | 366 + .../Utils/XYTransition/XYTransition.h | 17 + .../Utils/XYTransition/XYTransition.m | 187 + .../Utils/XYTransition/XYTransitionProtocol.h | 30 + .../XinjiangProjectTests.m | 36 + .../XinjiangProjectUITests.m | 44 + .../XinjiangProjectUITestsLaunchTests.m | 37 + 1291 files changed, 107611 insertions(+) create mode 100644 XinjiangProject/PodFile create mode 100644 XinjiangProject/Podfile.lock create mode 100644 XinjiangProject/XinjiangProject.xcodeproj/project.pbxproj create mode 100644 XinjiangProject/XinjiangProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 XinjiangProject/XinjiangProject.xcworkspace/contents.xcworkspacedata create mode 100644 XinjiangProject/XinjiangProject/Categorys/NSArray/NSArray+Sudoku.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/NSArray/NSArray+Sudoku.m create mode 100644 XinjiangProject/XinjiangProject/Categorys/NSAttributedString+Extension.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/NSAttributedString+Extension.m create mode 100755 XinjiangProject/XinjiangProject/Categorys/NSDate/NSDate+IH.h create mode 100755 XinjiangProject/XinjiangProject/Categorys/NSDate/NSDate+IH.m create mode 100644 XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+Log.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+Log.m create mode 100644 XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+NilSafe.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+NilSafe.m create mode 100755 XinjiangProject/XinjiangProject/Categorys/NSString/NSString+FKTools.h create mode 100755 XinjiangProject/XinjiangProject/Categorys/NSString/NSString+FKTools.m create mode 100644 XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+HXExtension.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+HXExtension.m create mode 100644 XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+NYS.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+NYS.m create mode 100644 XinjiangProject/XinjiangProject/Categorys/UIDevice/UIDevice+model.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/UIDevice/UIDevice+model.m create mode 100644 XinjiangProject/XinjiangProject/Categorys/UIImage+RoundedCorner.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/UIImage+RoundedCorner.m create mode 100644 XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+ChangeLineSpaceAndWordSpace.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+ChangeLineSpaceAndWordSpace.m create mode 100644 XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+Extension.h create mode 100644 XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+Extension.m create mode 100755 XinjiangProject/XinjiangProject/Categorys/UIView/UIView+FK.h create mode 100755 XinjiangProject/XinjiangProject/Categorys/UIView/UIView+FK.m create mode 100755 XinjiangProject/XinjiangProject/Define/FontAndColorMacros.h create mode 100755 XinjiangProject/XinjiangProject/Define/StatusMacros.h create mode 100755 XinjiangProject/XinjiangProject/Define/ThirdMacros.h create mode 100755 XinjiangProject/XinjiangProject/Define/YYUtilsMacros.h create mode 100644 XinjiangProject/XinjiangProject/Manager/AudioManager/CQAudioPlayManager.h create mode 100644 XinjiangProject/XinjiangProject/Manager/AudioManager/CQAudioPlayManager.m create mode 100644 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/DownToolsManager.h create mode 100644 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/DownToolsManager.m create mode 100755 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQAPI.h create mode 100755 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQAPI.m create mode 100755 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQNetworkingWithCache.h create mode 100755 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQNetworkingWithCache.m create mode 100644 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDGETHealthTokenManager.h create mode 100644 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDGETHealthTokenManager.m create mode 100644 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDHttpRequest.h create mode 100644 XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDHttpRequest.m create mode 100644 XinjiangProject/XinjiangProject/Manager/RuntimeManager/SwapMethodManager.h create mode 100644 XinjiangProject/XinjiangProject/Manager/RuntimeManager/SwapMethodManager.m create mode 100644 XinjiangProject/XinjiangProject/Manager/TUIManager/ESCTUIManager.h create mode 100644 XinjiangProject/XinjiangProject/Manager/TUIManager/ESCTUIManager.m create mode 100755 XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.h create mode 100755 XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.m create mode 100755 XinjiangProject/XinjiangProject/Manager/UserManager/XMKeychainTool.h create mode 100755 XinjiangProject/XinjiangProject/Manager/UserManager/XMKeychainTool.m create mode 100644 XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+AppService.h create mode 100644 XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+AppService.m create mode 100644 XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+PushService.h create mode 100644 XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+PushService.m create mode 100644 XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate.h create mode 100644 XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate.m create mode 100644 XinjiangProject/XinjiangProject/Project/Base/BaseWebViewVC.h create mode 100644 XinjiangProject/XinjiangProject/Project/Base/BaseWebViewVC.m create mode 100644 XinjiangProject/XinjiangProject/Project/Base/DownPDFFileVC.h create mode 100644 XinjiangProject/XinjiangProject/Project/Base/DownPDFFileVC.m create mode 100644 XinjiangProject/XinjiangProject/Project/Base/HQBaseNavigationController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Base/HQBaseNavigationController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Base/HQBaseTabBarController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Base/HQBaseTabBarController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Base/HQBaseViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Base/HQBaseViewController.m create mode 100755 XinjiangProject/XinjiangProject/Project/Base/TabBarView/HQTabBar.h create mode 100755 XinjiangProject/XinjiangProject/Project/Base/TabBarView/HQTabBar.m create mode 100755 XinjiangProject/XinjiangProject/Project/Base/TabBarView/UITabBar+CustomBadge.h create mode 100755 XinjiangProject/XinjiangProject/Project/Base/TabBarView/UITabBar+CustomBadge.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomSystemEvaluateModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomSystemEvaluateModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTUIHistoryModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTUIHistoryModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTextModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTextModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomTUIModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomTUIModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIBaseMessageController.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIBaseMessageController.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIHistoryTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIHistoryTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomAudioCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomAudioCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomDoctorIDTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomDoctorIDTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthFileVideoCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthFileVideoCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthReportVideoCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthReportVideoCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomMapMessageCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomMapMessageCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomReviceTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomReviceTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemImageCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemImageCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemTextCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemTextCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemVideoCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemVideoCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cellData/CustomMapMessageCellData.h create mode 100644 XinjiangProject/XinjiangProject/Project/CustomTUIChat/cellData/CustomMapMessageCellData.m create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/Login/HQLoginViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/Login/HQLoginViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginFoundPasswordViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginFoundPasswordViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginSetPasswordViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginSetPasswordViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/Login/Model/IMUserInfoModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/Login/Model/IMUserInfoModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/register/HQRegisterViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Login_Register/register/HQRegisterViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/AddContactViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/AddContactViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/EditSystemViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/EditSystemViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MinePictureRecordViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MinePictureRecordViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineQuestionRecordViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineQuestionRecordViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineUserInfoViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineUserInfoViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineVideoRecordViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineVideoRecordViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MyCenterViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MyCenterViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessDetailModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessDetailModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessHospitalModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessHospitalModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillnessModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillnessModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/EmergencyContactModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/EmergencyContactModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/MineCenterUserModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/MineCenterUserModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorDetailInfoModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorDetailInfoModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/BigilessTopStatusView.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/BigilessTopStatusView.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessListTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessListTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/HistoryOrderTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/HistoryOrderTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/MineHeardTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/MineHeardTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/MineUserInfoTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/MineUserInfoTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterHeardView.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterHeardView.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDetailTableHeardView.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDetailTableHeardView.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorDetailTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorDetailTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SliderView.h create mode 100644 XinjiangProject/XinjiangProject/Project/MainCenter/View/SliderView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/HeartBadViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/HeartBadViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/Model/MonitoringDataModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/Model/MonitoringDataModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadHeardView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadHeardView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTabFooterView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTabFooterView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/AddQuestionViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/AddQuestionViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/BasicHealthInfoViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/BasicHealthInfoViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/DoctorMainViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/DoctorMainViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/EvaluationListViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/EvaluationListViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/ExpertMainViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/ExpertMainViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/FileDataDetailViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/FileDataDetailViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalIntroViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalIntroViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalJianjieViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalJianjieViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalMainViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalMainViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/LookModficalFileViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/LookModficalFileViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuesstionDetailLookFileViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuesstionDetailLookFileViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionMustKnowViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionMustKnowViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionPeopleMangerVC.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionPeopleMangerVC.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/AudioVideoRecordViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/AudioVideoRecordViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/PictureRecordViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/PictureRecordViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionCompleteViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionCompleteViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionJingxingViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionJingxingViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionRecordViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionRecordViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionWaitEvlaViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionWaitEvlaViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomDoctorRecordsVC.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomDoctorRecordsVC.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomSearchResultViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomSearchResultViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertSubViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertSubViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundHospitalViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundHospitalViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundJIBingViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundJIBingViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundRoomsViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundRoomsViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/MainSearchViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/MainSearchViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/SearchZhuangJiaViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/SearchZhuangJiaViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SearchMainViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SearchMainViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectFIleDateDetailViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectFIleDateDetailViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedDoctorTimeVC.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedDoctorTimeVC.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedQuestionViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedQuestionViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SmallHelpHandViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SmallHelpHandViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorDetailModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorDetailModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorRecommendModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorRecommendModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorReportModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorReportModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorTimeModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorTimeModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/EvaluatListModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/EvaluatListModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/FamilyMemberRelationModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/FamilyMemberRelationModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/FileDataModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/FileDataModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/FoundExpertModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/FoundExpertModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/HomeQusetionRecordsModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/HomeQusetionRecordsModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/HospitalInfoModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/HospitalInfoModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/LookFileDataModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/LookFileDataModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionBodyReportModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionBodyReportModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionDiseaseInfoModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionDiseaseInfoModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionItemModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionItemModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionOptionModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionOptionModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionPeopleModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionPeopleModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionRecordModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionRecordModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/RecordIMListDateModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/RecordIMListDateModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/SOSGroupIMModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/SOSGroupIMModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchRoomModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchRoomModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchSicksModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchSicksModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/SmallHelpIMDataModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/Model/SmallHelpIMDataModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/ADJumpViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/ADJumpViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HQSearchView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HQSearchView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthSugReportTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthSugReportTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/LookReportImageViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/LookReportImageViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameSubTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameSubTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameTopTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameTopTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/imageReportTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/imageReportTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/AppointmentInfoView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/AppointmentInfoView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllHospitalConditionView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllHospitalConditionView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllRoomsConditionView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllRoomsConditionView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllSicksConditionView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllSicksConditionView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/BasicHealthInfoView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/BasicHealthInfoView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailTitleView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailTitleView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailUserInfoView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailUserInfoView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/FileDataDeatilCenterView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/FileDataDeatilCenterView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoCollectView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoCollectView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoPostCollectionViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoPostCollectionViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/SelectedFileDateCenterView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/SelectedFileDateCenterView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorInfoTopView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorInfoTopView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorSelectTimeCollectionCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorSelectTimeCollectionCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorStatusView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorStatusView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorTimeSelectedCollectView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorTimeSelectedCollectView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/EvaluationListTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/EvaluationListTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollection.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollection.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollectionViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollectionViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundLeftTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundLeftTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRightTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRightTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRoomsTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRoomsTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyDoctorTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyDoctorTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionHeardView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionHeardView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyToolsView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyToolsView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalListTableCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalListTableCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTiitleTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTiitleTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTitleTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTitleTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilDoctorCollectionViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilDoctorCollectionViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilIntroduceTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilIntroduceTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalEvaluationTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalEvaluationTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalLocationTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalLocationTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainDoctorCollectView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainDoctorCollectView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainHeardView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainHeardView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchExpertTableCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchExpertTableCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchConetShowTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchConetShowTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchShowUpTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchShowUpTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchZhuangjiaTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchZhuangjiaTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/ZongheZhuangjiaTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/ZongheZhuangjiaTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/PopView/PopupView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/PopView/PopupView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionAddPeopleTableCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionAddPeopleTableCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/AllRoomRecordsCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/AllRoomRecordsCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/QustionHomeRecordsCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/QustionHomeRecordsCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTableCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTableCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecordTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecordTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecoredTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecoredTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionFirstTableCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionFirstTableCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTypeTableCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTypeTableCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/UserInfoHealthPopView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/UserInfoHealthPopView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/evaluationPopView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/evaluationPopView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/BasicHealthTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/BasicHealthTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeOneTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeOneTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeTwoTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeTwoTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/hospitalListTableView.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/hospitalListTableView.m create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/searchHospatilCellTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/Qusetion/View/searchHospatilCellTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Controller/SosCenterViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Controller/SosCenterViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Model/AEDNetWrokModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Model/AEDNetWrokModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneAEDModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneAEDModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneHomeModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneHomeModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Model/SOSCenterModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/Model/SOSCenterModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/View/SOSAddressView.h create mode 100644 XinjiangProject/XinjiangProject/Project/SOS/View/SOSAddressView.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/ChatDoctorInfoModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/ChatDoctorInfoModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/ChatList/ChatListViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/ChatList/ChatListViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/ChatViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/ChatViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Controller/ChatMapViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Controller/ChatMapViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Controller/CurrentLocationViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Controller/CurrentLocationViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Controller/SendHealthDataViewController.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Controller/SendHealthDataViewController.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctiorIDCardCellData.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctiorIDCardCellData.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctorIDCardMessageCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctorIDCardMessageCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCellData.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCellData.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemCellData.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemCellData.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemSoSCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemSoSCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/chatPictureCollectionViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/chatPictureCollectionViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCellData.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCellData.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCellData.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCellData.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCellData.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCellData.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCustomCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCustomCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoCellData.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoCellData.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoChatCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoChatCell.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/DoctorHomePageDetailVC.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/DoctorHomePageDetailVC.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Model/SendReportModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Model/SendReportModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Model/sendHealthModel.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/Model/sendHealthModel.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTable.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTable.m create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTableViewCell.h create mode 100644 XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTableViewCell.m create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/homePageTiwen.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/homePageTiwen@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/homePageTiwen@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/homePageXinlv.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/homePageXinlv@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/homePageXinlv@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXueyang.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXueyang.imageset/homePageXueyang.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXueyang.imageset/homePageXueyang@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXueyang.imageset/homePageXueyang@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/homePageYali.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/homePageYali@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/homePageYali@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/sleepIcon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/sleepIcon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/sleepIcon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/stepNumberIcon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/stepNumberIcon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/stepNumberIcon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardHistory_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardHistory_icon.imageset/HeardHistory_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardHistory_icon.imageset/HeardHistory_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardHistory_icon.imageset/HeardHistory_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardProgress_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardProgress_icon.imageset/HeardProgress_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardProgress_icon.imageset/HeardProgress_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardProgress_icon.imageset/HeardProgress_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Seedoctor_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Seedoctor_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Seedoctor_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/acccountSafety.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/acccountSafety@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/acccountSafety@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/alreadyEveal.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/alreadyEveal@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/alreadyEveal@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/heard_man.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/heard_man@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/heard_man@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/heard_woman.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/heard_woman@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/heard_woman@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/medicalReson_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/medicalReson_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/medicalReson_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/myLove_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/myLove_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/myLove_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myReport_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myReport_icon.imageset/myReport_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myReport_icon.imageset/myReport_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myReport_icon.imageset/myReport_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myinfo_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myinfo_icon.imageset/myinfo_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myinfo_icon.imageset/myinfo_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myinfo_icon.imageset/myinfo_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/relatives_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/relatives_icon.imageset/relatives_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/relatives_icon.imageset/relatives_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/relatives_icon.imageset/relatives_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/waitEveal_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/waitEveal_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/waitEveal_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Satisfaction_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Satisfaction_icon.imageset/Satisfaction_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Satisfaction_icon.imageset/Satisfaction_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Satisfaction_icon.imageset/Satisfaction_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/audioPlayIcon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/audioPlayIcon.imageset/audioPlayIcon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/cancalSuccess.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/cancalSuccess@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/cancalSuccess@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/delect.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/delect.imageset/delect.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/delect.imageset/delect@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/delect.imageset/delect@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/detail_collect.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/detail_collect.imageset/detail_collect.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/detail_collect.imageset/detail_collect@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/detail_collect.imageset/detail_collect@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/doctorHot.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/doctorHot@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/doctorHot@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/foundDoctor.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/foundDoctor@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/foundDoctor@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/hospatilAddress.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/hospatilAddress@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/hospatilAddress@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/line_selected.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/line_selected.imageset/line_selected.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/line_selected.imageset/line_selected@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/line_selected.imageset/line_selected@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/mustKnow_Nomal.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/mustKnow_Nomal@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/mustKnow_Nomal@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Selected.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Selected.imageset/mustKnow_Selected.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Selected.imageset/mustKnow_Selected@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Selected.imageset/mustKnow_Selected@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/myQuestion.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/myQuestion@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/myQuestion@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/pictureQuestion_Left.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/pictureQuestion_Left@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/pictureQuestion_Left@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionDetailBack.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionDetailBack.imageset/questionDetailBack.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionDetailBack.imageset/questionDetailBack@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionDetailBack.imageset/questionDetailBack@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionHeardBack.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionHeardBack.imageset/questionHeardBack.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionHeardBack.imageset/questionHeardBack@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionHeardBack.imageset/questionHeardBack@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionLeft_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionLeft_icon.imageset/questionLeft_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionLeft_icon.imageset/questionLeft_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionLeft_icon.imageset/questionLeft_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionTitleImg.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionTitleImg.imageset/questionTitleImg.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionTitleImg.imageset/questionTitleImg@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionTitleImg.imageset/questionTitleImg@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/readingNumber.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/readingNumber.imageset/readingNumber.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/readingNumber.imageset/readingNumber@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/readingNumber.imageset/readingNumber@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/repay_Icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/repay_Icon.imageset/repay_Icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/repay_Icon.imageset/repay_Icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/repay_Icon.imageset/repay_Icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/reportBackImg.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/reportBackImg.imageset/reportBackImg.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/reportBackImg.imageset/reportBackImg@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/reportBackImg.imageset/reportBackImg@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/report_navRight.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/report_navRight.imageset/report_navRight.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/rightSelectedImg.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/rightSelectedImg.imageset/rightSelectedImg.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/rightSelectedImg.imageset/rightSelectedImg@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/rightSelectedImg.imageset/rightSelectedImg@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/roomPlaceholder.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/roomPlaceholder.imageset/roomPlaceholder.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/roomPlaceholder.imageset/roomPlaceholder@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/roomPlaceholder.imageset/roomPlaceholder@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/samllAssistant.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/samllAssistant.imageset/samllAssistant.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/samllAssistant.imageset/samllAssistant@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/samllAssistant.imageset/samllAssistant@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/searchRightNav.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/searchRightNav.imageset/searchRightNav.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/selectedNomal.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/selectedNomal.imageset/selectedNomal.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/selectedNomal.imageset/selectedNomal@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/selectedNomal.imageset/selectedNomal@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/statusTop_nomal.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/statusTop_nomal.imageset/statusTop_nomal.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/statusTop_nomal.imageset/statusTop_nomal@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/statusTop_nomal.imageset/statusTop_nomal@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/statusTop_selected.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/statusTop_selected.imageset/statusTop_selected.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/statusTop_selected.imageset/statusTop_selected@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/statusTop_selected.imageset/statusTop_selected@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/videQuestion_Left.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/videQuestion_Left.imageset/videQuestion_Left.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/videQuestion_Left.imageset/videQuestion_Left@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/videQuestion_Left.imageset/videQuestion_Left@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/AEDIcon.imageset/AEDIcon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/AEDIcon.imageset/AEDIcon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/AEDIcon.imageset/AEDIcon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/AEDIcon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/SOSLinkagePeople.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/SOSLinkagePeople.imageset/SOSLinkagePeople.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/SOSLinkagePeople.imageset/SOSLinkagePeople@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/SOSLinkagePeople.imageset/SOSLinkagePeople@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/address_NavLoctaion.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/address_NavLoctaion.imageset/address_NavLoctaion.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/address_NavLoctaion.imageset/address_NavLoctaion@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/address_NavLoctaion.imageset/address_NavLoctaion@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/address_phone.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/address_phone.imageset/address_phone.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/address_phone.imageset/address_phone@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/address_phone.imageset/address_phone@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/callHospation.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/callHospation.imageset/callHospation.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/callHospation.imageset/callHospation@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/callHospation.imageset/callHospation@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/callSoSIcon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/callSoSIcon.imageset/callSoSIcon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/callSoSIcon.imageset/callSoSIcon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/callSoSIcon.imageset/callSoSIcon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/garyRight.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/garyRight.imageset/garyRight.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/garyRight.imageset/garyRight@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/garyRight.imageset/garyRight@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/hezuoHospital.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/hezuoHospital.imageset/hezuoHospital.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/hezuoHospital.imageset/hezuoHospital@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/hezuoHospital.imageset/hezuoHospital@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/medicalAnnitation.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/medicalAnnitation.imageset/medicalAnnitation.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/medicalAnnitation.imageset/medicalAnnitation@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/medicalAnnitation.imageset/medicalAnnitation@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/myLocationIcon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/myLocationIcon.imageset/myLocationIcon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/myLocationIcon.imageset/myLocationIcon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/myLocationIcon.imageset/myLocationIcon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/sosCard.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/sosCard.imageset/sosCard.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/sosCard.imageset/sosCard@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/sosCard.imageset/sosCard@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/sosPeople.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/sosPeople.imageset/sosPeople.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/sosPeople.imageset/sosPeople@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/sosPeople.imageset/sosPeople@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/youtianHosoital.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/youtianHosoital.imageset/youtianHosoital.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/youtianHosoital.imageset/youtianHosoital@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/SOS/youtianHosoital.imageset/youtianHosoital@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/TUIResource/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/TUIResource/endQuestionItem.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/TUIResource/endQuestionItem.imageset/endQuestionItem.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/TUIResource/endQuestionItem.imageset/endQuestionItem@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/TUIResource/endQuestionItem.imageset/endQuestionItem@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/noQuestionImg.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/noQuestionImg.imageset/noQuestionImg.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/noQuestionImg.imageset/noQuestionImg@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/noQuestionImg.imageset/noQuestionImg@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/FeminineSymbol.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/FeminineSymbol.imageset/Feminine Symbol.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/FeminineSymbol.imageset/Feminine Symbol@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/FeminineSymbol.imageset/Feminine Symbol@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/MasculineMark.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/MasculineMark.imageset/MasculineMark.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/MasculineMark.imageset/MasculineMark@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/MasculineMark.imageset/MasculineMark@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/add.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/add.imageset/add@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/addQuestionPeople.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/addQuestionPeople.imageset/addQuestionPeople.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/addQuestionPeople.imageset/addQuestionPeople@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/addQuestionPeople.imageset/addQuestionPeople@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/back.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/back.imageset/back.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/back.imageset/back@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/back.imageset/back@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardButton.imageset/c_chaKeyboardButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardButton.imageset/c_chaKeyboardButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardButtonSel.imageset/c_chaKeyboardButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardButtonSel.imageset/c_chaKeyboardButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardShiftButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardShiftButton.imageset/c_chaKeyboardShiftButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardShiftButton.imageset/c_chaKeyboardShiftButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardShiftButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardShiftButtonSel.imageset/c_chaKeyboardShiftButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chaKeyboardShiftButtonSel.imageset/c_chaKeyboardShiftButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardButton.imageset/c_charKeyboardButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardButton.imageset/c_charKeyboardButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardButtonSel.imageset/c_charKeyboardButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardShiftButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardShiftButton.imageset/c_charKeyboardShiftButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardShiftButton.imageset/c_charKeyboardShiftButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardShiftButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardShiftButtonSel.imageset/c_charKeyboardShiftButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_charKeyboardShiftButtonSel.imageset/c_charKeyboardShiftButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardDeleteButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardDeleteButton.imageset/c_character_keyboardDeleteButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardDeleteButton.imageset/c_character_keyboardDeleteButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardDeleteButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardDeleteButtonSel.imageset/c_character_keyboardDeleteButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardDeleteButtonSel.imageset/c_character_keyboardDeleteButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardSwitchButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardSwitchButton.imageset/c_character_keyboardSwitchButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardSwitchButton.imageset/c_character_keyboardSwitchButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardSwitchButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardSwitchButtonSel.imageset/c_character_keyboardSwitchButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_character_keyboardSwitchButtonSel.imageset/c_character_keyboardSwitchButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chraKeyboardButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_chraKeyboardButtonSel.imageset/c_chraKeyboardButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_keyboardBackground.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_keyboardBackground.imageset/c_keyboardBackground.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_keyboardBackground.imageset/c_keyboardBackground@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_numKeyboardButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_numKeyboardButton.imageset/c_numKeyboardButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_numKeyboardButton.imageset/c_numKeyboardButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_numKeyboardButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_numKeyboardButtonSel.imageset/c_numKeyboardButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_numKeyboardButtonSel.imageset/c_numKeyboardButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardDeleteButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardDeleteButton.imageset/c_number_keyboardDeleteButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardDeleteButton.imageset/c_number_keyboardDeleteButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardDeleteButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardDeleteButtonSel.imageset/c_number_keyboardDeleteButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardDeleteButtonSel.imageset/c_number_keyboardDeleteButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardSwitchButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardSwitchButton.imageset/c_number_keyboardSwitchButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardSwitchButton.imageset/c_number_keyboardSwitchButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardSwitchButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardSwitchButtonSel.imageset/c_number_keyboardSwitchButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_number_keyboardSwitchButtonSel.imageset/c_number_keyboardSwitchButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbolKeyboardButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbolKeyboardButton.imageset/c_symbolKeyboardButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbolKeyboardButton.imageset/c_symbolKeyboardButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbolKeyboardButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbolKeyboardButtonSel.imageset/c_symbolKeyboardButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbolKeyboardButtonSel.imageset/c_symbolKeyboardButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardDeleteButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardDeleteButton.imageset/c_symbol_keyboardDeleteButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardDeleteButton.imageset/c_symbol_keyboardDeleteButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardDeleteButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardDeleteButtonSel.imageset/c_symbol_keyboardDeleteButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardDeleteButtonSel.imageset/c_symbol_keyboardDeleteButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardSwitchButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardSwitchButton.imageset/c_symbol_keyboardSwitchButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardSwitchButton.imageset/c_symbol_keyboardSwitchButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardSwitchButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardSwitchButtonSel.imageset/c_symbol_keyboardSwitchButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/c_symbol_keyboardSwitchButtonSel.imageset/c_symbol_keyboardSwitchButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/choose_Selected.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/choose_Selected.imageset/choose_Selected.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/choose_Selected.imageset/choose_Selected@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/choose_Selected.imageset/choose_Selected@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/choose_nomal.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/choose_nomal.imageset/choose_nomal.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/choose_nomal.imageset/choose_nomal@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/choose_nomal.imageset/choose_nomal@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/collectLove.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/collectLove.imageset/collectLove.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/collectLove.imageset/collectLove@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/collectLove.imageset/collectLove@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/downArrow_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/downArrow_icon.imageset/downArrow_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/downArrow_icon.imageset/downArrow_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/downArrow_icon.imageset/downArrow_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/fileDataTopImage.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/fileDataTopImage.imageset/fileDataTopImage.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/fileDataTopImage.imageset/fileDataTopImage@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/fileDataTopImage.imageset/fileDataTopImage@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/fw_close.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/fw_close.imageset/fw_close.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/garyBlueAccow.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/garyBlueAccow.imageset/garyBlueAccow.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/garyBlueAccow.imageset/garyBlueAccow@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/garyBlueAccow.imageset/garyBlueAccow@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenAccow.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenAccow.imageset/greenAccow.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenAccow.imageset/greenAccow@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenAccow.imageset/greenAccow@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenAccow_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenAccow_icon.imageset/greenAccow_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenAccow_icon.imageset/greenAccow_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenAccow_icon.imageset/greenAccow_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenSmallTime.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenSmallTime.imageset/greenSmallTime.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenSmallTime.imageset/greenSmallTime@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/greenSmallTime.imageset/greenSmallTime@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/home_star.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/home_star.imageset/home_star.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/home_star.imageset/home_star@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/home_star.imageset/home_star@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/homestar_gray.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/homestar_gray.imageset/homestar_gray.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/homestar_gray.imageset/homestar_gray@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/homestar_gray.imageset/homestar_gray@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/ic_more_archives.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/ic_more_archives.imageset/ic_more_archives.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/ic_more_info.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/ic_more_info.imageset/ic_more_info.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/ic_more_location.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/ic_more_location.imageset/ic_more_location.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/ic_more_medical_examination_report.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/ic_more_medical_examination_report.imageset/ic_more_medical_examination_report.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_samllHeard.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_samllHeard.imageset/info_samllHeard.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_samllHeard.imageset/info_samllHeard@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_samllHeard.imageset/info_samllHeard@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_smallCard.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_smallCard.imageset/info_smallCard.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_smallCard.imageset/info_smallCard@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_smallCard.imageset/info_smallCard@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_smallDanwei.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_smallDanwei.imageset/info_smallDanwei.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_smallDanwei.imageset/info_smallDanwei@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/info_smallDanwei.imageset/info_smallDanwei@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/leftAccow_Selected.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/leftAccow_Selected.imageset/leftAccow _Selected.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/leftAccow_Selected.imageset/leftAccow _Selected@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/leftAccow_Selected.imageset/leftAccow _Selected@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_character_keyboardLoginButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_character_keyboardLoginButton.imageset/login_c_character_keyboardLoginButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_character_keyboardLoginButton.imageset/login_c_character_keyboardLoginButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_number_keyboardLoginButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_number_keyboardLoginButton.imageset/login_c_number_keyboardLoginButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_number_keyboardLoginButton.png.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_number_keyboardLoginButton.png.imageset/login_c_number_keyboardLoginButton.png@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardLoginButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardLoginButton.imageset/login_c_symbol_keyboardLoginButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardLoginButton.png.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardLoginButton.png.imageset/login_c_symbol_keyboardLoginButton.png@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardLoginButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardLoginButtonSel.imageset/login_c_symbol_keyboardLoginButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardLoginButtonSel.imageset/login_c_symbol_keyboardLoginButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardSwitchButton.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardSwitchButton.imageset/login_c_symbol_keyboardSwitchButton.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardSwitchButton.imageset/login_c_symbol_keyboardSwitchButton@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardSwitchButtonSel.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardSwitchButtonSel.imageset/login_c_symbol_keyboardSwitchButtonSel.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/login_c_symbol_keyboardSwitchButtonSel.imageset/login_c_symbol_keyboardSwitchButtonSel@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/navBackImg.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/navBackImg.imageset/navBackImg.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/noNetwork.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/noNetwork.imageset/noNetwork@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/placeholdIMG.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/placeholdIMG.imageset/placeholdIMG.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/popChoose_normal.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/popChoose_normal.imageset/popChoose_normal.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/popChoose_normal.imageset/popChoose_normal@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/popChoose_normal.imageset/popChoose_normal@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/popChoose_selected.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/popChoose_selected.imageset/popChoose_selected.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/popChoose_selected.imageset/popChoose_selected@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/popChoose_selected.imageset/popChoose_selected@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/processNextIcon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/processNextIcon.imageset/processNextIcon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/processNextIcon.imageset/processNextIcon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/processNextIcon.imageset/processNextIcon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/rightAccow_Selected.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/rightAccow_Selected.imageset/rightAccow_Selected.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/rightAccow_Selected.imageset/rightAccow_Selected@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/rightAccow_Selected.imageset/rightAccow_Selected@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/setting_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/setting_icon.imageset/setting_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/setting_icon.imageset/setting_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/setting_icon.imageset/setting_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/upAccow_gary.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/upAccow_gary.imageset/upAccow_gary.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/upAccow_gary.imageset/upAccow_gary@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/upAccow_gary.imageset/upAccow_gary@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/whiteBack_icon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/whiteBack_icon.imageset/whiteBack_icon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/whiteBack_icon.imageset/whiteBack_icon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/other/whiteBack_icon.imageset/whiteBack_icon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/stepNumerIcon.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/stepNumerIcon.imageset/stepNumerIcon.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/stepNumerIcon.imageset/stepNumerIcon@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/stepNumerIcon.imageset/stepNumerIcon@3x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Base.lproj/LaunchScreen.storyboard create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/HQConst.h create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/HQConst.m create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Info.plist create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/PrefixHeader.pch create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/main.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/AddressPickerView/BRAddressModel.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/AddressPickerView/BRAddressModel.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/AddressPickerView/BRAddressPickerView.bundle/BRCity.json create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/AddressPickerView/BRAddressPickerView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/AddressPickerView/BRAddressPickerView.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/BRPickerView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/BRBaseView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/BRBaseView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/BRPickerStyle.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/BRPickerStyle.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/BRPickerView.bundle/en.lproj/Localizable.strings create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/BRPickerView.bundle/zh-Hans.lproj/Localizable.strings create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/BRPickerView.bundle/zh-Hant.lproj/Localizable.strings create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/BRPickerViewMacro.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/NSBundle+BRPickerView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/Base/NSBundle+BRPickerView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/DatePickerView/BRDatePickerView+BR.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/DatePickerView/BRDatePickerView+BR.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/DatePickerView/BRDatePickerView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/DatePickerView/BRDatePickerView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/DatePickerView/NSDate+BRPickerView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/DatePickerView/NSDate+BRPickerView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/StringPickerView/BRResultModel.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/StringPickerView/BRResultModel.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/StringPickerView/BRStringPickerView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/BRPickerView/StringPickerView/BRStringPickerView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertConfig.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertConfig.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertGlobalConfig.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertGlobalConfig.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertItem.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertItem.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertPart.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertPart.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertTypes.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertTypes.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyAlertView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyConfig.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyConfig.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyGlobalConfig.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyGlobalConfig.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyPart.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyPart.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyTypes.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyTypes.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyEmptyView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyLoadingConfig.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyLoadingConfig.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyLoadingGlobalConfig.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyLoadingGlobalConfig.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyLoadingTypes.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyLoadingTypes.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyLoadingView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyLoadingView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyShowLabel.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyShowLabel.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyShowUtils.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyShowUtils.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyShowView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextBgView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextBgView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextConfig.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextConfig.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextGlobalConfig.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextGlobalConfig.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextTypes.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextTypes.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/EasyTextView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/UIView+EasyShowExt.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/EasyShowView/UIView+EasyShowExt.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/GKCycleScrollView/GKCycleScrollView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/GKCycleScrollView/GKCycleScrollView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/GKCycleScrollView/GKCycleScrollViewCell.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/GKCycleScrollView/GKCycleScrollViewCell.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/GKCycleScrollView/GKPageControl.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/GKCycleScrollView/GKPageControl.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVKeyboard.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVKeyboard.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVKeyboardTool.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVKeyboardTool.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVLetterKeyboard.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVLetterKeyboard.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVNumberKeyboard.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVNumberKeyboard.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVSymbolKeyboard.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/LVSymbolKeyboard.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/UIView+LVExtension.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/LVKeyboard/UIView+LVExtension.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LXScrollContentViewLib/LXScrollContentView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LXScrollContentViewLib/LXScrollContentView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LXScrollContentViewLib/LXSegmentTitleView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LXScrollContentViewLib/LXSegmentTitleView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LYEmptyView/LYEmptyBaseView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LYEmptyView/LYEmptyBaseView.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/LYEmptyView/LYEmptyView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/LYEmptyView/LYEmptyView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LYEmptyView/LYEmptyViewHeader.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LYEmptyView/UIView+Empty.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LYEmptyView/UIView+Empty.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LYEmptyView/UIView+LYExtension.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/LYEmptyView/UIView+LYExtension.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/MQTextField.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/MQTextField.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/PSCheckVersion/PSAppInfo.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/PSCheckVersion/PSAppInfo.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/PSCheckVersion/PSCheckVersion.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/PSCheckVersion/PSCheckVersion.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/PSCheckVersion/PSCheckVersionRequest.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/PSCheckVersion/PSCheckVersionRequest.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/PSCheckVersion/PSCheckVersionView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/PSCheckVersion/PSCheckVersionView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/RSAObjC.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/RSAObjC.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/AppIcon-076.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/AppIcon-120.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/AppIcon-152.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/AppIcon-167.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/AppIcon-180.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Button-H.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Button-H@2x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Button-H@3x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Button-N.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Button-N@2x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Button-N@3x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Email.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Email@2x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Email@3x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Export.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Export@2x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Export@3x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Mark-N.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Mark-N@2x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Mark-N@3x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Mark-Y.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Mark-Y@2x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Mark-Y@3x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Print.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Print@2x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Print@3x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Thumbs.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Thumbs@2x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Graphics/Reader-Thumbs@3x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/CGPDFDocument.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/CGPDFDocument.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderConstants.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderConstants.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderContentPage.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderContentPage.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderContentTile.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderContentTile.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderContentView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderContentView.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderDocument.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderDocument.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderDocumentOutline.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderDocumentOutline.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderMainPagebar.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderMainPagebar.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderMainToolbar.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderMainToolbar.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbCache.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbCache.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbFetch.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbFetch.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbQueue.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbQueue.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbRender.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbRender.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbRequest.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbRequest.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbView.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbsView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderThumbsView.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderViewController.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ReaderViewController.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ThumbsMainToolbar.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ThumbsMainToolbar.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ThumbsViewController.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/ThumbsViewController.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/UIXToolbarView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/Reader/Sources/UIXToolbarView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/RingView/QHCircleProgressView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/RingView/QHCircleProgressView.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/SDPhotoBrowser/SDBrowserImageView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/SDPhotoBrowser/SDBrowserImageView.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/SDPhotoBrowser/SDPhotoBrowser.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/SDPhotoBrowser/SDPhotoBrowser.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/SDPhotoBrowser/SDPhotoBrowserConfig.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/SDPhotoBrowser/SDWaitingView.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/SDPhotoBrowser/SDWaitingView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/TYMapNavSheet/TYMapNavSheet.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/TYMapNavSheet/TYMapNavSheet.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/UIPlaceHolderTextView/UIPlaceHolderTextView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/UIPlaceHolderTextView/UIPlaceHolderTextView.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/UIViewAdditions.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/UIViewAdditions.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/UIImage+XLExtension.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/UIImage+XLExtension.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/UIView+XLExtension.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/UIView+XLExtension.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheet.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheet.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheetCell.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheetCell.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheetConfig.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheetConfig.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheetItem.h create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheetItem.m create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheetResources/FSActionSheet_cancel@2x.png create mode 100755 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/Vender/FSActionSheet/FSActionSheetResources/FSActionSheet_cancel@3x.png create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/XLPhotoBrowser.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/XLPhotoBrowser.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/XLPhotoBrowserConfig.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/XLPhotoBrowserTypeDefine.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/XLProgressView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/XLProgressView.m create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/XLZoomingScrollView.h create mode 100644 XinjiangProject/XinjiangProject/ThirdParty/XLPhotoBrowser+CoderXL/XLZoomingScrollView.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/CommonUtility.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/CommonUtility.m create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/ErrorInfoUtility.h create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/ErrorInfoUtility.m create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/PoiSearchNearByController.h create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/PoiSearchNearByController.m create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/PoiSearchPerIdController.h create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/PoiSearchPerIdController.m create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/PoiSearchPerKeywordController.h create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/PoiSearchPerKeywordController.m create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/PoiSearchWithInPolygonController.h create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/PoiSearchWithInPolygonController.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/TipViewController.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/TipViewController.m create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/model/AMapTipAnnotation.h create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/model/AMapTipAnnotation.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/model/BusStopAnnotation.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/model/BusStopAnnotation.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/model/POIAnnotation.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/POI/model/POIAnnotation.m create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/UIView+Toast.h create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/UIView+Toast.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/AnimatedAnnotationViewController.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/AnimatedAnnotationViewController.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/AnnotationViewController.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/AnnotationViewController.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/model/AnimatedAnnotation.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/model/AnimatedAnnotation.m create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/model/MATrackPointAnnotation.h create mode 100644 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/model/MATrackPointAnnotation.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/view/AnimatedAnnotationView.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/view/AnimatedAnnotationView.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/view/CustomAnnotationView.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/view/CustomAnnotationView.m create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/view/CustomCalloutView.h create mode 100755 XinjiangProject/XinjiangProject/Utils/3DMAP/annotation/view/CustomCalloutView.m create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/DashesLineView.h create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/DashesLineView.m create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphBar.h create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphBar.m create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphConstants.h create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphDot.h create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphDot.m create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphLine.h create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphLine.m create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphPopView.h create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphPopView.m create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphView.h create mode 100644 XinjiangProject/XinjiangProject/Utils/CustomGraph/GraphView.m create mode 100644 XinjiangProject/XinjiangProject/Utils/HQCommonUtils.h create mode 100644 XinjiangProject/XinjiangProject/Utils/HQCommonUtils.m create mode 100644 XinjiangProject/XinjiangProject/Utils/LineTextField.h create mode 100644 XinjiangProject/XinjiangProject/Utils/LineTextField.m create mode 100644 XinjiangProject/XinjiangProject/Utils/PopAnimation/HQPopTool.h create mode 100644 XinjiangProject/XinjiangProject/Utils/PopAnimation/HQPopTool.m create mode 100755 XinjiangProject/XinjiangProject/Utils/Star/FSXBStarRateView.h create mode 100755 XinjiangProject/XinjiangProject/Utils/Star/FSXBStarRateView.m create mode 100644 XinjiangProject/XinjiangProject/Utils/TagsView/ZHTagListView.h create mode 100644 XinjiangProject/XinjiangProject/Utils/TagsView/ZHTagListView.m create mode 100644 XinjiangProject/XinjiangProject/Utils/ViewEffects/UIView+Effects.h create mode 100644 XinjiangProject/XinjiangProject/Utils/ViewEffects/UIView+Effects.m create mode 100644 XinjiangProject/XinjiangProject/Utils/XLCircle.h create mode 100644 XinjiangProject/XinjiangProject/Utils/XLCircle.m create mode 100644 XinjiangProject/XinjiangProject/Utils/XLCircleProgress.h create mode 100644 XinjiangProject/XinjiangProject/Utils/XLCircleProgress.m create mode 100755 XinjiangProject/XinjiangProject/Utils/XMButton/XMButton.h create mode 100755 XinjiangProject/XinjiangProject/Utils/XMButton/XMButton.m create mode 100755 XinjiangProject/XinjiangProject/Utils/XMButton/XMCommonUtils.h create mode 100755 XinjiangProject/XinjiangProject/Utils/XMButton/XMCommonUtils.m create mode 100755 XinjiangProject/XinjiangProject/Utils/XYTransition/XYTransition.h create mode 100755 XinjiangProject/XinjiangProject/Utils/XYTransition/XYTransition.m create mode 100755 XinjiangProject/XinjiangProject/Utils/XYTransition/XYTransitionProtocol.h create mode 100644 XinjiangProject/XinjiangProjectTests/XinjiangProjectTests.m create mode 100644 XinjiangProject/XinjiangProjectUITests/XinjiangProjectUITests.m create mode 100644 XinjiangProject/XinjiangProjectUITests/XinjiangProjectUITestsLaunchTests.m diff --git a/XinjiangProject/PodFile b/XinjiangProject/PodFile new file mode 100644 index 0000000..813e750 --- /dev/null +++ b/XinjiangProject/PodFile @@ -0,0 +1,50 @@ + +platform :ios, '12.0' +# 忽略引入库的所有警告 +inhibit_all_warnings! + +# 防止 TUIKit 组件里的 *.xcassets 与您项目里面冲突。 +install! 'cocoapods', :disable_input_output_paths => true +# 通过指定use_frameworks!要求生成的是framework而不是静态库。 +target 'XinjiangProject' do + pod 'MJRefresh' + pod 'MBProgressHUD' + pod 'Masonry' + pod 'YYKit' + pod 'IQKeyboardManager' #iOS8 and later + pod 'SDCycleScrollView' + pod 'TZImagePickerController' + # 列表控制 + # 集成聊天功能 + pod 'TUIChat/UI_Classic','~> 7.3.4358' + # 集成会话功能 + pod 'TUIConversation/UI_Classic','~> 7.3.4358' + # 集成关系链功能 + pod 'TUIContact/UI_Classic','~> 7.3.4358' + # 集成群组功能 + pod 'TUIGroup/UI_Classic','~> 7.3.4358' + # 集成搜索功能(需要购买旗舰版套餐) + pod 'TUISearch/UI_Classic','~> 7.3.4358' + # 集成离线推送 + pod 'TUIOfflinePush','~> 7.3.4358' + # 集成音视频通话功能 + pod 'TUICallKit','~> 1.7.0.460' + pod 'TUICallKit/TRTC','~> 1.7.0.460' + pod 'TXIMSDK_Plus_iOS','~> 7.3.4358' + pod 'TXLiteAVSDK_TRTC/TRTC','~> 11.2.14217' + pod 'TUICore','~> 7.3.4358' + + # 高德地图相关 + pod 'SJVideoPlayer' + pod 'SJUIKit' + pod 'AFNetworking' + pod 'AMap3DMap','~>10.0.600' + pod 'AMapSearch','~>9.5.0' + pod 'AMapLocation','~>2.9.0' + pod 'SDWebImageWebPCoder' + pod 'SDWebImage' + pod 'FMDB' + pod 'FMDB/SQLCipher' +end + + diff --git a/XinjiangProject/Podfile.lock b/XinjiangProject/Podfile.lock new file mode 100644 index 0000000..d33993d --- /dev/null +++ b/XinjiangProject/Podfile.lock @@ -0,0 +1,516 @@ +PODS: + - AFNetworking (4.0.1): + - AFNetworking/NSURLSession (= 4.0.1) + - AFNetworking/Reachability (= 4.0.1) + - AFNetworking/Security (= 4.0.1) + - AFNetworking/Serialization (= 4.0.1) + - AFNetworking/UIKit (= 4.0.1) + - AFNetworking/NSURLSession (4.0.1): + - AFNetworking/Reachability + - AFNetworking/Security + - AFNetworking/Serialization + - AFNetworking/Reachability (4.0.1) + - AFNetworking/Security (4.0.1) + - AFNetworking/Serialization (4.0.1) + - AFNetworking/UIKit (4.0.1): + - AFNetworking/NSURLSession + - AMap3DMap (10.0.1000): + - AMapFoundation (>= 1.8.0) + - AMapFoundation (1.8.2) + - AMapLocation (2.9.0): + - AMapFoundation (>= 1.7.0) + - AMapSearch (9.5.0): + - AMapFoundation (>= 1.8.0) + - FMDB (2.7.12): + - FMDB/standard (= 2.7.12) + - FMDB/Core (2.7.12) + - FMDB/SQLCipher (2.7.12): + - FMDB/Core + - SQLCipher (~> 4.6) + - FMDB/standard (2.7.12): + - FMDB/Core + - IQKeyboardManager (6.5.19) + - libwebp (1.5.0): + - libwebp/demux (= 1.5.0) + - libwebp/mux (= 1.5.0) + - libwebp/sharpyuv (= 1.5.0) + - libwebp/webp (= 1.5.0) + - libwebp/demux (1.5.0): + - libwebp/webp + - libwebp/mux (1.5.0): + - libwebp/demux + - libwebp/sharpyuv (1.5.0) + - libwebp/webp (1.5.0): + - libwebp/sharpyuv + - Masonry (1.1.0) + - MBProgressHUD (1.2.0) + - MJRefresh (3.7.9) + - ReactiveObjC (3.1.1) + - SDCycleScrollView (1.82): + - SDWebImage (>= 5.0.0) + - SDWebImage (5.21.0): + - SDWebImage/Core (= 5.21.0) + - SDWebImage/Core (5.21.0) + - SDWebImageWebPCoder (0.14.6): + - libwebp (~> 1.0) + - SDWebImage/Core (~> 5.17) + - SJBaseVideoPlayer (3.7.7.1): + - Masonry + - SJBaseVideoPlayer/AVPlayer (= 3.7.7.1) + - SJBaseVideoPlayer/Common (= 3.7.7.1) + - SJUIKit/AttributesFactory (>= 0.0.0.38) + - SJUIKit/ObserverHelper + - SJUIKit/Queues + - SJUIKit/SQLite3 + - SJBaseVideoPlayer/AVPlayer (3.7.7.1): + - Masonry + - SJBaseVideoPlayer/Common + - SJUIKit/AttributesFactory (>= 0.0.0.38) + - SJUIKit/ObserverHelper + - SJUIKit/Queues + - SJUIKit/SQLite3 + - SJBaseVideoPlayer/Common (3.7.7.1): + - Masonry + - SJBaseVideoPlayer/ResourceLoader + - SJUIKit/AttributesFactory (>= 0.0.0.38) + - SJUIKit/ObserverHelper + - SJUIKit/Queues + - SJUIKit/SQLite3 + - SJBaseVideoPlayer/ResourceLoader (3.7.7.1): + - Masonry + - SJUIKit/AttributesFactory (>= 0.0.0.38) + - SJUIKit/ObserverHelper + - SJUIKit/Queues + - SJUIKit/SQLite3 + - SJUIKit (0.0.0.59): + - SJUIKit/AsyncLoad (= 0.0.0.59) + - SJUIKit/AttributesFactory (= 0.0.0.59) + - SJUIKit/Base (= 0.0.0.59) + - SJUIKit/CornerMask (= 0.0.0.59) + - SJUIKit/Date (= 0.0.0.59) + - SJUIKit/ObserverHelper (= 0.0.0.59) + - SJUIKit/Other (= 0.0.0.59) + - SJUIKit/PageViewController (= 0.0.0.59) + - SJUIKit/Photo (= 0.0.0.59) + - SJUIKit/PlaybackListController (= 0.0.0.59) + - SJUIKit/Queues (= 0.0.0.59) + - SJUIKit/Refresh (= 0.0.0.59) + - SJUIKit/SQLite3 (= 0.0.0.59) + - SJUIKit/Thread (= 0.0.0.59) + - SJUIKit/UIMaker (= 0.0.0.59) + - SJUIKit/AsyncLoad (0.0.0.59): + - SJUIKit/CornerMask + - SJUIKit/AttributesFactory (0.0.0.59): + - SJUIKit/AttributesFactory/Deprecated (= 0.0.0.59) + - SJUIKit/AttributesFactory/UIKitText (= 0.0.0.59) + - SJUIKit/AttributesFactory/Deprecated (0.0.0.59) + - SJUIKit/AttributesFactory/UIKitText (0.0.0.59) + - SJUIKit/Base (0.0.0.59): + - SJUIKit/Base/Core (= 0.0.0.59) + - SJUIKit/ObserverHelper + - SJUIKit/Base/Core (0.0.0.59): + - SJUIKit/ObserverHelper + - SJUIKit/CornerMask (0.0.0.59): + - SJUIKit/ObserverHelper + - SJUIKit/Date (0.0.0.59) + - SJUIKit/ObserverHelper (0.0.0.59) + - SJUIKit/Other (0.0.0.59): + - SJUIKit/Date + - SJUIKit/PageViewController (0.0.0.59): + - SJUIKit/PageViewController/Core (= 0.0.0.59) + - SJUIKit/PageViewController/Core (0.0.0.59) + - SJUIKit/Photo (0.0.0.59) + - SJUIKit/PlaybackListController (0.0.0.59) + - SJUIKit/Queues (0.0.0.59) + - SJUIKit/Refresh (0.0.0.59): + - MJRefresh + - SJUIKit/SQLite3 (0.0.0.59): + - SJUIKit/SQLite3/Core (= 0.0.0.59) + - SJUIKit/SQLite3/Protocol (= 0.0.0.59) + - YYModel + - SJUIKit/SQLite3/Core (0.0.0.59): + - SJUIKit/SQLite3/Protocol + - YYModel + - SJUIKit/SQLite3/Protocol (0.0.0.59): + - YYModel + - SJUIKit/Thread (0.0.0.59) + - SJUIKit/UIMaker (0.0.0.59): + - SJUIKit/UIMaker/Core (= 0.0.0.59) + - SJUIKit/UIMaker/Core (0.0.0.59) + - SJVideoPlayer (3.4.3): + - SJBaseVideoPlayer (>= 3.7.5) + - SJVideoPlayer/Common (= 3.4.3) + - SJVideoPlayer/ControlLayers (= 3.4.3) + - SJVideoPlayer/ResourceLoader (= 3.4.3) + - SJVideoPlayer/Common (3.4.3): + - Masonry + - SJBaseVideoPlayer (>= 3.7.5) + - SJUIKit/AttributesFactory + - SJVideoPlayer/ResourceLoader + - SJVideoPlayer/ControlLayers (3.4.3): + - SJBaseVideoPlayer (>= 3.7.5) + - SJVideoPlayer/Common + - SJVideoPlayer/ResourceLoader (3.4.3): + - SJBaseVideoPlayer (>= 3.7.5) + - SQLCipher (4.8.0): + - SQLCipher/standard (= 4.8.0) + - SQLCipher/common (4.8.0) + - SQLCipher/standard (4.8.0): + - SQLCipher/common + - TIMCommon (7.3.4358): + - TIMCommon/BaseCell (= 7.3.4358) + - TIMCommon/CommonModel (= 7.3.4358) + - TIMCommon/UI_Classic (= 7.3.4358) + - TIMCommon/UI_Minimalist (= 7.3.4358) + - TIMCommon/BaseCell (7.3.4358): + - TIMCommon/BaseCell/CellData (= 7.3.4358) + - TIMCommon/BaseCell/CellUI (= 7.3.4358) + - TIMCommon/BaseCell/CellData (7.3.4358): + - TIMCommon/CommonModel + - TIMCommon/BaseCell/CellUI (7.3.4358): + - TIMCommon/BaseCell/CellData + - TIMCommon/CommonModel (7.3.4358): + - ReactiveObjC + - SDWebImage + - TUICore (= 7.3.4358) + - TXIMSDK_Plus_iOS (= 7.3.4358) + - TIMCommon/UI_Classic (7.3.4358): + - TIMCommon/UI_Classic/Cell (= 7.3.4358) + - TIMCommon/UI_Classic/Cell (7.3.4358): + - TIMCommon/UI_Classic/Cell/CellData (= 7.3.4358) + - TIMCommon/UI_Classic/Cell/CellUI (= 7.3.4358) + - TIMCommon/UI_Classic/Cell/CellData (7.3.4358): + - TIMCommon/BaseCell + - TIMCommon/UI_Classic/Cell/CellUI (7.3.4358): + - TIMCommon/UI_Classic/Cell/CellData + - TIMCommon/UI_Minimalist (7.3.4358): + - TIMCommon/UI_Minimalist/Cell (= 7.3.4358) + - TIMCommon/UI_Minimalist/Cell (7.3.4358): + - TIMCommon/UI_Minimalist/Cell/CellData (= 7.3.4358) + - TIMCommon/UI_Minimalist/Cell/CellUI (= 7.3.4358) + - TIMCommon/UI_Minimalist/Cell/CellData (7.3.4358): + - TIMCommon/BaseCell + - TIMCommon/UI_Minimalist/Cell/CellUI (7.3.4358): + - TIMCommon/UI_Minimalist/Cell/CellData + - TUICallEngine/TRTC (1.7.0.465): + - TXIMSDK_Plus_iOS (~> 7.3.4358) + - TXLiteAVSDK_TRTC (>= 11.0.14028) + - TUICallKit (1.7.0.460): + - Masonry + - TUICallKit/TRTC (= 1.7.0.460) + - TUICore (~> 7.3.4358) + - TUICallKit/TRTC (1.7.0.460): + - Masonry + - TUICallEngine/TRTC (~> 1.7.0.460) + - TUICore (~> 7.3.4358) + - TXLiteAVSDK_TRTC + - TUIChat/BaseCell (7.3.4358): + - TUIChat/BaseCell/CellData (= 7.3.4358) + - TUIChat/BaseCell/CellUI (= 7.3.4358) + - TUIChat/BaseCell/CellData (7.3.4358): + - TUIChat/CommonModel + - TUIChat/BaseCell/CellUI (7.3.4358): + - TUIChat/BaseCell/CellData + - TUIChat/BaseDataProvider (7.3.4358): + - TUIChat/BaseCell + - TUIChat/CommonModel (7.3.4358): + - ReactiveObjC + - SDWebImage + - TIMCommon (= 7.3.4358) + - TUIChat/VoiceConvert + - TUICore (= 7.3.4358) + - TXIMSDK_Plus_iOS (= 7.3.4358) + - TUIChat/CommonUI (7.3.4358): + - TUIChat/CommonUI/Camera (= 7.3.4358) + - TUIChat/CommonUI/Pendency (= 7.3.4358) + - TUIChat/CommonUI/Pop (= 7.3.4358) + - TUIChat/CommonUI/Camera (7.3.4358): + - TUIChat/BaseDataProvider + - TUIChat/CommonUI/Pendency (7.3.4358): + - TUIChat/BaseDataProvider + - TUIChat/CommonUI/Pop (7.3.4358): + - TUIChat/BaseDataProvider + - TUIChat/UI_Classic (7.3.4358): + - TUIChat/UI_Classic/Cell (= 7.3.4358) + - TUIChat/UI_Classic/Chat (= 7.3.4358) + - TUIChat/UI_Classic/DataProvider (= 7.3.4358) + - TUIChat/UI_Classic/Header (= 7.3.4358) + - TUIChat/UI_Classic/Input (= 7.3.4358) + - TUIChat/UI_Classic/Service (= 7.3.4358) + - TUIChat/UI_Classic/Cell (7.3.4358): + - TUIChat/UI_Classic/Cell/CellData (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellUI (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellData (7.3.4358): + - TUIChat/UI_Classic/Cell/CellData/Base (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellData/Chat (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellData/Custom (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellData/Reply (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellData/Base (7.3.4358): + - TUIChat/CommonUI + - TUIChat/UI_Classic/Cell/CellData/Chat (7.3.4358): + - TUIChat/UI_Classic/Cell/CellData/Base + - TUIChat/UI_Classic/Cell/CellData/Custom (7.3.4358): + - TUIChat/UI_Classic/Cell/CellData/Chat + - TUIChat/UI_Classic/Cell/CellData/Reply (7.3.4358): + - TUIChat/UI_Classic/Cell/CellData/Custom + - TUIChat/UI_Classic/Cell/CellUI (7.3.4358): + - TUIChat/UI_Classic/Cell/CellUI/Base (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellUI/Chat (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellUI/Custom (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellUI/Reply (= 7.3.4358) + - TUIChat/UI_Classic/Cell/CellUI/Base (7.3.4358): + - TUIChat/UI_Classic/Cell/CellData + - TUIChat/UI_Classic/Cell/CellUI/Chat (7.3.4358): + - TUIChat/UI_Classic/Cell/CellUI/Base + - TUIChat/UI_Classic/Cell/CellUI/Custom (7.3.4358): + - TUIChat/UI_Classic/Cell/CellUI/Chat + - TUIChat/UI_Classic/Cell/CellUI/Reply (7.3.4358): + - TUIChat/UI_Classic/Cell/CellUI/Custom + - TUIChat/UI_Classic/Chat (7.3.4358): + - TUIChat/UI_Classic/Input + - TUIChat/UI_Classic/DataProvider (7.3.4358): + - TUIChat/UI_Classic/Cell + - TUIChat/UI_Classic/Header (7.3.4358): + - TUIChat/UI_Classic/Service + - TUIChat/UI_Classic/Input (7.3.4358): + - TUIChat/UI_Classic/DataProvider + - TUIChat/UI_Classic/Service (7.3.4358): + - TUIChat/UI_Classic/Chat + - TUIChat/VoiceConvert (7.3.4358) + - TUIContact/BaseCell (7.3.4358): + - TUIContact/BaseCell/CellData (= 7.3.4358) + - TUIContact/BaseCell/CellUI (= 7.3.4358) + - TUIContact/BaseCell/CellData (7.3.4358): + - ReactiveObjC + - TIMCommon (= 7.3.4358) + - TUICore (= 7.3.4358) + - TXIMSDK_Plus_iOS (= 7.3.4358) + - TUIContact/BaseCell/CellUI (7.3.4358): + - TUIContact/BaseCell/CellData + - TUIContact/BaseDataProvider (7.3.4358): + - TUIContact/BaseCell + - TUIContact/CommonUI (7.3.4358): + - TUIContact/BaseDataProvider + - TUIContact/UI_Classic (7.3.4358): + - TUIContact/UI_Classic/Header (= 7.3.4358) + - TUIContact/UI_Classic/Service (= 7.3.4358) + - TUIContact/UI_Classic/UI (= 7.3.4358) + - TUIContact/UI_Classic/Header (7.3.4358): + - TUIContact/UI_Classic/Service + - TUIContact/UI_Classic/Service (7.3.4358): + - TUIContact/UI_Classic/UI + - TUIContact/UI_Classic/UI (7.3.4358): + - TUIContact/CommonUI + - TUIConversation/BaseCell (7.3.4358): + - TUIConversation/BaseCell/CellData (= 7.3.4358) + - TUIConversation/BaseCell/CellUI (= 7.3.4358) + - TUIConversation/BaseCell/CellData (7.3.4358): + - TUIConversation/CommonModel + - TUIConversation/BaseCell/CellUI (7.3.4358): + - TUIConversation/BaseCell/CellData + - TUIConversation/BaseDataProvider (7.3.4358): + - TUIConversation/BaseCell + - TUIConversation/CommonModel (7.3.4358): + - ReactiveObjC + - TIMCommon (= 7.3.4358) + - TUICore (= 7.3.4358) + - TXIMSDK_Plus_iOS (= 7.3.4358) + - TUIConversation/UI_Classic (7.3.4358): + - TUIConversation/UI_Classic/DataProvider (= 7.3.4358) + - TUIConversation/UI_Classic/Header (= 7.3.4358) + - TUIConversation/UI_Classic/Service (= 7.3.4358) + - TUIConversation/UI_Classic/UI (= 7.3.4358) + - TUIConversation/UI_Classic/DataProvider (7.3.4358): + - TUIConversation/BaseDataProvider + - TUIConversation/UI_Classic/Header (7.3.4358): + - TUIConversation/UI_Classic/Service + - TUIConversation/UI_Classic/Service (7.3.4358): + - TUIConversation/UI_Classic/UI + - TUIConversation/UI_Classic/UI (7.3.4358): + - TUIConversation/UI_Classic/DataProvider + - TUICore (7.3.4358): + - ReactiveObjC + - SDWebImage + - TUICore/ImSDK_Plus (= 7.3.4358) + - TUICore/Base (7.3.4358): + - ReactiveObjC + - SDWebImage + - TUICore/ImSDK_Plus (7.3.4358): + - ReactiveObjC + - SDWebImage + - TUICore/Base + - TXIMSDK_Plus_iOS (= 7.3.4358) + - TUIGroup/BaseCell (7.3.4358): + - TUIGroup/BaseCell/CellData (= 7.3.4358) + - TUIGroup/BaseCell/CellUI (= 7.3.4358) + - TUIGroup/BaseCell/CellData (7.3.4358): + - TUIGroup/CommonModel + - TUIGroup/BaseCell/CellUI (7.3.4358): + - TUIGroup/BaseCell/CellData + - TUIGroup/BaseDataProvider (7.3.4358): + - TUIGroup/BaseCell + - TUIGroup/CommonModel (7.3.4358): + - ReactiveObjC + - TIMCommon (= 7.3.4358) + - TUICore (= 7.3.4358) + - TXIMSDK_Plus_iOS (= 7.3.4358) + - TUIGroup/CommonUI (7.3.4358): + - TUIGroup/BaseDataProvider + - TUIGroup/UI_Classic (7.3.4358): + - TUIGroup/UI_Classic/Header (= 7.3.4358) + - TUIGroup/UI_Classic/Service (= 7.3.4358) + - TUIGroup/UI_Classic/UI (= 7.3.4358) + - TUIGroup/UI_Classic/Header (7.3.4358): + - TUIGroup/UI_Classic/Service + - TUIGroup/UI_Classic/Service (7.3.4358): + - TUIGroup/UI_Classic/UI + - TUIGroup/UI_Classic/UI (7.3.4358): + - TUIGroup/CommonUI + - TUIOfflinePush (7.3.4358): + - TUIOfflinePush/APNS (= 7.3.4358) + - TUIOfflinePush/APNS (7.3.4358): + - TUIOfflinePush/Base + - TUIOfflinePush/Base (7.3.4358): + - TUICore (= 7.3.4358) + - TXIMSDK_Plus_iOS (= 7.3.4358) + - TUISearch/BaseCell (7.3.4358): + - TUISearch/BaseCell/CellData (= 7.3.4358) + - TUISearch/BaseCell/CellUI (= 7.3.4358) + - TUISearch/BaseCell/CellData (7.3.4358): + - TIMCommon (= 7.3.4358) + - TUICore (= 7.3.4358) + - TXIMSDK_Plus_iOS (= 7.3.4358) + - TUISearch/BaseCell/CellUI (7.3.4358): + - TUISearch/BaseCell/CellData + - TUISearch/BaseDataProvider (7.3.4358): + - TUISearch/BaseCell + - TUISearch/UI_Classic (7.3.4358): + - TUISearch/UI_Classic/Header (= 7.3.4358) + - TUISearch/UI_Classic/Service (= 7.3.4358) + - TUISearch/UI_Classic/UI (= 7.3.4358) + - TUISearch/UI_Classic/Header (7.3.4358): + - TUISearch/UI_Classic/Service + - TUISearch/UI_Classic/Service (7.3.4358): + - TUISearch/UI_Classic/UI + - TUISearch/UI_Classic/UI (7.3.4358): + - TUISearch/BaseDataProvider + - TXIMSDK_Plus_iOS (7.3.4358) + - TXLiteAVSDK_TRTC (11.2.14217): + - TXLiteAVSDK_TRTC/TRTC (= 11.2.14217) + - TXLiteAVSDK_TRTC/TRTC (11.2.14217) + - TZImagePickerController (3.8.8): + - TZImagePickerController/Basic (= 3.8.8) + - TZImagePickerController/Location (= 3.8.8) + - TZImagePickerController/Basic (3.8.8) + - TZImagePickerController/Location (3.8.8) + - YYKit (1.0.9): + - YYKit/no-arc (= 1.0.9) + - YYKit/no-arc (1.0.9) + - YYModel (1.0.4) + +DEPENDENCIES: + - AFNetworking + - AMap3DMap (~> 10.0.600) + - AMapLocation (~> 2.9.0) + - AMapSearch (~> 9.5.0) + - FMDB + - FMDB/SQLCipher + - IQKeyboardManager + - Masonry + - MBProgressHUD + - MJRefresh + - SDCycleScrollView + - SDWebImage + - SDWebImageWebPCoder + - SJUIKit + - SJVideoPlayer + - TUICallKit (~> 1.7.0.460) + - TUICallKit/TRTC (~> 1.7.0.460) + - TUIChat/UI_Classic (~> 7.3.4358) + - TUIContact/UI_Classic (~> 7.3.4358) + - TUIConversation/UI_Classic (~> 7.3.4358) + - TUICore (~> 7.3.4358) + - TUIGroup/UI_Classic (~> 7.3.4358) + - TUIOfflinePush (~> 7.3.4358) + - TUISearch/UI_Classic (~> 7.3.4358) + - TXIMSDK_Plus_iOS (~> 7.3.4358) + - TXLiteAVSDK_TRTC/TRTC (~> 11.2.14217) + - TZImagePickerController + - YYKit + +SPEC REPOS: + trunk: + - AFNetworking + - AMap3DMap + - AMapFoundation + - AMapLocation + - AMapSearch + - FMDB + - IQKeyboardManager + - libwebp + - Masonry + - MBProgressHUD + - MJRefresh + - ReactiveObjC + - SDCycleScrollView + - SDWebImage + - SDWebImageWebPCoder + - SJBaseVideoPlayer + - SJUIKit + - SJVideoPlayer + - SQLCipher + - TIMCommon + - TUICallEngine + - TUICallKit + - TUIChat + - TUIContact + - TUIConversation + - TUICore + - TUIGroup + - TUIOfflinePush + - TUISearch + - TXIMSDK_Plus_iOS + - TXLiteAVSDK_TRTC + - TZImagePickerController + - YYKit + - YYModel + +SPEC CHECKSUMS: + AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58 + AMap3DMap: 2896b8d63034aaf79720a402573362ca2fef0dec + AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec + AMapLocation: f5eb11e11c62f0f599f80b578eec8a1f70deb985 + AMapSearch: e0c81206b8ac1d27ef349095a96ea6398e3a0da3 + FMDB: 728731dd336af3936ce00f91d9d8495f5718a0e6 + IQKeyboardManager: c8665b3396bd0b79402b4c573eac345a31c7d485 + libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 + Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 + MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406 + MJRefresh: ff9e531227924c84ce459338414550a05d2aea78 + ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040 + SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf + SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 + SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 + SJBaseVideoPlayer: b3122de12225b27b71bd9a8a1f08f4dcf2f4e5ec + SJUIKit: a40111941e408cc17d4c1c23495aa92999e814b0 + SJVideoPlayer: 4f09814f58522e0975cb2dccfda925f6c8643467 + SQLCipher: 908f846ca79d74be4e1776b3b86c6ad9e6c0b04f + TIMCommon: 2adea2895422a640e100125f6fccc0dc2aeff44b + TUICallEngine: 01b8f82535f0c01284740a9b7c3a5cf823aa7feb + TUICallKit: fc30ed879d2a92e24ffaa194e8df1087dfbedd33 + TUIChat: 557dd6872606d9da7f36913af92ee95c8e651795 + TUIContact: 0079dd736935a77e6c14c864e516232cb70466bd + TUIConversation: 643823f80f0958b7263ac24411e397fcd5f37e78 + TUICore: b0e525287eb03f95fe648a696c9ffb253fc87098 + TUIGroup: 6a4133f356bd240997ac11bb94f89648899096f7 + TUIOfflinePush: e5787da66713361da4ed64b90ca196c094f483de + TUISearch: 18a208d0ef13eb7bf7f44eae01ffefb26803aaf3 + TXIMSDK_Plus_iOS: bc72c7cec1b5e975c3cc6629692c849513a932f5 + TXLiteAVSDK_TRTC: cdab9adefc42a5e0a4fea4035e624af441ba3e83 + TZImagePickerController: d084a7b97c82d387e7669dd86dc9a9057500aacf + YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7 + YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30 + +PODFILE CHECKSUM: c63ef0a5edf68dd395621c435af5c0063b38442a + +COCOAPODS: 1.16.2 diff --git a/XinjiangProject/XinjiangProject.xcodeproj/project.pbxproj b/XinjiangProject/XinjiangProject.xcodeproj/project.pbxproj new file mode 100644 index 0000000..4983310 --- /dev/null +++ b/XinjiangProject/XinjiangProject.xcodeproj/project.pbxproj @@ -0,0 +1,687 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 2A9D6F4901C83B23A09A207B /* libPods-XinjiangProject.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5380821CF956D8001EF91CA7 /* libPods-XinjiangProject.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1809E47E2E092C740034C8FC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1809E45A2E092C710034C8FC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1809E4612E092C710034C8FC; + remoteInfo = XinjiangProject; + }; + 1809E4882E092C740034C8FC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1809E45A2E092C710034C8FC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1809E4612E092C710034C8FC; + remoteInfo = XinjiangProject; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 1809E4622E092C710034C8FC /* XinjiangProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XinjiangProject.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 1809E47D2E092C740034C8FC /* XinjiangProjectTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XinjiangProjectTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1809E4872E092C740034C8FC /* XinjiangProjectUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XinjiangProjectUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 5380821CF956D8001EF91CA7 /* libPods-XinjiangProject.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-XinjiangProject.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + D5F062871D7E5499A760A0A9 /* Pods-XinjiangProject.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XinjiangProject.release.xcconfig"; path = "Target Support Files/Pods-XinjiangProject/Pods-XinjiangProject.release.xcconfig"; sourceTree = ""; }; + F4F935FBD1765B37B37D212D /* Pods-XinjiangProject.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XinjiangProject.debug.xcconfig"; path = "Target Support Files/Pods-XinjiangProject/Pods-XinjiangProject.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 1809E48F2E092C740034C8FC /* Exceptions for "XinjiangProject" folder in "XinjiangProject" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + "Supporting Files/Info.plist", + ); + target = 1809E4612E092C710034C8FC /* XinjiangProject */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 1809E4642E092C710034C8FC /* XinjiangProject */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 1809E48F2E092C740034C8FC /* Exceptions for "XinjiangProject" folder in "XinjiangProject" target */, + ); + path = XinjiangProject; + sourceTree = ""; + }; + 1809E4802E092C740034C8FC /* XinjiangProjectTests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = XinjiangProjectTests; + sourceTree = ""; + }; + 1809E48A2E092C740034C8FC /* XinjiangProjectUITests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = XinjiangProjectUITests; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1809E45F2E092C710034C8FC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2A9D6F4901C83B23A09A207B /* libPods-XinjiangProject.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1809E47A2E092C740034C8FC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1809E4842E092C740034C8FC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1809E4592E092C710034C8FC = { + isa = PBXGroup; + children = ( + 1809E4642E092C710034C8FC /* XinjiangProject */, + 1809E4802E092C740034C8FC /* XinjiangProjectTests */, + 1809E48A2E092C740034C8FC /* XinjiangProjectUITests */, + 1809E4632E092C710034C8FC /* Products */, + AF58E7BBA422572602E63ED7 /* Pods */, + 5E0194FB12246C95B3FA5215 /* Frameworks */, + ); + sourceTree = ""; + }; + 1809E4632E092C710034C8FC /* Products */ = { + isa = PBXGroup; + children = ( + 1809E4622E092C710034C8FC /* XinjiangProject.app */, + 1809E47D2E092C740034C8FC /* XinjiangProjectTests.xctest */, + 1809E4872E092C740034C8FC /* XinjiangProjectUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 5E0194FB12246C95B3FA5215 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5380821CF956D8001EF91CA7 /* libPods-XinjiangProject.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + AF58E7BBA422572602E63ED7 /* Pods */ = { + isa = PBXGroup; + children = ( + F4F935FBD1765B37B37D212D /* Pods-XinjiangProject.debug.xcconfig */, + D5F062871D7E5499A760A0A9 /* Pods-XinjiangProject.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1809E4612E092C710034C8FC /* XinjiangProject */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1809E4902E092C740034C8FC /* Build configuration list for PBXNativeTarget "XinjiangProject" */; + buildPhases = ( + E4291FE3C5BA9A5AD560484A /* [CP] Check Pods Manifest.lock */, + 1809E45E2E092C710034C8FC /* Sources */, + 1809E45F2E092C710034C8FC /* Frameworks */, + 1809E4602E092C710034C8FC /* Resources */, + FCFFDBE5429B0BC3E8B22A74 /* [CP] Embed Pods Frameworks */, + 492BA72AF1480CCB968A855C /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 1809E4642E092C710034C8FC /* XinjiangProject */, + ); + name = XinjiangProject; + productName = XinjiangProject; + productReference = 1809E4622E092C710034C8FC /* XinjiangProject.app */; + productType = "com.apple.product-type.application"; + }; + 1809E47C2E092C740034C8FC /* XinjiangProjectTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1809E4952E092C740034C8FC /* Build configuration list for PBXNativeTarget "XinjiangProjectTests" */; + buildPhases = ( + 1809E4792E092C740034C8FC /* Sources */, + 1809E47A2E092C740034C8FC /* Frameworks */, + 1809E47B2E092C740034C8FC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1809E47F2E092C740034C8FC /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 1809E4802E092C740034C8FC /* XinjiangProjectTests */, + ); + name = XinjiangProjectTests; + productName = XinjiangProjectTests; + productReference = 1809E47D2E092C740034C8FC /* XinjiangProjectTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 1809E4862E092C740034C8FC /* XinjiangProjectUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1809E4982E092C740034C8FC /* Build configuration list for PBXNativeTarget "XinjiangProjectUITests" */; + buildPhases = ( + 1809E4832E092C740034C8FC /* Sources */, + 1809E4842E092C740034C8FC /* Frameworks */, + 1809E4852E092C740034C8FC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1809E4892E092C740034C8FC /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 1809E48A2E092C740034C8FC /* XinjiangProjectUITests */, + ); + name = XinjiangProjectUITests; + productName = XinjiangProjectUITests; + productReference = 1809E4872E092C740034C8FC /* XinjiangProjectUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 1809E45A2E092C710034C8FC /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1630; + TargetAttributes = { + 1809E4612E092C710034C8FC = { + CreatedOnToolsVersion = 16.3; + }; + 1809E47C2E092C740034C8FC = { + CreatedOnToolsVersion = 16.3; + TestTargetID = 1809E4612E092C710034C8FC; + }; + 1809E4862E092C740034C8FC = { + CreatedOnToolsVersion = 16.3; + TestTargetID = 1809E4612E092C710034C8FC; + }; + }; + }; + buildConfigurationList = 1809E45D2E092C710034C8FC /* Build configuration list for PBXProject "XinjiangProject" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 1809E4592E092C710034C8FC; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = 1809E4632E092C710034C8FC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1809E4612E092C710034C8FC /* XinjiangProject */, + 1809E47C2E092C740034C8FC /* XinjiangProjectTests */, + 1809E4862E092C740034C8FC /* XinjiangProjectUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1809E4602E092C710034C8FC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1809E47B2E092C740034C8FC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1809E4852E092C740034C8FC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 492BA72AF1480CCB968A855C /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-XinjiangProject/Pods-XinjiangProject-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + E4291FE3C5BA9A5AD560484A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-XinjiangProject-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FCFFDBE5429B0BC3E8B22A74 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-XinjiangProject/Pods-XinjiangProject-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1809E45E2E092C710034C8FC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1809E4792E092C740034C8FC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1809E4832E092C740034C8FC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1809E47F2E092C740034C8FC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1809E4612E092C710034C8FC /* XinjiangProject */; + targetProxy = 1809E47E2E092C740034C8FC /* PBXContainerItemProxy */; + }; + 1809E4892E092C740034C8FC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1809E4612E092C710034C8FC /* XinjiangProject */; + targetProxy = 1809E4882E092C740034C8FC /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1809E4912E092C740034C8FC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F4F935FBD1765B37B37D212D /* Pods-XinjiangProject.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = A7CC5LW224; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/XinjiangProject/Supporting Files/PrefixHeader.pch"; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "$(SRCROOT)/XinjiangProject/Supporting Files/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "新疆亚克西"; + INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; + INFOPLIST_KEY_NSCameraUsageDescription = "健康咨询员工端需要访问您的相机用来档案功能,是否同意?"; + INFOPLIST_KEY_NSLocationAlwaysAndWhenInUseUsageDescription = "APP需要您的定位服务,否则可能无法使用。"; + INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "APP需要您的定位服务,否则可能无法使用。"; + INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "APP需要您的定位服务,否则可能无法使用。"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "健康咨询员工端需要访问您的麦克风用来视频录制,是否同意?"; + INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "新疆员工端需要访问您的相册上传图片,方便您的使用,是否同意?"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "健康咨询想使用您的相册功能 是否同意?"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + INFOPLIST_KEY_UIUserInterfaceStyle = Light; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.questionTools.XinjiangProject; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + 1809E4922E092C740034C8FC /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D5F062871D7E5499A760A0A9 /* Pods-XinjiangProject.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = A7CC5LW224; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/XinjiangProject/Supporting Files/PrefixHeader.pch"; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "$(SRCROOT)/XinjiangProject/Supporting Files/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "新疆亚克西"; + INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; + INFOPLIST_KEY_NSCameraUsageDescription = "健康咨询员工端需要访问您的相机用来档案功能,是否同意?"; + INFOPLIST_KEY_NSLocationAlwaysAndWhenInUseUsageDescription = "APP需要您的定位服务,否则可能无法使用。"; + INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "APP需要您的定位服务,否则可能无法使用。"; + INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "APP需要您的定位服务,否则可能无法使用。"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "健康咨询员工端需要访问您的麦克风用来视频录制,是否同意?"; + INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "新疆员工端需要访问您的相册上传图片,方便您的使用,是否同意?"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "健康咨询想使用您的相册功能 是否同意?"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + INFOPLIST_KEY_UIUserInterfaceStyle = Light; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.questionTools.XinjiangProject; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; + 1809E4932E092C740034C8FC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = A7CC5LW224; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 1809E4942E092C740034C8FC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = A7CC5LW224; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 1809E4962E092C740034C8FC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = A7CC5LW224; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.questionTools.XinjiangProjectTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XinjiangProject.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/XinjiangProject"; + }; + name = Debug; + }; + 1809E4972E092C740034C8FC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = A7CC5LW224; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.questionTools.XinjiangProjectTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XinjiangProject.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/XinjiangProject"; + }; + name = Release; + }; + 1809E4992E092C740034C8FC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = A7CC5LW224; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.questionTools.XinjiangProjectUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = XinjiangProject; + }; + name = Debug; + }; + 1809E49A2E092C740034C8FC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = A7CC5LW224; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.questionTools.XinjiangProjectUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = XinjiangProject; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1809E45D2E092C710034C8FC /* Build configuration list for PBXProject "XinjiangProject" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1809E4932E092C740034C8FC /* Debug */, + 1809E4942E092C740034C8FC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1809E4902E092C740034C8FC /* Build configuration list for PBXNativeTarget "XinjiangProject" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1809E4912E092C740034C8FC /* Debug */, + 1809E4922E092C740034C8FC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1809E4952E092C740034C8FC /* Build configuration list for PBXNativeTarget "XinjiangProjectTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1809E4962E092C740034C8FC /* Debug */, + 1809E4972E092C740034C8FC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1809E4982E092C740034C8FC /* Build configuration list for PBXNativeTarget "XinjiangProjectUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1809E4992E092C740034C8FC /* Debug */, + 1809E49A2E092C740034C8FC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 1809E45A2E092C710034C8FC /* Project object */; +} diff --git a/XinjiangProject/XinjiangProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/XinjiangProject/XinjiangProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/XinjiangProject/XinjiangProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/XinjiangProject/XinjiangProject.xcworkspace/contents.xcworkspacedata b/XinjiangProject/XinjiangProject.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..8355baf --- /dev/null +++ b/XinjiangProject/XinjiangProject.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/XinjiangProject/XinjiangProject/Categorys/NSArray/NSArray+Sudoku.h b/XinjiangProject/XinjiangProject/Categorys/NSArray/NSArray+Sudoku.h new file mode 100644 index 0000000..3ed771f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSArray/NSArray+Sudoku.h @@ -0,0 +1,90 @@ +// +// NSArray+Sudoku.h +// EscortProject +// +// Created by Apple on 2024/3/4. +// + + +#import "MASUtilities.h" +#import "MASConstraintMaker.h" +#import "MASViewAttribute.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSArray (Sudoku) + +/** +* 九宫格布局 固定ItemSize 可变ItemSpacing +* +* @param fixedItemWidth 固定宽度 +* @param fixedItemHeight 固定高度 +* @param warpCount 折行点 +* @param topSpacing 顶间距 +* @param bottomSpacing 底间距 +* @param leadSpacing 左间距 +* @param tailSpacing 右间距 +*/ +- (void)mas_distributeSudokuViewsWithFixedItemWidth:(CGFloat)fixedItemWidth + fixedItemHeight:(CGFloat)fixedItemHeight + warpCount:(NSInteger)warpCount + topSpacing:(CGFloat)topSpacing + bottomSpacing:(CGFloat)bottomSpacing + leadSpacing:(CGFloat)leadSpacing + tailSpacing:(CGFloat)tailSpacing; + + +/** +* 九宫格布局 可变ItemSize 固定ItemSpacing +* +* @param fixedLineSpacing 行间距 +* @param fixedInteritemSpacing 列间距 +* @param warpCount 折行点 +* @param topSpacing 顶间距 +* @param bottomSpacing 底间距 +* @param leadSpacing 左间距 +* @param tailSpacing 右间距 +*/ +- (void)mas_distributeSudokuViewsWithFixedLineSpacing:(CGFloat)fixedLineSpacing + fixedInteritemSpacing:(CGFloat)fixedInteritemSpacing + warpCount:(NSInteger)warpCount + topSpacing:(CGFloat)topSpacing + bottomSpacing:(CGFloat)bottomSpacing + leadSpacing:(CGFloat)leadSpacing + tailSpacing:(CGFloat)tailSpacing; + + +/** +* 九宫格布局 固定ItemSize 固定ItemSpacing +* 可由九宫格的内容控制SuperView的大小 +* 如果warpCount大于[self count],该方法将会用空白的View填充到superview中 +* +* Sudoku Layout, has fixed item size, and fix item space +* If warp count greater than self.count, It's fill empty view to superview +* +* @param fixedItemWidth 固定宽度,如果设置成0,则表示自适应,If set it to zero, indicates the adaptive. +* @param fixedItemHeight 固定高度,如果设置成0,则表示自适应,If set it to zero, indicates the adaptive. +* @param fixedLineSpacing 行间距 +* @param fixedInteritemSpacing 列间距 +* @param warpCount 折行点 +* @param topSpacing 顶间距 +* @param bottomSpacing 底间距 +* @param leadSpacing 左间距 +* @param tailSpacing 右间距 +* +* @return 一般情况下会返回[self copy], 如果warpCount大于[self count],则会返回一个被空白view填充过的数组,可以让你循环调用removeFromSuperview或者干一些其他的事情; +* @return Normal will return [self copy], If warpCount bigger than [self count] , It will return a empty views filled array, you could enumerate [subview removeFromSuperview] or do other things; +*/ +- (NSArray *)mas_distributeSudokuViewsWithFixedItemWidth:(CGFloat)fixedItemWidth + fixedItemHeight:(CGFloat)fixedItemHeight + fixedLineSpacing:(CGFloat)fixedLineSpacing + fixedInteritemSpacing:(CGFloat)fixedInteritemSpacing + warpCount:(NSInteger)warpCount + topSpacing:(CGFloat)topSpacing + bottomSpacing:(CGFloat)bottomSpacing + leadSpacing:(CGFloat)leadSpacing + tailSpacing:(CGFloat)tailSpacing; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/NSArray/NSArray+Sudoku.m b/XinjiangProject/XinjiangProject/Categorys/NSArray/NSArray+Sudoku.m new file mode 100644 index 0000000..7fe295c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSArray/NSArray+Sudoku.m @@ -0,0 +1,209 @@ +// +// NSArray+Sudoku.m +// EscortProject +// +// Created by Apple on 2024/3/4. +// + + +#import "NSArray+Sudoku.h" +#import "View+MASAdditions.h" + + +@implementation NSArray (Sudoku) +- (MAS_VIEW *)star_commonSuperviewOfViews { + + if (self.count == 1) { + return ((MAS_VIEW *)self.firstObject).superview; + } + + MAS_VIEW *commonSuperview = nil; + MAS_VIEW *previousView = nil; + for (id object in self) { + if ([object isKindOfClass:[MAS_VIEW class]]) { + MAS_VIEW *view = (MAS_VIEW *)object; + if (previousView) { + commonSuperview = [view mas_closestCommonSuperview:commonSuperview]; + } else { + commonSuperview = view; + } + previousView = view; + } + } + NSAssert(commonSuperview, @"Can't constrain views that do not share a common superview. Make sure that all the views in this array have been added into the same view hierarchy."); + return commonSuperview; +} + + + +- (void)mas_distributeSudokuViewsWithFixedItemWidth:(CGFloat)fixedItemWidth + fixedItemHeight:(CGFloat)fixedItemHeight + warpCount:(NSInteger)warpCount + topSpacing:(CGFloat)topSpacing + bottomSpacing:(CGFloat)bottomSpacing + leadSpacing:(CGFloat)leadSpacing + tailSpacing:(CGFloat)tailSpacing { + if (self.count < 2) { + NSAssert(self.count>1,@"views to distribute need to bigger than one"); + return; + } + if (warpCount < 1) { + NSAssert(false, @"warp count need to bigger than zero"); + return; + } + + MAS_VIEW *tempSuperView = [self star_commonSuperviewOfViews]; + + NSInteger rowCount = self.count % warpCount == 0 ? self.count / warpCount : self.count / warpCount + 1; + + MAS_VIEW *prev; + for (int i = 0; i < self.count; i++) { + + MAS_VIEW *v = self[i]; + + // 当前行 + NSInteger currentRow = i / warpCount; + // 当前列 + NSInteger currentColumn = i % warpCount; + + [v mas_makeConstraints:^(MASConstraintMaker *make) { + // 固定宽度 + make.width.equalTo(@(fixedItemWidth)); + make.height.equalTo(@(fixedItemHeight)); + + // 第一行 + if (currentRow == 0) { + make.top.equalTo(tempSuperView).offset(topSpacing); + } + // 最后一行 + if (currentRow == rowCount - 1) { + make.bottom.equalTo(tempSuperView).offset(-bottomSpacing); + } + // 中间的若干行 + if (currentRow != 0 && currentRow != rowCount - 1){ + CGFloat offset = (1-(currentRow/((CGFloat)rowCount-1)))*(fixedItemHeight+topSpacing)-currentRow*bottomSpacing/(((CGFloat)rowCount-1)); + make.bottom.equalTo(tempSuperView).multipliedBy(currentRow/((CGFloat)rowCount-1)).offset(offset); + } + + // 第一列 + if (currentColumn == 0) { + make.left.equalTo(tempSuperView).offset(leadSpacing); + } + // 最后一列 + if (currentColumn == warpCount - 1) { + make.right.equalTo(tempSuperView).offset(-tailSpacing); + } + // 中间若干列 + if (currentColumn != 0 && currentColumn != warpCount - 1) { + CGFloat offset = (1-(currentColumn/((CGFloat)warpCount-1)))*(fixedItemWidth+leadSpacing)-currentColumn*tailSpacing/(((CGFloat)warpCount-1)); + make.right.equalTo(tempSuperView).multipliedBy(currentColumn/((CGFloat)warpCount-1)).offset(offset); + } + }]; + prev = v; + } +} + +- (void)mas_distributeSudokuViewsWithFixedLineSpacing:(CGFloat)fixedLineSpacing + fixedInteritemSpacing:(CGFloat)fixedInteritemSpacing + warpCount:(NSInteger)warpCount + topSpacing:(CGFloat)topSpacing + bottomSpacing:(CGFloat)bottomSpacing + leadSpacing:(CGFloat)leadSpacing + tailSpacing:(CGFloat)tailSpacing { + + [self mas_distributeSudokuViewsWithFixedItemWidth:0 fixedItemHeight:0 fixedLineSpacing:fixedLineSpacing fixedInteritemSpacing:fixedInteritemSpacing warpCount:warpCount topSpacing:topSpacing bottomSpacing:bottomSpacing leadSpacing:leadSpacing tailSpacing:tailSpacing]; +} + +- (NSArray *)mas_distributeSudokuViewsWithFixedItemWidth:(CGFloat)fixedItemWidth + fixedItemHeight:(CGFloat)fixedItemHeight + fixedLineSpacing:(CGFloat)fixedLineSpacing + fixedInteritemSpacing:(CGFloat)fixedInteritemSpacing + warpCount:(NSInteger)warpCount + topSpacing:(CGFloat)topSpacing + bottomSpacing:(CGFloat)bottomSpacing + leadSpacing:(CGFloat)leadSpacing + tailSpacing:(CGFloat)tailSpacing { + if (self.count < 1) { + return self.copy; + } + if (warpCount < 1) { + NSAssert(false, @"warp count need to bigger than zero"); + return self.copy; + } + + MAS_VIEW *tempSuperView = [self star_commonSuperviewOfViews]; + + NSArray *tempViews = self.copy; + if (warpCount > self.count) { + for (int i = 0; i < warpCount - self.count; i++) { + MAS_VIEW *tempView = [[MAS_VIEW alloc] init]; + [tempSuperView addSubview:tempView]; + tempViews = [tempViews arrayByAddingObject:tempView]; + } + } + + NSInteger columnCount = warpCount; + NSInteger rowCount = tempViews.count % columnCount == 0 ? tempViews.count / columnCount : tempViews.count / columnCount + 1; + + MAS_VIEW *prev; + for (int i = 0; i < tempViews.count; i++) { + + MAS_VIEW *v = tempViews[i]; + NSInteger currentRow = i / columnCount; + NSInteger currentColumn = i % columnCount; + + [v mas_makeConstraints:^(MASConstraintMaker *make) { + if (prev) { + // 固定宽度 + make.width.equalTo(prev); + make.height.equalTo(prev); + } + else { + // 如果写的item高宽分别是0,则表示自适应 + if (fixedItemWidth) { + make.width.equalTo(@(fixedItemWidth)); + } + if (fixedItemHeight) { + make.height.equalTo(@(fixedItemHeight)); + } + } + + // 第一行 + if (currentRow == 0) { + make.top.equalTo(tempSuperView).offset(topSpacing); + } + // 最后一行 + if (currentRow == rowCount - 1) { + // 如果只有一行 + if (currentRow != 0 && i-columnCount >= 0) { + make.top.equalTo(((MAS_VIEW *)tempViews[i-columnCount]).mas_bottom).offset(fixedLineSpacing); + } + make.bottom.equalTo(tempSuperView).offset(-bottomSpacing); + } + // 中间的若干行 + if (currentRow != 0 && currentRow != rowCount - 1) { + make.top.equalTo(((MAS_VIEW *)tempViews[i-columnCount]).mas_bottom).offset(fixedLineSpacing); + } + + // 第一列 + if (currentColumn == 0) { + make.left.equalTo(tempSuperView).offset(leadSpacing); + } + // 最后一列 + if (currentColumn == columnCount - 1) { + // 如果只有一列 + if (currentColumn != 0) { + make.left.equalTo(prev.mas_right).offset(fixedInteritemSpacing); + } + make.right.equalTo(tempSuperView).offset(-tailSpacing); + } + // 中间若干列 + if (currentColumn != 0 && currentColumn != warpCount - 1) { + make.left.equalTo(prev.mas_right).offset(fixedInteritemSpacing); + } + }]; + prev = v; + } + return tempViews; +} +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/NSAttributedString+Extension.h b/XinjiangProject/XinjiangProject/Categorys/NSAttributedString+Extension.h new file mode 100644 index 0000000..b270fcc --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSAttributedString+Extension.h @@ -0,0 +1,16 @@ +// +// NSAttributedString+Extension.h +// EscortProject +// +// Created by 仁康信息 on 2023/3/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSAttributedString (Extension) + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/NSAttributedString+Extension.m b/XinjiangProject/XinjiangProject/Categorys/NSAttributedString+Extension.m new file mode 100644 index 0000000..b8c4ce7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSAttributedString+Extension.m @@ -0,0 +1,12 @@ +// +// NSAttributedString+Extension.m +// EscortProject +// +// Created by 仁康信息 on 2023/3/14. +// + +#import "NSAttributedString+Extension.h" + +@implementation NSAttributedString (Extension) + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/NSDate/NSDate+IH.h b/XinjiangProject/XinjiangProject/Categorys/NSDate/NSDate+IH.h new file mode 100755 index 0000000..1b04c00 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSDate/NSDate+IH.h @@ -0,0 +1,239 @@ +// +// NSDate+IH.h +// IHKit +// +// Created by yl on 16/10/24. +// Copyright © 2016年 39hospital. All rights reserved. +// +// +// Learning to YYKit url https://github.com/ibireme/YYKit/blob/master/YYKit/ + + + +#import + +NS_ASSUME_NONNULL_BEGIN + +static NSString *ih_default_date_format = @"yyyy-MM-dd HH:mm:ss"; //!<常用的时间格式 + +@interface NSDate (Property) + +@property (nonatomic, readonly) NSInteger year; // Year component +@property (nonatomic, readonly) NSInteger month; // Month component (1~12) +@property (nonatomic, readonly) NSInteger day; // Day component (1~31) + +@property (nonatomic, readonly) NSInteger hour; // Hour component (0~23) +@property (nonatomic, readonly) NSInteger minute; // Minute component (0~59) +@property (nonatomic, readonly) NSInteger second; // Second component (0~59) +@property (nonatomic, readonly) NSInteger nanosecond; // Nanosecond component + +@property (nonatomic, readonly) NSInteger weekday; // Weekday component (1~7, first day is based on user setting) +@property (nonatomic, readonly) NSInteger weekdayOrdinal; // WeekdayOrdinal component +@property (nonatomic, readonly) NSInteger weekOfMonth; // WeekOfMonth component (1~5) +@property (nonatomic, readonly) NSInteger weekOfYear; // WeekOfYear component (1~53) +@property (nonatomic, readonly) NSInteger yearForWeekOfYear; // YearForWeekOfYear component +@property (nonatomic, readonly) NSInteger quarter; // Quarter component + +@property (nonatomic, readonly) BOOL isLeapMonth; // whether the month is leap month +@property (nonatomic, readonly) BOOL isLeapYear; // whether the year is leap year +@property (nonatomic, readonly) BOOL isToday; // whether date is today (based on current locale) +@property (nonatomic, readonly) BOOL isYesterday; // whether date is yesterday (based on current locale) + ++ (NSArray *)toGetDatesWithStartDate:(NSString *)startDate endDate:(NSString *)endDate; ++ (NSString *)toGetWeekDayString:(NSInteger )weekDay; + + +@end + + +@interface NSDate (Format) + +/** + 获取对应format的时间字符串 + + @param format 时间构造format e.g. @"yyyy-MM-dd HH:mm:ss" + + @return 时间字符串 nilable + + */ +- (nullable NSString *)ih_stringWithFormat:(nullable NSString *)format; + +/** + 获取对应format的时间字符串 + + @param format 时间构造format e.g. @"yyyy-MM-dd HH:mm:ss" + @param timeZone 时区 + @param locale 当地环境 + + @return 时间字符串 nilable + */ +- (nullable NSString *)ih_stringWithFormat:(nullable NSString *)format timeZone:(nullable NSTimeZone *)timeZone locale:(nullable NSLocale *)locale; + +/** + 标准ISO8601 format e.g. @"2016-10-24T16:40:16+12:00" + + @return 时间字符串(ISO标准) nilable + */ +- (nullable NSString *)ih_stringWithISOFormat; + +/** + 通过时间字符串获取nsdate对象 + + @param dateString 时间字符串 + @param format 时间字符串的format + + @return nsdate对象 nilable + */ ++ (nullable NSDate *)ih_dateWithString:(nullable NSString *)dateString format:(nullable NSString *)format; + +/** + 通过时间字符串获取nsdate对象 + + @param dateString 时间字符串 + @param format 时间字符串的format + @param timeZone 时区 + @param locale 当地环境 + + @return nsdate对象 nilable + */ ++ (nullable NSDate *)ih_dateWithString:(nullable NSString *)dateString format:(nullable NSString *)format timeZone:(nullable NSTimeZone *)timeZone locale:(nullable NSLocale *)locale; + +/** + 通过时间字符串获取一个依据 ISO format 的nsdate对象 + + @param dateString 时间字符串 + + @return nsdate对象 nilable + */ ++ (nullable NSDate *)ih_dateWithISOFormatString:(nullable NSString *)dateString; + +@end + + +@interface NSDate (Modify) + +/** + 获取自己增加添加some years之后的nsdate + + @param years 年数 + + @return nsdate增加之后 nilable + */ +- (nullable NSDate *)ih_dateByAddingYears:(NSInteger)years; + +/** + 获取自己增加添加some months之后的nsdate + + @param months 月数 + + @return nsdate增加之后 nilable + */ +- (nullable NSDate *)ih_dateByAddingMonths:(NSInteger)months; + +/** + 获取自己增加添加some months之后的nsdate + + @param weeks 周数 + + @return nsdate增加之后 nilable + */ +- (nullable NSDate *)ih_dateByAddingWeeks:(NSInteger)weeks; + +/** + 获取自己增加添加some days之后的nsdate + + @param days 天数 + + @return nsdate增加之后 nilable + */ +- (nullable NSDate *)ih_dateByAddingDays:(NSInteger)days; + +/** + 获取自己增加添加some hours之后的nsdate + + @param hours 小时数 + + @return nsdate增加之后 nilable + */ +- (nullable NSDate *)ih_dateByAddingHours:(NSInteger)hours; + +/** + 获取自己增加添加some mins之后的nsdate + + @param minutes 分钟数 + + @return nsdate增加之后 nilable + */ +- (nullable NSDate *)ih_dateByAddingMinutes:(NSInteger)minutes; + +/** + 获取自己增加添加some secs之后的nsdate + + @param seconds 秒数 + + @return nsdate增加之后 nilable + */ +- (nullable NSDate *)ih_dateByAddingSeconds:(NSInteger)seconds; + +@end + +@interface NSDate (Compare) + +/** + 比较两个时间的大小 使用默认的date格式:yyyy-MM-dd HH:mm:ss + + @param dateString 比较时间 + + @return 比较结果 + */ +- (NSComparisonResult)ih_compareDateString:(nullable NSString *)dateString; + +/** + 比较两个时间的大小 使用的dateformat + + @param dateString 时间字符串 + @param format 时间字符串的构造格式 + + @return 比较结果 (比较结果为通过相应的format来构造自身(因为nsdate的format不一定和外部传入的一样,那样比较的话会出现明显误差),再进行比较) + */ +- (NSComparisonResult)ih_compareDateString:(nullable NSString *)dateString format:(nullable NSString *)format; + +/** + 两个时间之间相距多少秒 + + @param date 比较时间 + + @return 秒数 + */ +- (NSTimeInterval)ih_secondTimeAwayFromDate:(nullable NSDate *)date; + +/** + 两个时间之间相距多少分钟 + + @param date 比较时间 + + @return 分钟数 + */ +- (double)ih_minuteTimeAwayFromDate:(nullable NSDate *)date; + +/** + 两个时间之间相距多少小时 + + @param date 比较时间 + + @return 小时数 + */ +- (double)ih_hourTimeAwayFromDate:(nullable NSDate *)date; + +/** + 两个时间之间相距多少小天 + + @param date 比较时间 + + @return 天数 + */ +- (double)ih_dayTimeAwayFromDate:(nullable NSDate *)date; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/NSDate/NSDate+IH.m b/XinjiangProject/XinjiangProject/Categorys/NSDate/NSDate+IH.m new file mode 100755 index 0000000..ce77af0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSDate/NSDate+IH.m @@ -0,0 +1,264 @@ +// +// NSDate+IH.m +// IHKit +// +// Created by yl on 16/10/24. +// Copyright © 2016年 39hospital. All rights reserved. +// + +#import "NSDate+IH.h" + +@implementation NSDate (Property) + +- (NSInteger)year { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitYear fromDate:self] year]; +} + +- (NSInteger)month { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitMonth fromDate:self] month]; +} + +- (NSInteger)day { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitDay fromDate:self] day]; +} + +- (NSInteger)hour { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitHour fromDate:self] hour]; +} + +- (NSInteger)minute { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitMinute fromDate:self] minute]; +} + +- (NSInteger)second { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitSecond fromDate:self] second]; +} + +- (NSInteger)nanosecond { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitSecond fromDate:self] nanosecond]; +} + +- (NSInteger)weekday { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitWeekday fromDate:self] weekday]; +} + +- (NSInteger)weekdayOrdinal { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitWeekdayOrdinal fromDate:self] weekdayOrdinal]; +} + +- (NSInteger)weekOfMonth { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitWeekOfMonth fromDate:self] weekOfMonth]; +} + +- (NSInteger)weekOfYear { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitWeekOfYear fromDate:self] weekOfYear]; +} + +- (NSInteger)yearForWeekOfYear { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitYearForWeekOfYear fromDate:self] yearForWeekOfYear]; +} + +- (NSInteger)quarter { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitQuarter fromDate:self] quarter]; +} + +- (BOOL)isLeapMonth { + return [[[NSCalendar currentCalendar] components:NSCalendarUnitQuarter fromDate:self] isLeapMonth]; +} + +- (BOOL)isLeapYear { + NSUInteger year = self.year; + return ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))); +} + +- (BOOL)isToday { + if (fabs(self.timeIntervalSinceNow) >= 60 * 60 * 24) return NO; + return [NSDate new].day == self.day; +} + +- (BOOL)isYesterday { + NSDate *added = [self ih_dateByAddingDays:1]; + return [added isToday]; +} + ++ (NSArray *)toGetDatesWithStartDate:(NSString *)startDate endDate:(NSString *)endDate { + NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian]; + NSDateFormatter *matter = [[NSDateFormatter alloc] init]; + matter.dateFormat = @"yyyy-MM-dd"; + NSDate *start = [matter dateFromString:startDate]; + NSDate *end = [matter dateFromString:endDate]; + NSMutableArray *componentAarray = [NSMutableArray array]; + NSComparisonResult result = [start compare:end]; + NSDateComponents *comps; + while (result != NSOrderedDescending) { + comps = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday fromDate:start]; + [componentAarray addObject:start]; + [comps setDay:([comps day]+1)]; + start = [calendar dateFromComponents:comps]; + result = [start compare:end]; + }return componentAarray; +} ++ (NSString *)toGetWeekDayString:(NSInteger )weekDay { + switch (weekDay) { + case 1: + return @"星期日"; + break; + case 2: + return @"星期一"; + break; + case 3: + return @"星期二"; + break; + case 4: + return @"星期三"; + break; + case 5: + return @"星期四"; + break; + case 6: + return @"星期五"; + break; + case 7: + return @"星期六"; + break; + + default: + return @""; + break; + } +} + + + + +@end + +@implementation NSDate (Format) + +- (NSString *)ih_stringWithFormat:(NSString *)format { + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setDateFormat:format]; + [formatter setLocale:[NSLocale currentLocale]]; + return [formatter stringFromDate:self]; +} + +- (NSString *)ih_stringWithFormat:(NSString *)format timeZone:(NSTimeZone *)timeZone locale:(NSLocale *)locale { + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setDateFormat:format]; + if (timeZone) [formatter setTimeZone:timeZone]; + if (locale) [formatter setLocale:locale]; + return [formatter stringFromDate:self]; +} + +- (NSString *)ih_stringWithISOFormat { + static NSDateFormatter *formatter = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + formatter = [[NSDateFormatter alloc] init]; + formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; + formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ"; + }); + return [formatter stringFromDate:self]; +} + ++ (NSDate *)ih_dateWithString:(NSString *)dateString format:(NSString *)format { + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setDateFormat:format]; + return [formatter dateFromString:dateString]; +} + ++ (NSDate *)ih_dateWithString:(NSString *)dateString format:(NSString *)format timeZone:(NSTimeZone *)timeZone locale:(NSLocale *)locale { + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setDateFormat:format]; + if (timeZone) [formatter setTimeZone:timeZone]; + if (locale) [formatter setLocale:locale]; + return [formatter dateFromString:dateString]; +} + ++ (NSDate *)ih_dateWithISOFormatString:(nullable NSString *)dateString { + static NSDateFormatter *formatter = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + formatter = [[NSDateFormatter alloc] init]; + formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; + formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ"; + }); + return [formatter dateFromString:dateString]; +} + +@end + +@implementation NSDate (Modify) + +- (NSDate *)ih_dateByAddingYears:(NSInteger)years { + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [[NSDateComponents alloc] init]; + [components setYear:years]; + return [calendar dateByAddingComponents:components toDate:self options:0]; +} + +- (NSDate *)ih_dateByAddingMonths:(NSInteger)months { + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [[NSDateComponents alloc] init]; + [components setMonth:months]; + return [calendar dateByAddingComponents:components toDate:self options:0]; +} + +- (NSDate *)ih_dateByAddingWeeks:(NSInteger)weeks { + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [[NSDateComponents alloc] init]; + [components setWeekOfYear:weeks]; + return [calendar dateByAddingComponents:components toDate:self options:0]; +} + +- (NSDate *)ih_dateByAddingDays:(NSInteger)days { + return [self ih_dateByAddingHours:(24 * days)]; +} + +- (NSDate *)ih_dateByAddingHours:(NSInteger)hours { + return [self ih_dateByAddingMinutes:(60 * hours)]; +} + +- (NSDate *)ih_dateByAddingMinutes:(NSInteger)minutes { + return [self ih_dateByAddingSeconds:(60 * minutes)]; +} + +- (NSDate *)ih_dateByAddingSeconds:(NSInteger)seconds { + NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + seconds; + NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; + return newDate; +} + +@end + +@implementation NSDate (Compare) + +- (NSComparisonResult)ih_compareDateString:(NSString *)dateString{ + return [self ih_compareDateString:dateString format:@"yyyy-MM-dd HH:mm:ss"]; +} + +- (NSComparisonResult)ih_compareDateString:(NSString *)dateString format:(NSString *)format{ + NSDate *selfCompareDate = [NSDate ih_dateWithString:[self ih_stringWithFormat:format] format:format]; + return [selfCompareDate compare:[NSDate ih_dateWithString:dateString format:format]]; +} + +- (NSTimeInterval)ih_secondTimeAwayFromDate:(NSDate *)date{ + return [self timeIntervalSinceDate:date]; +} + +- (double)ih_minuteTimeAwayFromDate:(NSDate *)date{ + return ([self ih_secondTimeAwayFromDate:date]/60); +} + +- (double)ih_hourTimeAwayFromDate:(NSDate *)date{ + return ([self ih_minuteTimeAwayFromDate:date]/60); +} + +- (double)ih_dayTimeAwayFromDate:(NSDate *)date{ + return ([self ih_hourTimeAwayFromDate:date]/24); +} +- (double)ih_monthTimeAwayFromDate:(NSDate *)date{ + return ([self ih_dayTimeAwayFromDate:date]/30); +} + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+Log.h b/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+Log.h new file mode 100644 index 0000000..c65416f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+Log.h @@ -0,0 +1,20 @@ +// +// NSDictionary+Log.h +// wbiaoServer +// +// Created by boai on 2020/4/13. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSDictionary (Log) + +@end + +@interface NSArray (Log) + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+Log.m b/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+Log.m new file mode 100644 index 0000000..8901e1f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+Log.m @@ -0,0 +1,74 @@ +// +// NSDictionary+Log.m +// wbiaoServer +// +// Created by boai on 2020/4/13. +// + +#import "NSDictionary+Log.h" + +@implementation NSDictionary (Log) + +- (NSString *)jsonString{ + if (self == nil) { + return nil; + } + NSError *error; + NSData *data = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error]; + NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + return jsonString; +} + +- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level +{ + NSMutableString *mStr = [NSMutableString string]; + NSMutableString *tab = [NSMutableString stringWithString:@""]; + for (int i = 0; i < level; i++) { + [tab appendString:@"\t"]; + } + [mStr appendString:@"{\n"]; + NSArray *allKey = self.allKeys; + for (int i = 0; i < allKey.count; i++) { + id value = self[allKey[i]]; + NSString *lastSymbol = (allKey.count == i + 1) ? @"":@";"; + if ([value respondsToSelector:@selector(descriptionWithLocale:indent:)]) { + + [mStr appendFormat:@"\t%@%@ = %@%@\n",tab,allKey[i],[value descriptionWithLocale:locale indent:level + 1],lastSymbol]; + + } else { + + [mStr appendFormat:@"\t%@%@ = %@%@\n",tab,allKey[i],value,lastSymbol]; + + } + } + [mStr appendFormat:@"%@}",tab]; + return mStr; +} + +@end + +@implementation NSArray (Log) + +- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level{ + + NSMutableString *mStr = [NSMutableString string]; + NSMutableString *tab = [NSMutableString stringWithString:@""]; + for (int i = 0; i < level; i++) { + [tab appendString:@"\t"]; + } + [mStr appendString:@"(\n"]; + for (int i = 0; i < self.count; i++) { + NSString *lastSymbol = (self.count == i + 1) ? @"":@","; + id value = self[i]; + if ([value respondsToSelector:@selector(descriptionWithLocale:indent:)]) { + [mStr appendFormat:@"\t%@%@%@\n",tab,[value descriptionWithLocale:locale indent:level + 1],lastSymbol]; + } else { + [mStr appendFormat:@"\t%@%@%@\n",tab,value,lastSymbol]; + } + } + [mStr appendFormat:@"%@)",tab]; + return mStr; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+NilSafe.h b/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+NilSafe.h new file mode 100644 index 0000000..8118376 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+NilSafe.h @@ -0,0 +1,17 @@ +// +// NSDictionary+NilSafe.h +// NSDictionary-NilSafe +// +// Created by Allen Hsu on 6/22/16. +// Copyright © 2016 Glow Inc. All rights reserved. +// + +#import + +@interface NSDictionary (NilSafe) + +@end + +@interface NSMutableDictionary (NilSafe) + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+NilSafe.m b/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+NilSafe.m new file mode 100644 index 0000000..5060b59 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSDictionary/NSDictionary+NilSafe.m @@ -0,0 +1,113 @@ +// +// NSDictionary+NilSafe.m +// NSDictionary-NilSafe +// +// Created by Allen Hsu on 6/22/16. +// Copyright © 2016 Glow Inc. All rights reserved. +// + +#import +#import "NSDictionary+NilSafe.h" + +@implementation NSObject (Swizzling) + ++ (BOOL)gl_swizzleMethod:(SEL)origSel withMethod:(SEL)altSel { + Method origMethod = class_getInstanceMethod(self, origSel); + Method altMethod = class_getInstanceMethod(self, altSel); + if (!origMethod || !altMethod) { + return NO; + } + class_addMethod(self, + origSel, + class_getMethodImplementation(self, origSel), + method_getTypeEncoding(origMethod)); + class_addMethod(self, + altSel, + class_getMethodImplementation(self, altSel), + method_getTypeEncoding(altMethod)); + method_exchangeImplementations(class_getInstanceMethod(self, origSel), + class_getInstanceMethod(self, altSel)); + return YES; +} + ++ (BOOL)gl_swizzleClassMethod:(SEL)origSel withMethod:(SEL)altSel { + return [object_getClass((id)self) gl_swizzleMethod:origSel withMethod:altSel]; +} + +@end + +@implementation NSDictionary (NilSafe) + ++ (void)load { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + [self gl_swizzleMethod:@selector(initWithObjects:forKeys:count:) withMethod:@selector(gl_initWithObjects:forKeys:count:)]; + [self gl_swizzleClassMethod:@selector(dictionaryWithObjects:forKeys:count:) withMethod:@selector(gl_dictionaryWithObjects:forKeys:count:)]; + }); +} + ++ (instancetype)gl_dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt { + id safeObjects[cnt]; + id safeKeys[cnt]; + NSUInteger j = 0; + for (NSUInteger i = 0; i < cnt; i++) { + id key = keys[i]; + id obj = objects[i]; + if (!key || !obj) { + continue; + } + safeKeys[j] = key; + safeObjects[j] = obj; + j++; + } + return [self gl_dictionaryWithObjects:safeObjects forKeys:safeKeys count:j]; +} + +- (instancetype)gl_initWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt { + id safeObjects[cnt]; + id safeKeys[cnt]; + NSUInteger j = 0; + for (NSUInteger i = 0; i < cnt; i++) { + id key = keys[i]; + id obj = objects[i]; + if (!key || !obj) { + continue; + } + if (!obj) { + obj = [NSNull null]; + } + safeKeys[j] = key; + safeObjects[j] = obj; + j++; + } + return [self gl_initWithObjects:safeObjects forKeys:safeKeys count:j]; +} + +@end + +@implementation NSMutableDictionary (NilSafe) + ++ (void)load { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Class class = NSClassFromString(@"__NSDictionaryM"); + [class gl_swizzleMethod:@selector(setObject:forKey:) withMethod:@selector(gl_setObject:forKey:)]; + [class gl_swizzleMethod:@selector(setObject:forKeyedSubscript:) withMethod:@selector(gl_setObject:forKeyedSubscript:)]; + }); +} + +- (void)gl_setObject:(id)anObject forKey:(id)aKey { + if (!aKey || !anObject) { + return; + } + [self gl_setObject:anObject forKey:aKey]; +} + +- (void)gl_setObject:(id)obj forKeyedSubscript:(id)key { + if (!key || !obj) { + return; + } + [self gl_setObject:obj forKeyedSubscript:key]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/NSString/NSString+FKTools.h b/XinjiangProject/XinjiangProject/Categorys/NSString/NSString+FKTools.h new file mode 100755 index 0000000..849d87d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSString/NSString+FKTools.h @@ -0,0 +1,59 @@ +// +// NSString+FKTools.h +// Doctor +// +// Created by 张正梅 on 2019/5/30. +// Copyright © 2019 com.longmaster. All rights reserved. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSString (FKTools) +/* 为适应iOS7写的一个是否包含某字符的方法 */ +- (BOOL)myContainsString:(NSString*)other; +//根据宽度确定字符串的高度 +- (CGFloat)heigthWithsysFont:(CGFloat)font + withWidth:(CGFloat)width; +- (CGFloat)heigthWithboldSystemFont:(CGFloat)font + withWidth:(CGFloat)width; ++ (CGFloat)toCalculateHeightWithContent:(NSString *)contentText Width:(CGFloat)width Font:(UIFont *)font; ++ (CGSize)boundingRectWithWidth:(CGFloat)maxWidth + withTextFont:(UIFont *)font + withLineSpacing:(CGFloat)lineSpacing + text:(NSString *)text; ++ (NSMutableAttributedString *)toGetAttributedStringWithFont:(UIFont *)font + withLineSpacing:(CGFloat)lineSpacing + text:(NSString *)text; +//一行字体的宽度 +- (CGFloat)widthWithsysFont:(CGFloat)font; +- (CGFloat)widthWithBordFont:(CGFloat)font; + ++ (CGFloat)HeightWithHtlm5Str:(NSString *)htlmStr width:(CGFloat)width; ++ (NSString*)newlineReplacingjson:(NSString*)strJson; + +- (NSMutableAttributedString *)setAttributeWithLab:(UILabel *)label LineSpacing:(CGFloat)lineSpacing; +/* 根据出生日期得到年龄 */ +-(NSString *)toGetAgeByBornDate; +/* 得到高度 */ +- (CGFloat)toGetRectLab:(UILabel *)lable WithWidth:(CGFloat)widthFloat; +- (BOOL)hasSubString:(NSString *)subString; + +- (void)toSetAttributeWithLable:(UILabel *)lable Title:(NSString *)title TitleColor:(UIColor *)titleColor TitleFont:(UIFont *)titleFont + ContentText:(NSString *)contentText ContentColor:(UIColor *)ContentColor ContentFont:(UIFont *)ContentFont; ++ (NSAttributedString *)toGetStrWithHtmlStr:(NSString *)string; ++ (NSMutableAttributedString *)setEquipmentAttributedString:(NSString *)str; ++ (CGFloat )getHTMLHeightByStr:(NSString *)str; + ++ (NSString *)toGetTimeText:(NSString *)timeText; + ++ (NSString *)UIImageToBase64Str:(UIImage *) image; + ++ (NSString *)toGetTimeTextByEndOfTheMinute:(NSString *)time; + +- (NSString *)MD5_32BI; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/NSString/NSString+FKTools.m b/XinjiangProject/XinjiangProject/Categorys/NSString/NSString+FKTools.m new file mode 100755 index 0000000..272a978 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/NSString/NSString+FKTools.m @@ -0,0 +1,230 @@ +// +// NSString+FKTools.m +// Doctor +// +// Created by 张正梅 on 2019/5/30. +// Copyright © 2019 com.longmaster. All rights reserved. +// + +#import "NSString+FKTools.h" +#import "NSDate+IH.h" +#import + +@implementation NSString (FKTools) +- (BOOL)myContainsString:(NSString*)other{ + NSRange range = [self rangeOfString:other]; + return range.length != 0; +} +- (CGFloat)heigthWithsysFont:(CGFloat)font + withWidth:(CGFloat)width{ + NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:font], NSFontAttributeName, nil]; + CGRect rect = [self boundingRectWithSize:CGSizeMake(width, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil]; + return rect.size.height; +} +- (CGFloat)heigthWithboldSystemFont:(CGFloat)font + withWidth:(CGFloat)width{ + NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:font], NSFontAttributeName, nil]; + CGRect rect = [self boundingRectWithSize:CGSizeMake(width, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil]; + return rect.size.height; +} ++ (CGFloat)toCalculateHeightWithContent:(NSString *)contentText Width:(CGFloat)width Font:(UIFont *)font{ + CGFloat textHeight = [NSString boundingRectWithWidth:width withTextFont:font withLineSpacing:LineSpace text:contentText].height; + return textHeight; +} + +/** + * 根据文字内容动态计算UILabel宽高 + * @param maxWidth label宽度 + * @param font 字体 + * @param lineSpacing 行间距 + * @param text 内容 + */ ++ (CGSize)boundingRectWithWidth:(CGFloat)maxWidth + withTextFont:(UIFont *)font + withLineSpacing:(CGFloat)lineSpacing + text:(NSString *)text{ + CGSize maxSize = CGSizeMake(maxWidth, CGFLOAT_MAX); + //段落样式 + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + //设置行间距 + [paragraphStyle setLineSpacing:lineSpacing]; +#warning 此处设置NSLineBreakByTruncatingTail会导致计算文字高度方法失效 +// [paragraphStyle setLineBreakMode:NSLineBreakByTruncatingTail]; + //计算文字尺寸 + CGSize size = [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle} context:nil].size; + return size; +} ++ (NSMutableAttributedString *)toGetAttributedStringWithFont:(UIFont *)font withLineSpacing:(CGFloat)lineSpacing text:(NSString *)text{ + NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName:font}]; + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle setLineSpacing:lineSpacing]; + [paragraphStyle setLineBreakMode:NSLineBreakByTruncatingTail]; + [attr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])]; + return attr; +} + + +- (CGFloat)widthWithsysFont:(CGFloat)font{ + NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:font], NSFontAttributeName, nil]; + CGRect rect = [self boundingRectWithSize:CGSizeMake(0, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil]; + return rect.size.width; +} +- (CGFloat)widthWithBordFont:(CGFloat)font{ + NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:font], NSFontAttributeName, nil]; + CGRect rect = [self boundingRectWithSize:CGSizeMake(0, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil]; + return rect.size.width; +} ++ (CGFloat)HeightWithHtlm5Str:(NSString *)htlmStr width:(CGFloat)width{ + UILabel *lab= [[UILabel alloc]init]; + NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[htlmStr dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil]; + lab.attributedText = attrStr; + return [lab sizeThatFits:CGSizeMake(width, CGFLOAT_MAX)].height; +} ++ (NSString*)newlineReplacingjson:(NSString*)strJson{ + NSString *strDoctorBrief = [strJson stringByReplacingOccurrencesOfString:@"
" withString:@"\r\n"]; + strDoctorBrief = [strDoctorBrief stringByReplacingOccurrencesOfString:@"
" withString:@"\n\r"]; + strDoctorBrief = [strDoctorBrief stringByReplacingOccurrencesOfString:@"
" withString:@"\n"]; + strDoctorBrief = [strDoctorBrief stringByReplacingOccurrencesOfString:@"
" withString:@"\r"]; + strDoctorBrief = [strDoctorBrief stringByReplacingOccurrencesOfString:@"}" withString:@"}
"]; + strDoctorBrief = [strDoctorBrief stringByReplacingOccurrencesOfString:@"{" withString:@"{
"]; + return strDoctorBrief; +} + +- (NSMutableAttributedString *)setAttributeWithLab:(UILabel *)label LineSpacing:(CGFloat)lineSpacing{ + NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:self]; + NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; + paragraphStyle.alignment = NSTextAlignmentJustified; + paragraphStyle.lineSpacing = lineSpacing - (label.font.lineHeight - label.font.pointSize); + NSRange range = NSMakeRange(0, attrStr.length); + [attrStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:range]; + return attrStr; +} + +-(NSString *)toGetAgeByBornDate{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDate *nowDate = [NSDate date]; + NSString *date_format = @"yyyy-MM-dd"; + NSDate *bornDate = [NSDate ih_dateWithString:self format:date_format]; + unsigned int unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; + NSDateComponents *date = [calendar components:unitFlags fromDate:bornDate toDate:nowDate options:0]; + if([date year] >0){ + return [NSString stringWithFormat:(@"%ld岁"), (long)[date year]]; + }else { + return @"0岁"; + } +} +- (CGFloat)toGetRectLab:(UILabel *)lable WithWidth:(CGFloat)widthFloat{ + return [lable.attributedText boundingRectWithSize:CGSizeMake(widthFloat, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil].size.height; +} +- (BOOL)hasSubString:(NSString *)subString{ + if (!subString) { + return NO; + } + return [self rangeOfString:subString].location!=NSNotFound; +} + + + +- (void)toSetAttributeWithLable:(UILabel *)lable Title:(NSString *)title TitleColor:(UIColor *)titleColor TitleFont:(UIFont *)titleFont + ContentText:(NSString *)contentText ContentColor:(UIColor *)ContentColor ContentFont:(UIFont *)ContentFont +{ + title = title ? title : @""; + contentText = contentText ? contentText : @""; + titleColor = titleColor ? titleColor : [UIColor blackColor]; + ContentColor = ContentColor ? ContentColor : [UIColor blackColor]; + titleFont = titleFont ? titleFont : SYSTEMFONT(14); + ContentFont = ContentFont ? ContentFont : SYSTEMFONT(14); + + NSString *muText = [NSString stringWithFormat:@"%@%@", title, contentText]; + NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:muText]; + [attrStr addAttribute:NSFontAttributeName value:titleFont range:NSMakeRange(0, title.length)]; + [attrStr addAttribute:NSFontAttributeName value:ContentFont range:NSMakeRange(attrStr.length - contentText.length, contentText.length)]; + [attrStr addAttribute:NSForegroundColorAttributeName value:titleColor range:NSMakeRange(0, title.length)]; + [attrStr addAttribute:NSForegroundColorAttributeName value:ContentColor range:NSMakeRange(attrStr.length - contentText.length, contentText.length)]; + lable.attributedText = attrStr; +} + ++ (NSAttributedString *)toGetStrWithHtmlStr:(NSString *)string{ + NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithData:[string dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute:[NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:nil error:nil]; + [attrStr addAttribute:NSFontAttributeName value:SYSTEMFONT(14) range:NSMakeRange(0, attrStr.length)]; + [attrStr addAttribute:NSForegroundColorAttributeName value:UIColorHex(0x666666) range:NSMakeRange(0, attrStr.length)]; + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle setLineSpacing:5]; + [attrStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, attrStr.length)]; + return attrStr; +} + ++ (NSMutableAttributedString *)setEquipmentAttributedString:(NSString *)str{ + str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@"
"]; + str = [NSString stringWithFormat:@"%@", WIDTH - 30, str]; + NSMutableAttributedString *htmlString =[[NSMutableAttributedString alloc] initWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute:[NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:NULL error:nil]; + [htmlString addAttributes:@{NSFontAttributeName:SYSTEMFONT(14)} range:NSMakeRange(0, htmlString.length)]; + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle setLineSpacing:5]; + [htmlString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [htmlString length])]; + return htmlString; +} + ++ (CGFloat )getHTMLHeightByStr:(NSString *)str{ + str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@"
"]; + str = [NSString stringWithFormat:@"%@", [UIScreen mainScreen].bounds.size.width, str]; + NSMutableAttributedString *htmlString =[[NSMutableAttributedString alloc] initWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute:[NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:NULL error:nil]; + [htmlString addAttributes:@{NSFontAttributeName:SYSTEMFONT(14)} range:NSMakeRange(0, htmlString.length)]; + //设置行间距 + NSMutableParagraphStyle *paragraphStyle1 = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle1 setLineSpacing:5]; + [htmlString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle1 range:NSMakeRange(0, [htmlString length])]; + CGSize textSize = [htmlString boundingRectWithSize:(CGSize){WIDTH - 30, CGFLOAT_MAX} options:NSStringDrawingUsesLineFragmentOrigin context:nil].size; + return textSize.height ; +} + ++ (NSString *)toGetTimeText:(NSString *)timeText{ + NSDate *date = [NSDate ih_dateWithString:timeText format:ih_default_date_format]; + NSDate *curDate = [NSDate date]; + if (date) { + if ([curDate ih_secondTimeAwayFromDate:date] < 1) { + return @"刚刚"; + } + if ([curDate ih_minuteTimeAwayFromDate:date] < 1) { + int second = [curDate ih_secondTimeAwayFromDate:date]; + return [NSString stringWithFormat:@"%d秒前", second]; + } + if ([curDate ih_hourTimeAwayFromDate:date] < 1) { + int minute = [curDate ih_minuteTimeAwayFromDate:date]; + return [NSString stringWithFormat:@"%d分钟前", minute]; + } + if ([date isToday]){ + return [NSString stringWithFormat:@"今天%02zd:%02zd", date.hour, date.minute]; + } + if ([date isYesterday]) { + return [NSString stringWithFormat:@"昨天%02zd:%02zd", date.hour, date.minute]; + } + return [NSString stringWithFormat:@"%02zd.%02zd.%02zd", date.year, date.month, date.day]; + } return @" "; +} + ++ (NSString *)UIImageToBase64Str:(UIImage *) image{ + NSData *data = UIImageJPEGRepresentation(image, 1.0f); + NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; + return encodedImageStr; +} + + ++ (NSString *)toGetTimeTextByEndOfTheMinute:(NSString *)time{ + NSDate *date = [NSDate ih_dateWithString:time format:ih_default_date_format]; + NSDateFormatter *format = [[NSDateFormatter alloc] init]; + [format setDateFormat:@"YYYY-MM-dd HH:mm"]; + NSString *currentTimeString = [format stringFromDate:date]; + return currentTimeString; +} + +- (NSString *)MD5_32BIT { + const char *cStr = [self UTF8String]; + unsigned char digest[CC_MD5_DIGEST_LENGTH]; + CC_MD5( cStr, (CC_LONG)self.length, digest ); + NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; + for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) + [result appendFormat:@"%02X", digest[i]]; + return result; +} +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+HXExtension.h b/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+HXExtension.h new file mode 100644 index 0000000..a94783e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+HXExtension.h @@ -0,0 +1,14 @@ +// +// UIButton+HXExtension.h +// HXPhotoPickerExample +// +// Created by Silence on 17/2/16. +// Copyright © 2017年 Silence. All rights reserved. +// + +#import + +@interface UIButton (HXExtension) +/** 扩大buuton点击范围 */ +- (void)hx_setEnlargeEdgeWithTop:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom left:(CGFloat)left; +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+HXExtension.m b/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+HXExtension.m new file mode 100644 index 0000000..15691a5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+HXExtension.m @@ -0,0 +1,53 @@ +// +// UIButton+HXExtension.m +// HXPhotoPickerExample +// +// Created by Silence on 17/2/16. +// Copyright © 2017年 Silence. All rights reserved. +// + +#import "UIButton+HXExtension.h" +#import + +@implementation UIButton (HXExtension) + +static char topNameKey; +static char rightNameKey; +static char bottomNameKey; +static char leftNameKey; + +- (void)hx_setEnlargeEdgeWithTop:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom left:(CGFloat)left +{ + objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:top], OBJC_ASSOCIATION_COPY_NONATOMIC); + objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:right], OBJC_ASSOCIATION_COPY_NONATOMIC); + objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:bottom], OBJC_ASSOCIATION_COPY_NONATOMIC); + objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:left], OBJC_ASSOCIATION_COPY_NONATOMIC); +} + + +- (CGRect)enlargedRect{ + NSNumber* topEdge = objc_getAssociatedObject(self, &topNameKey); + NSNumber* rightEdge = objc_getAssociatedObject(self, &rightNameKey); + NSNumber* bottomEdge = objc_getAssociatedObject(self, &bottomNameKey); + NSNumber* leftEdge = objc_getAssociatedObject(self, &leftNameKey); + + if (topEdge && rightEdge && bottomEdge && leftEdge){ + return CGRectMake(self.bounds.origin.x - leftEdge.floatValue, + self.bounds.origin.y - topEdge.floatValue, + self.bounds.size.width + leftEdge.floatValue + rightEdge.floatValue, + self.bounds.size.height + topEdge.floatValue + bottomEdge.floatValue); + } else{ + return self.bounds; + } +} + +- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{ + CGRect rect = [self enlargedRect]; + + if (CGRectEqualToRect(rect, self.bounds)){ + return [super pointInside:point withEvent:event]; + }else{ + return CGRectContainsPoint(rect, point); + } +} +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+NYS.h b/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+NYS.h new file mode 100644 index 0000000..3cc7d33 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+NYS.h @@ -0,0 +1,41 @@ +// +// UIButton+NYS.h +// NewAnju_IOS +// +// Created by 倪永胜 on 2020/5/26. +// Copyright © 2020 NiYongsheng. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + +typedef NS_ENUM(NSInteger, DIYStyle) { + DIYStyleDefault = 0, // 左图右文,整体居中,默认状态 + DIYStyleImgLeft = 1, // 左图右文,整体居中,设置间隙 + DIYStyleImgRight = 2, // 左文右图,整体居中,设置间隙 + DIYStyleImgTop = 3, // 上图下文,整体居中,设置间隙 + DIYStyleImgBottom = 4, // 下图上文,整体居中,设置间隙 +}; + + + +@interface UIButton (NYS) +- (void)enlargeTouchEdge:(UIEdgeInsets)edge; + +/** style:图文样式 padding:图文间隙 */ +- (void)setDIYStyle:(DIYStyle)style padding:(CGFloat)padding; +- (void)DIYStyle:(DIYStyle)style padding:(CGFloat)padding; + +/** style:图文样式 padding:图文间隙 size:设置图片的宽高 */ +- (void)setDIYStyle:(DIYStyle)style padding:(CGFloat)padding imageViewSize:(CGSize)size; + +- (void)DIYStyle:(DIYStyle)style padding:(CGFloat)padding titleWidth:(CGFloat)titleWidth; + +- (void)setDIYStyle:(DIYStyle)style padding:(CGFloat)padding imageViewSize:(CGSize)size titleWidth:(CGFloat)titleWidth; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+NYS.m b/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+NYS.m new file mode 100644 index 0000000..51b8e48 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIButton/UIButton+NYS.m @@ -0,0 +1,309 @@ +// +// UIButton+NYS.m +// NewAnju_IOS +// +// Created by 倪永胜 on 2020/5/26. +// Copyright © 2020 NiYongsheng. All rights reserved. +// + +#import "UIButton+NYS.h" +#import + +@interface UIButton () + +@property(nonatomic,strong)UILabel *badgeLabel; + +@end + +@implementation UIButton (NYS) + +static char edgeKey; + +- (NSString *)enlargeEdge { + return objc_getAssociatedObject(self, &edgeKey); +} + +- (void)enlargeTouchEdge:(UIEdgeInsets)edge { + NSString *edgeStr = NSStringFromUIEdgeInsets(edge); + objc_setAssociatedObject(self, &edgeKey, edgeStr, OBJC_ASSOCIATION_COPY_NONATOMIC); +} + +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { + UIEdgeInsets changeInsets = UIEdgeInsetsFromString([self enlargeEdge]); + CGFloat x = self.bounds.origin.x + changeInsets.left; + CGFloat y = self.bounds.origin.y + changeInsets.top; + CGFloat width = self.bounds.size.width - changeInsets.left - changeInsets.right; + CGFloat height = self.bounds.size.height - changeInsets.top - changeInsets.bottom; + CGRect rect = CGRectMake(x, y, width, height); + + if (CGRectEqualToRect(rect, self.bounds)) { + return [super hitTest:point withEvent:event]; + } + return CGRectContainsPoint(rect, point) ? self : nil; +} + + +- (void)setDIYStyle:(DIYStyle)style padding:(CGFloat)padding imageViewSize:(CGSize)size titleWidth:(CGFloat)titleWidth +{ + if (self.imageView.image != nil && self.titleLabel.text != nil) + { + // 先还原 + self.titleEdgeInsets = UIEdgeInsetsZero; + self.imageEdgeInsets = UIEdgeInsetsZero; + [self setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; + + self.imageView.width=size.width; + self.imageView.height=size.height; + // 上图下文或者上文下图情况重新计算高 + CGFloat imageX = self.imageView.mj_x; + CGFloat titleX = self.titleLabel.mj_x; + CGFloat imageY = self.imageView.mj_y; + CGFloat titleY = self.titleLabel.mj_y; + CGFloat imageW = self.imageView.width; + CGFloat titleW = titleWidth; + CGFloat imageH = self.imageView.height; + CGFloat titleH = self.titleLabel.height; + CGFloat totalH = imageH + titleH + padding; + CGFloat selfH = self.height; + CGFloat selfW = self.width; + + switch (style) + { + case DIYStyleImgLeft: + self.titleEdgeInsets = UIEdgeInsetsMake(0, padding/2.0, 0, -padding/2.0); + self.imageEdgeInsets = UIEdgeInsetsMake(0, -padding/2.0, 0, padding/2.0); + break; + + case DIYStyleImgRight: + self.titleEdgeInsets = UIEdgeInsetsMake(0, -(imageW + padding/2.0), 0, (imageW + padding/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(0, (titleW + padding/2.0), 0, -(titleW + padding/2.0)); + break; + + case DIYStyleImgTop: + self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + imageH + padding - titleY), + -(titleX + titleW/2.0 - selfW/2.0), + -((selfH - totalH)/2.0 + imageH + padding - titleY), + (titleX + titleW/2.0 - selfW/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - imageY), + (selfW/2.0 - imageX - imageW/2.0), + -((selfH - totalH)/2.0 - imageY), + -(selfW/2.0 - imageX - imageW/2.0)); + break; + + case DIYStyleImgBottom: + NSLog(@"%f",titleX); + self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - titleY), + -(titleX + titleW/2.0 - selfW/2.0), + -((selfH - totalH)/2.0 - titleY), + (titleX + titleW/2.0 - selfW/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + titleH + padding - imageY), + (selfW/2.0 - imageX - imageW/2.0), + -((selfH - totalH)/2.0 + titleH + padding - imageY), + -(selfW/2.0 - imageX - imageW/2.0)); + break; + + default: + break; + } + } +} +//设置图片的宽高 +- (void)setDIYStyle:(DIYStyle)style padding:(CGFloat)padding imageViewSize:(CGSize)size +{ + if (self.imageView.image != nil && self.titleLabel.text != nil) + { + // 先还原 + self.titleEdgeInsets = UIEdgeInsetsZero; + self.imageEdgeInsets = UIEdgeInsetsZero; + [self setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; + self.contentMode = UIViewContentModeCenter; + self.imageView.width=size.width; + self.imageView.height=size.height; + // 上图下文或者上文下图情况重新计算高 + CGFloat imageX = self.imageView.mj_x; + CGFloat titleX = self.titleLabel.mj_x; + CGFloat imageY = self.imageView.mj_y; + CGFloat titleY = self.titleLabel.mj_y; + CGFloat imageW = self.imageView.width; + CGFloat titleW = self.titleLabel.width; + CGFloat imageH = self.imageView.height; + CGFloat titleH = self.titleLabel.height; + CGFloat totalH = imageH + titleH + padding; + CGFloat selfH = self.height; + CGFloat selfW = self.width; + + switch (style) + { + case DIYStyleImgLeft: + self.titleEdgeInsets = UIEdgeInsetsMake(0, padding/2.0, 0, -padding/2.0); + self.imageEdgeInsets = UIEdgeInsetsMake(0, -padding/2.0, 0, padding/2.0); + break; + + case DIYStyleImgRight: + self.titleEdgeInsets = UIEdgeInsetsMake(0, -(imageW + padding/2.0), 0, (imageW + padding/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(0, (titleW + padding/2.0), 0, -(titleW + padding/2.0)); + break; + + case DIYStyleImgTop: + self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + imageH + padding - titleY), + -2*(titleX + titleW/2.0 - selfW/2.0), + -((selfH - totalH)/2.0 + imageH + padding - titleY), + 0); + self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - imageY), + (selfW/2.0 - imageX - imageW/2.0) + kRealValue(6), + -((selfH - totalH)/2.0 - imageY), + -(selfW/2.0 - imageX - imageW/2.0)); + break; + + case DIYStyleImgBottom: + NSLog(@"%f",titleX); + self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - titleY), + -(titleX + titleW/2.0 - selfW/2.0), + -((selfH - totalH)/2.0 - titleY), + (titleX + titleW/2.0 - selfW/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + titleH + padding - imageY), + (selfW/2.0 - imageX - imageW/2.0), + -((selfH - totalH)/2.0 + titleH + padding - imageY), + -(selfW/2.0 - imageX - imageW/2.0)); + break; + + default: + break; + } + } + +} + +- (void)setDIYStyle:(DIYStyle)style padding:(CGFloat)padding +{ + if (self.imageView.image != nil && self.titleLabel.text != nil) + { + // 先还原 + self.titleEdgeInsets = UIEdgeInsetsZero; + self.imageEdgeInsets = UIEdgeInsetsZero; + [self setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; + + // 上图下文或者上文下图情况重新计算高 + CGFloat imageX = self.imageView.mj_x; + CGFloat titleX = self.titleLabel.mj_x; + CGFloat imageY = self.imageView.mj_y; + CGFloat titleY = self.titleLabel.mj_y; + CGFloat imageW = self.imageView.width; + CGFloat titleW = self.titleLabel.width; + CGFloat imageH = self.imageView.height; + CGFloat titleH = self.titleLabel.height; + CGFloat totalH = imageH + titleH + padding; + CGFloat selfH = self.height; + CGFloat selfW = self.width; + + switch (style) + { + case DIYStyleImgLeft: + self.titleEdgeInsets = UIEdgeInsetsMake(0, padding/2.0, 0, -padding/2.0); + self.imageEdgeInsets = UIEdgeInsetsMake(0, -padding/2.0, 0, padding/2.0); + break; + + case DIYStyleImgRight: + self.titleEdgeInsets = UIEdgeInsetsMake(0, -(imageW + padding/2.0), 0, (imageW + padding/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(0, (titleW + padding/2.0), 0, -(titleW + padding/2.0)); + break; + + case DIYStyleImgTop: + self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + imageH + padding - titleY), + -2*(titleX + titleW/2.0 - selfW/2.0), + -((selfH - totalH)/2.0 + imageH + padding - titleY), + 0); + self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - imageY), + (selfW/2.0 - imageX - imageW/2.0), + -((selfH - totalH)/2.0 - imageY), + -(selfW/2.0 - imageX - imageW/2.0)); + break; + + case DIYStyleImgBottom: + NSLog(@"%f",titleX); + self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - titleY), + -(titleX + titleW/2.0 - selfW/2.0), + -((selfH - totalH)/2.0 - titleY), + (titleX + titleW/2.0 - selfW/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + titleH + padding - imageY), + (selfW/2.0 - imageX - imageW/2.0), + -((selfH - totalH)/2.0 + titleH + padding - imageY), + -(selfW/2.0 - imageX - imageW/2.0)); + break; + + default: + break; + } + } +} + + +- (void)DIYStyle:(DIYStyle)style padding:(CGFloat)padding { + [self setDIYStyle:style padding:padding]; +} + +- (void)DIYStyle:(DIYStyle)style padding:(CGFloat)padding titleWidth:(CGFloat)titleWidth +{ + if (self.imageView.image != nil && self.titleLabel.text != nil) + { + // 先还原 + self.titleEdgeInsets = UIEdgeInsetsZero; + self.imageEdgeInsets = UIEdgeInsetsZero; + [self setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; + self.contentMode=UIViewContentModeCenter; + // 上图下文或者上文下图情况重新计算高 + CGFloat imageX = self.imageView.mj_x; + CGFloat titleX = self.titleLabel.mj_x; + CGFloat imageY = self.imageView.mj_y; + CGFloat titleY = self.titleLabel.mj_y; + CGFloat imageW = self.imageView.width; + CGFloat titleW = titleWidth; + CGFloat imageH = self.imageView.height; + CGFloat titleH = self.titleLabel.height; + CGFloat totalH = imageH + titleH + padding; + CGFloat selfH = self.height; + CGFloat selfW = self.width; + + switch (style) + { + case DIYStyleImgLeft: + self.titleEdgeInsets = UIEdgeInsetsMake(0, padding/2.0, 0, -padding/2.0); + self.imageEdgeInsets = UIEdgeInsetsMake(0, -padding/2.0, 0, padding/2.0); + break; + + case DIYStyleImgRight: + self.titleEdgeInsets = UIEdgeInsetsMake(0, -(imageW + padding/2.0), 0, (imageW + padding/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(0, (titleW + padding/2.0), 0, -(titleW + padding/2.0)); + break; + + case DIYStyleImgTop: + self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + imageH + padding - titleY), + -(titleX + titleW/2.0 - selfW/2.0), + -((selfH - totalH)/2.0 + imageH + padding - titleY), + (titleX + titleW/2.0 - selfW/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - imageY), + (selfW/2.0 - imageX - imageW/2.0), + -((selfH - totalH)/2.0 - imageY), + -(selfW/2.0 - imageX - imageW/2.0)); + break; + + case DIYStyleImgBottom: + NSLog(@"%f",titleX); + self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - titleY), + -(titleX + titleW/2.0 - selfW/2.0), + -((selfH - totalH)/2.0 - titleY), + (titleX + titleW/2.0 - selfW/2.0)); + self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + titleH + padding - imageY), + (selfW/2.0 - imageX - imageW/2.0), + -((selfH - totalH)/2.0 + titleH + padding - imageY), + -(selfW/2.0 - imageX - imageW/2.0)); + break; + + default: + break; + } + } +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/UIDevice/UIDevice+model.h b/XinjiangProject/XinjiangProject/Categorys/UIDevice/UIDevice+model.h new file mode 100644 index 0000000..e481868 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIDevice/UIDevice+model.h @@ -0,0 +1,18 @@ +// +// UIDevice+model.h +// EscortProject +// +// Created by Apple on 2024/3/29. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UIDevice (model) + +- (NSString *)getCurrentDeviceModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/UIDevice/UIDevice+model.m b/XinjiangProject/XinjiangProject/Categorys/UIDevice/UIDevice+model.m new file mode 100644 index 0000000..487561f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIDevice/UIDevice+model.m @@ -0,0 +1,115 @@ +// +// UIDevice+model.m +// EscortProject +// +// Created by Apple on 2024/3/29. +// + +#import "UIDevice+model.h" +#import + +//有新的产品上线,我没有更新,可以自行去查阅https://www.theiphonewiki.com/wiki/Models +@implementation UIDevice (model) + +- (NSString *)getCurrentDeviceModel{ + struct utsname systemInfo; + uname(&systemInfo); + + NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding]; + + +if ([deviceModel isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; +if ([deviceModel isEqualToString:@"iPhone3,2"]) return @"iPhone 4"; +if ([deviceModel isEqualToString:@"iPhone3,3"]) return @"iPhone 4"; +if ([deviceModel isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; +if ([deviceModel isEqualToString:@"iPhone5,1"]) return @"iPhone 5"; +if ([deviceModel isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)"; +if ([deviceModel isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)"; +if ([deviceModel isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (GSM+CDMA)"; +if ([deviceModel isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)"; +if ([deviceModel isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (GSM+CDMA)"; +if ([deviceModel isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus"; +if ([deviceModel isEqualToString:@"iPhone7,2"]) return @"iPhone 6"; +if ([deviceModel isEqualToString:@"iPhone8,1"]) return @"iPhone 6s"; +if ([deviceModel isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus"; +if ([deviceModel isEqualToString:@"iPhone8,4"]) return @"iPhone SE"; +// 日行两款手机型号均为日本独占,可能使用索尼FeliCa支付方案而不是苹果支付 +if ([deviceModel isEqualToString:@"iPhone9,1"]) return @"iPhone 7"; +if ([deviceModel isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus"; +if ([deviceModel isEqualToString:@"iPhone9,3"]) return @"iPhone 7"; +if ([deviceModel isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus"; +if ([deviceModel isEqualToString:@"iPhone10,1"]) return @"iPhone_8"; +if ([deviceModel isEqualToString:@"iPhone10,4"]) return @"iPhone_8"; +if ([deviceModel isEqualToString:@"iPhone10,2"]) return @"iPhone_8_Plus"; +if ([deviceModel isEqualToString:@"iPhone10,5"]) return @"iPhone_8_Plus"; +if ([deviceModel isEqualToString:@"iPhone10,3"]) return @"iPhone X"; +if ([deviceModel isEqualToString:@"iPhone10,6"]) return @"iPhone X"; +if ([deviceModel isEqualToString:@"iPhone11,8"]) return @"iPhone XR"; +if ([deviceModel isEqualToString:@"iPhone11,2"]) return @"iPhone XS"; +if ([deviceModel isEqualToString:@"iPhone11,6"]) return @"iPhone XS Max"; +if ([deviceModel isEqualToString:@"iPhone11,4"]) return @"iPhone XS Max"; +if ([deviceModel isEqualToString:@"iPhone12,1"]) return @"iPhone 11"; +if ([deviceModel isEqualToString:@"iPhone12,3"]) return @"iPhone 11 Pro"; +if ([deviceModel isEqualToString:@"iPhone12,5"]) return @"iPhone 11 Pro Max"; +if ([deviceModel isEqualToString:@"iPhone12,8"]) return @"iPhone SE2"; +if ([deviceModel isEqualToString:@"iPhone13,1"]) return @"iPhone 12 mini"; +if ([deviceModel isEqualToString:@"iPhone13,2"]) return @"iPhone 12"; +if ([deviceModel isEqualToString:@"iPhone13,3"]) return @"iPhone 12 Pro"; +if ([deviceModel isEqualToString:@"iPhone13,4"]) return @"iPhone 12 Pro Max"; +if ([deviceModel isEqualToString:@"iPhone14,4"]) return @"iPhone 13 mini"; +if ([deviceModel isEqualToString:@"iPhone14,5"]) return @"iPhone 13"; +if ([deviceModel isEqualToString:@"iPhone14,2"]) return @"iPhone 13 Pro"; +if ([deviceModel isEqualToString:@"iPhone14,3"]) return @"iPhone 13 Pro Max"; +if ([deviceModel isEqualToString:@"iPhone14,7"]) return @"iPhone 14"; +if ([deviceModel isEqualToString:@"iPhone14,8"]) return @"iPhone 14 Plus"; +if ([deviceModel isEqualToString:@"iPhone15,2"]) return @"iPhone 14 Pro"; +if ([deviceModel isEqualToString:@"iPhone15,3"]) return @"iPhone 14 Pro Max"; +if ([deviceModel isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G"; +if ([deviceModel isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G"; +if ([deviceModel isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G"; +if ([deviceModel isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G"; +if ([deviceModel isEqualToString:@"iPod5,1"]) return @"iPod Touch (5 Gen)"; +if ([deviceModel isEqualToString:@"iPad1,1"]) return @"iPad"; +if ([deviceModel isEqualToString:@"iPad1,2"]) return @"iPad 3G"; +if ([deviceModel isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)"; +if ([deviceModel isEqualToString:@"iPad2,2"]) return @"iPad 2"; +if ([deviceModel isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)"; +if ([deviceModel isEqualToString:@"iPad2,4"]) return @"iPad 2"; +if ([deviceModel isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)"; +if ([deviceModel isEqualToString:@"iPad2,6"]) return @"iPad Mini"; +if ([deviceModel isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)"; +if ([deviceModel isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)"; +if ([deviceModel isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)"; +if ([deviceModel isEqualToString:@"iPad3,3"]) return @"iPad 3"; +if ([deviceModel isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)"; +if ([deviceModel isEqualToString:@"iPad3,5"]) return @"iPad 4"; +if ([deviceModel isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)"; +if ([deviceModel isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)"; +if ([deviceModel isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)"; +if ([deviceModel isEqualToString:@"iPad4,4"]) return @"iPad Mini 2 (WiFi)"; +if ([deviceModel isEqualToString:@"iPad4,5"]) return @"iPad Mini 2 (Cellular)"; +if ([deviceModel isEqualToString:@"iPad4,6"]) return @"iPad Mini 2"; +if ([deviceModel isEqualToString:@"iPad4,7"]) return @"iPad Mini 3"; +if ([deviceModel isEqualToString:@"iPad4,8"]) return @"iPad Mini 3"; +if ([deviceModel isEqualToString:@"iPad4,9"]) return @"iPad Mini 3"; +if ([deviceModel isEqualToString:@"iPad5,1"]) return @"iPad Mini 4 (WiFi)"; +if ([deviceModel isEqualToString:@"iPad5,2"]) return @"iPad Mini 4 (LTE)"; +if ([deviceModel isEqualToString:@"iPad5,3"]) return @"iPad Air 2"; +if ([deviceModel isEqualToString:@"iPad5,4"]) return @"iPad Air 2"; +if ([deviceModel isEqualToString:@"iPad6,3"]) return @"iPad Pro 9.7"; +if ([deviceModel isEqualToString:@"iPad6,4"]) return @"iPad Pro 9.7"; +if ([deviceModel isEqualToString:@"iPad6,7"]) return @"iPad Pro 12.9"; +if ([deviceModel isEqualToString:@"iPad6,8"]) return @"iPad Pro 12.9"; + +if ([deviceModel isEqualToString:@"AppleTV2,1"]) return @"Apple TV 2"; +if ([deviceModel isEqualToString:@"AppleTV3,1"]) return @"Apple TV 3"; +if ([deviceModel isEqualToString:@"AppleTV3,2"]) return @"Apple TV 3"; +if ([deviceModel isEqualToString:@"AppleTV5,3"]) return @"Apple TV 4"; + +if ([deviceModel isEqualToString:@"i386"]) return @"Simulator"; +if ([deviceModel isEqualToString:@"x86_64"]) return @"Simulator"; + return deviceModel; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/UIImage+RoundedCorner.h b/XinjiangProject/XinjiangProject/Categorys/UIImage+RoundedCorner.h new file mode 100644 index 0000000..bb23801 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIImage+RoundedCorner.h @@ -0,0 +1,16 @@ +// +// UIImage+RoundedCorner.h +// EscortProject +// +// Created by Apple on 2024/4/24. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UIImage (RoundedCorner) +- (UIImage *)roundCornersWithRadius:(NSInteger)radius; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/UIImage+RoundedCorner.m b/XinjiangProject/XinjiangProject/Categorys/UIImage+RoundedCorner.m new file mode 100644 index 0000000..ade1a26 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIImage+RoundedCorner.m @@ -0,0 +1,34 @@ +// +// UIImage+RoundedCorner.m +// EscortProject +// +// Created by Apple on 2024/4/24. +// + +#import "UIImage+RoundedCorner.h" + +@implementation UIImage (RoundedCorner) + +- (UIImage *)roundCornersWithRadius:(NSInteger)radius { + UIImage *inputImage = self; + CGImageRef image = inputImage.CGImage; + + CGRect imageRect = CGRectMake(0, 0, inputImage.size.width, inputImage.size.height); + UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:imageRect cornerRadius:radius]; + + CGContextRef context = CGBitmapContextCreate(NULL, inputImage.size.width, inputImage.size.height, 8, 0, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast); + CGContextBeginPath(context); + CGContextAddPath(context, path.CGPath); + CGContextClip(context); + + CGContextDrawImage(context, imageRect, image); + CGImageRef ref = CGBitmapContextCreateImage(context); + UIImage *outputImage = [UIImage imageWithCGImage:ref]; + + CGContextRelease(context); + CGImageRelease(ref); + + return outputImage; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+ChangeLineSpaceAndWordSpace.h b/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+ChangeLineSpaceAndWordSpace.h new file mode 100644 index 0000000..dcf3821 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+ChangeLineSpaceAndWordSpace.h @@ -0,0 +1,31 @@ +// +// UILabel+ChangeLineSpaceAndWordSpace.h +// healthQuestion +// +// Created by 仁康信息 on 2022/10/11. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UILabel (ChangeLineSpaceAndWordSpace) + +/** + * 改变行间距 + */ ++ (void)changeLineSpaceForLabel:(UILabel *)label WithSpace:(float)space; + +/** + * 改变字间距 + */ ++ (void)changeWordSpaceForLabel:(UILabel *)label WithSpace:(float)space; + +/** + * 改变行间距和字间距 + */ ++ (void)changeSpaceForLabel:(UILabel *)label withLineSpace:(float)lineSpace WordSpace:(float)wordSpace; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+ChangeLineSpaceAndWordSpace.m b/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+ChangeLineSpaceAndWordSpace.m new file mode 100644 index 0000000..b19a5d1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+ChangeLineSpaceAndWordSpace.m @@ -0,0 +1,42 @@ +// +// UILabel+ChangeLineSpaceAndWordSpace.m +// healthQuestion +// +// Created by 仁康信息 on 2022/10/11. +// + +#import "UILabel+ChangeLineSpaceAndWordSpace.h" + + +@implementation UILabel (ChangeLineSpaceAndWordSpace) + ++ (void)changeLineSpaceForLabel:(UILabel *)label WithSpace:(float)space { + NSString *labelText = label.text; + NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText]; + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle setLineSpacing:space]; + [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])]; + label.attributedText = attributedString; + [label sizeToFit]; +} + ++ (void)changeWordSpaceForLabel:(UILabel *)label WithSpace:(float)space { + NSString *labelText = label.text; + NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText attributes:@{NSKernAttributeName:@(space)}]; + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])]; + label.attributedText = attributedString; + [label sizeToFit]; +} + ++ (void)changeSpaceForLabel:(UILabel *)label withLineSpace:(float)lineSpace WordSpace:(float)wordSpace { + NSString *labelText = label.text; + NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText attributes:@{NSKernAttributeName:@(wordSpace)}]; + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle setLineSpacing:lineSpace]; + [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])]; + label.attributedText = attributedString; + [label sizeToFit]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+Extension.h b/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+Extension.h new file mode 100644 index 0000000..54087ad --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+Extension.h @@ -0,0 +1,16 @@ +// +// UILabel+Extension.h +// WDYAdjustFontSize +// +// Created by wdyzmx on 2022/1/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UILabel (Extension) +@property (nonatomic) NSString *verticalText; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+Extension.m b/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+Extension.m new file mode 100644 index 0000000..4a87362 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UILabel/UILabel+Extension.m @@ -0,0 +1,62 @@ +// +// UILabel+Extension.m +// WDYAdjustFontSize +// +// Created by wdyzmx on 2022/1/19. +// + +#import "UILabel+Extension.h" +#import "SwapMethodManager.h" +#import + +@implementation UILabel (Extension) + ++ (void)load { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + [SwapMethodManager swapMethodInClass:[self class] originalMethod:@selector(didMoveToSuperview) swizzledMethod:@selector(hooked_didMoveToSuperview)]; + + [SwapMethodManager swapMethodInClass:[self class] originalMethod:@selector(removeFromSuperview) swizzledMethod:@selector(hooked_removeFromSuperview)]; + + [SwapMethodManager swapMethodInClass:[self class] originalMethod:@selector(setAttributedText:) swizzledMethod:@selector(hooked_setAttributedText:)]; + }); +} + +- (void)hooked_didMoveToSuperview { + [self hooked_didMoveToSuperview]; + // 添加控件 +} + +- (void)hooked_removeFromSuperview { + [self hooked_removeFromSuperview]; + // 删除控件 +} + +- (void)hooked_setAttributedText:(NSAttributedString *)attributedText { + [self hooked_setAttributedText:attributedText]; + // +} + + + +- (NSString *)verticalText +{ +// 利用runtime 添加属性- (void)setVerticalText:(NSString *)verticalText +return objc_getAssociatedObject(self, @selector(verticalText)); + +} + + +- (void)setVerticalText:(NSString *)verticalText +{ +objc_setAssociatedObject(self, &verticalText, verticalText, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +NSMutableString *mutableString = [[NSMutableString alloc] initWithString:verticalText]; +NSInteger count = mutableString.length; +for (int i = 1; i < count; i++) { +[mutableString insertString:@"\n" atIndex:i * 2 - 1]; +} +self.text = mutableString; +self.numberOfLines = 0; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Categorys/UIView/UIView+FK.h b/XinjiangProject/XinjiangProject/Categorys/UIView/UIView+FK.h new file mode 100755 index 0000000..1093f44 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIView/UIView+FK.h @@ -0,0 +1,25 @@ +// +// UIView+FK.h +// Doctor +// +// Created by 张正梅 on 2019/5/30. +// Copyright © 2019 com.longmaster. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UIView (FK) + +- (UIView *)clipCornerWithView:(UIView *)originView + andTopLeft:(BOOL)topLeft + andTopRight:(BOOL)topRight + andBottomLeft:(BOOL)bottomLeft + andBottomRight:(BOOL)bottomRight; +- (void)MaskLayerByRedius:(CGFloat)cornerRedius ByColor:(UIColor *)color ByWidth:(CGFloat)width; +- (void)MaskToBounds:(CGFloat)cornerRedius; +- (UIViewController *)viewController; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Categorys/UIView/UIView+FK.m b/XinjiangProject/XinjiangProject/Categorys/UIView/UIView+FK.m new file mode 100755 index 0000000..d46e18b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Categorys/UIView/UIView+FK.m @@ -0,0 +1,55 @@ +// +// UIView+FK.m +// Doctor +// +// Created by 张正梅 on 2019/5/30. +// Copyright © 2019 com.longmaster. All rights reserved. +// + +#import "UIView+FK.h" + +@implementation UIView (FK) + +- (UIView *)clipCornerWithView:(UIView *)originView + andTopLeft:(BOOL)topLeft + andTopRight:(BOOL)topRight + andBottomLeft:(BOOL)bottomLeft + andBottomRight:(BOOL)bottomRight +{ + UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:originView.bounds + byRoundingCorners:(topLeft==YES ? UIRectCornerTopLeft : 0) | + (topRight==YES ? UIRectCornerTopRight : 0) | + (bottomLeft==YES ? UIRectCornerBottomLeft : 0) | + (bottomRight==YES ? UIRectCornerBottomRight : 0) + cornerRadii:CGSizeMake(20, 20)]; + // 创建遮罩层 + CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; + maskLayer.frame = originView.bounds; + maskLayer.path = maskPath.CGPath; // 轨迹 + originView.layer.mask = maskLayer; + + return originView; +} + +- (void)MaskLayerByRedius:(CGFloat)cornerRedius ByColor:(UIColor *)color ByWidth:(CGFloat)width{ + [self MaskToBounds:cornerRedius]; + self.layer.borderColor = color.CGColor; + self.layer.borderWidth = width; +} +- (void)MaskToBounds:(CGFloat)cornerRedius{ + self.layer.masksToBounds = YES; + self.layer.cornerRadius = cornerRedius; +} + +- (UIViewController *)viewController{ + UIResponder *next = [self nextResponder]; + do { + if ([next isKindOfClass:[UIViewController class]]) { + return (UIViewController *)next; + }else{ + next = [next nextResponder]; + } + } while (next != nil); + return nil; +} +@end diff --git a/XinjiangProject/XinjiangProject/Define/FontAndColorMacros.h b/XinjiangProject/XinjiangProject/Define/FontAndColorMacros.h new file mode 100755 index 0000000..469c8dc --- /dev/null +++ b/XinjiangProject/XinjiangProject/Define/FontAndColorMacros.h @@ -0,0 +1,58 @@ +// +// FontAndColorMacros.h +// idleBuy +// +// Created by ios on 2018/5/28. +// Copyright © 2018年 ios. All rights reserved. +// + +#ifndef FontAndColorMacros_h +#define FontAndColorMacros_h + +#pragma mark - 间距区 + +//默认间距 +#define KNormalSpace 12.0f + +#pragma mark - 颜色区 +//主题色 导航栏颜色 +//#define CNavBgColor RGBA() +#define CNavBgColor [UIColor colorWithHexString:@"00AE68"] + + +//#define CNavBgColor [Ulor colorWithHexString:@"ffffff"] +#define CNavBgFontColor [UIColor colorWithHexString:@"ffffff"] + +//默认页面背景色 +#define CViewBgColor [UIColor colorWithHexString:@"#F3F4F6"] + +//分割线颜色 +#define CLineColor [UIColor colorWithHexString:@"ededed"] + +//次级字色 +#define CFontColor1 [UIColor colorWithHexString:@"1f1f1f"] + +//再次级字色 +#define CFontColor2 [UIColor colorWithHexString:@"5c5c5c"] +#define kRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0] + +#pragma mark - 第三方字体区 + + + +//十进制颜色转换 +#define QMRGBA(r,g,b,a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:a] +//十六进制颜色转换(0xFFFFFF) +#define QMHEXRGB(hex) [UIColor colorWithRed:((float)((hex & 0xFF0000) >> 16))/255.0 green:((float)((hex & 0xFF00) >> 8))/255.0 blue:((float)(hex & 0xFF))/255.0 alpha:1.0] + +#define QMHEXSRGB(hexStr) [UIColor colorWithRed:strtoul([[hexStr substringWithRange:NSMakeRange(hexStr.length - 6, 2)] UTF8String],0,16)/255.0 green:strtoul([[hexStr substringWithRange:NSMakeRange(hexStr.length - 4, 2)] UTF8String],0,16)/255.0 blue:strtoul([[hexStr substringWithRange:NSMakeRange(hexStr.length - 2, 2)] UTF8String],0,16)/255.0 alpha:1.0] + +#ifndef kScale6 + +#define kScale6 (UIScreen.mainScreen.bounds.size.width/375.0) + +#endif + +#define FFont1 [UIFont systemFontOfSize:12.0f] + +#endif /* FontAndColorMacros_h */ diff --git a/XinjiangProject/XinjiangProject/Define/StatusMacros.h b/XinjiangProject/XinjiangProject/Define/StatusMacros.h new file mode 100755 index 0000000..1fffed9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Define/StatusMacros.h @@ -0,0 +1,93 @@ +// +// StatusMacros.h +// idleBuy +// +// Created by ios on 2018/5/28. +// Copyright © 2018年 ios. All rights reserved. +// + +#ifndef StatusMacros_h +#define StatusMacros_h +#pragma mark - ——————— 用户相关 ———————— +//登录状态改变通知 +#define KNotificationLoginStateChange @"loginStateChange" +//登录IM状态 +#define KNotificationLoginIMResult @"loginIMResult" + +//切换tabar +#define KNotificSelectHomePageTabbar @"SlectHomePageTabBar" + +#define KNotificSelectSoSTabbar @"SlectSoSTabBar" + +#define KNotificSelectPhysicalTabbar @"SlectPhysicalTabBar" + +#define KNotificSelectFileTabbar @"SlectFileTabBar" + +//同意协议 + +//切换字体 +#define KNotificChangeFontSize @"changeFontSize" +//经纬度 +#define USERDEFAULLONG @"USERDEFAULLONG" +#define USERDEFAULLATITUDE @"USERDEFAULLATITUDE" + + +//自动登录成功 +#define KNotificationAutoLoginSuccess @"KNotificationAutoLoginSuccess" + + +//用户信息缓存 名称 +#define KUserCacheName @"KUserCacheName" + + +//用户model缓存 +#define KUserModelCache @"KUserModelCache" + +//是否第一次进入 选用 +#define KUserFirstStar @"FirstStar" + +//健康信息token +#define KHEALTHTOKEN @"HEALTHTOKEN" + +#define User_ID [HQCommonUtils loginID] +#define User_Token [HQCommonUtils loginToken] +#pragma mark - ——————— 网络状态相关 ———————— + +//网络状态变化 +#define KNotificationNetWorkStateChange @"KNotificationNetWorkStateChange" + +#define KNotificAmapAgreeProtoocl @"AMAPDELEGATE" + +//取消支付 + +#pragma mark: 网络前缀 +#define ResourceAddress [NSString stringWithFormat:@"%@/file/show/",Http] + +//生产环境 +//#define Http @"https://api.cqygjk.com"// +//#define H5Http @"https://console.cqygjk.com/"/// +//#define H5DevHost @"cqyt.out.yg.icdat.cn"// +//#define IntervenH5 @"https://console.cqygjk.com" + +//#define Http UserDefaultObjectForKey(@"HTTPS")// +//#define H5DevHost UserDefaultObjectForKey(@"H5DevHost")// +//#define IntervenH5 UserDefaultObjectForKey(@"IntervenH5") + +//测试环境地址 +//四合一 +//正文斌 @"http://192.168.1.28"。青海项目:https://quarry-api.yg.icdat.cn 四合一://https://starry.test.icdat.cn + +//#define Http @"https://starry.test.icdat.cn" +//#define H5DevHost @"starry.test.icdat.cn"// +//#define IntervenH5 @"https://starry.out.icdat.cn" + +//开发环境地址 +#define Http @"http://cqyt.dev.yg.dt.io"// +#define H5DevHost @"cqyt.dev.yg.dt.io"// +#define IntervenH5 @"http://cms.dev.yg.dt.io" +#define BASEURL @"https://yyjk.cqygjk.com" //北边接口前缀 +#define SCHEME @"http" // + + + +#endif /* StatusMacros_h */ diff --git a/XinjiangProject/XinjiangProject/Define/ThirdMacros.h b/XinjiangProject/XinjiangProject/Define/ThirdMacros.h new file mode 100755 index 0000000..5323188 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Define/ThirdMacros.h @@ -0,0 +1,43 @@ +// +// ThirdMacros.h +// idleBuy +// +// Created by ios on 2018/5/28. +// Copyright © 2018年 ios. All rights reserved. +// + +#ifndef ThirdMacros_h +#define ThirdMacros_h + +//微信 +#define kAppKey_Wechat @"" + +#define kSecret_Wechat @"" + +#define UMShareAppKey @"" + +#define JpushAppKey @"" + +#define AlipayAppKey @"" + +#define buglyAppid @"" + + + +//高德key +#define AMAPSDKKEY @"e5e5b1aa469fcf577c829165bae860dd" + +#define KNotificAgreeProtoocl @"AGREEPMAP" + +//友盟appster + +#define UMAppSecret @"" + +#define UMAppkey @"" + +#define UNiversalLink @"" + +//腾讯IM +#define TUISDKAPPID 1400792728 + +#endif /* ThirdMacros_h */ diff --git a/XinjiangProject/XinjiangProject/Define/YYUtilsMacros.h b/XinjiangProject/XinjiangProject/Define/YYUtilsMacros.h new file mode 100755 index 0000000..7faacde --- /dev/null +++ b/XinjiangProject/XinjiangProject/Define/YYUtilsMacros.h @@ -0,0 +1,217 @@ +// +// YYUtilsMacros.h +// idleBuy +// +// Created by ios on 2018/5/28. +// Copyright © 2018年 ios. All rights reserved. +// + +#ifndef YYUtilsMacros_h +#define YYUtilsMacros_h + + + +//#define CQHttp @""//正式 + + + +//#define CQHttp @"https://cqyt.test.yg.icdat.cn"// + +//获取系统对象 + +#define IOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) +#define IOS8 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) +#define iOS9Later ([UIDevice currentDevice].systemVersion.floatValue >= 9.0f) + +#define kApplication [UIApplication sharedApplication] +#define kAppWindow [UIApplication sharedApplication].delegate.window +#define kAppDelegate [AppDelegate shareAppDelegate] +#define kRootViewController [UIApplication sharedApplication].delegate.window.rootViewController +#define kUserDefaults [NSUserDefaults standardUserDefaults] +#define kNotificationCenter [NSNotificationCenter defaultCenter] + +#define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height +#define kNavBarHeight 44.0 +#define kTabBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height>20?83:49) +#define kTopHeight (kStatusBarHeight + kNavBarHeight) +/* 系统版本和语言 */ +#define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue] +#define CurrentSystemVersion ([[UIDevice currentDevice] systemVersion]) +#define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0]) +#define IPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) + +#define IOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) +#define IOS8 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) +#define iOS9Later ([UIDevice currentDevice].systemVersion.floatValue >= 9.0f) +#define IPHONE4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO) +//判断是否是IPHONE5的宏,用法是 if(IPHONE) xxxx else xxxxx +#define IPHONE5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO) + +/* 判断iphonex*/ +#define IPHONE_X \ +({BOOL isPhoneX = NO;\ +if (@available(iOS 11.0, *)) {\ +isPhoneX = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0;\ +}\ +(isPhoneX);}) + + + +/* 宽度*/ +#define SCREEN_BOUNDS [[UIScreen mainScreen]bounds] +#define WIDTH [[UIScreen mainScreen]bounds].size.width +#define HEIGHT [[UIScreen mainScreen]bounds].size.height +#define SCREEN_SIZE [[UIScreen mainScreen]bounds].size +#define STATUSBAR_HEIGHT [[UIApplication sharedApplication]statusBarFrame].size.height +#define STATUSBAR_WIDTH [[UIApplication sharedApplication]statusBarFrame].size.width +#define mykeyWindow [UIApplication sharedApplication].delegate.window +#define HEIGHT_6_SCALE HEIGHT/667 +#define IS_IPHONE_6P (WIDTH > 375) +#define myScale6 WIDTH/375 +#define HEIGHT_TABBAR (IPHONE_X ? 83 : 49) +#define HEIGHT_NAVIGATION (IPHONE_X ? 88 : 64) +#define SafetyAreaHeight (IPHONE_X ? 24 : 0) +#define HomeHEIGHT (HEIGHT - HEIGHT_NAVIGATION - HEIGHT_TABBAR) +#define MyViewHEIGHT (HEIGHT - HEIGHT_NAVIGATION) +#define KNavigationBarHeight (44.0) +#define KStatusBarHeight ([UIApplication sharedApplication].statusBarFrame.size.height) +#define KTopHeight (KNavigationBarHeight + KStatusBarHeight) +#define LineSpace 5 +//根据ip6的屏幕来拉伸 +#define kRealValue(with) ((with)*(WIDTH/375.0f)) + +//强弱引用 +#define kWeakSelf(type) __weak typeof(type) weak##type = type; +#define kStrongSelf(type) __strong typeof(type) type = weak##type; + +//View 圆角和加边框 +#define ViewBorderRadius(View, Radius, Width, Color)\ +\ +[View.layer setCornerRadius:(Radius)];\ +[View.layer setMasksToBounds:YES];\ +[View.layer setBorderWidth:(Width)];\ +[View.layer setBorderColor:[Color CGColor]] + +// View 圆角 +#define ViewRadius(View, Radius)\ +\ +[View.layer setCornerRadius:(Radius)];\ +[View.layer setMasksToBounds:YES] +//字体 +#define BOLDSYSTEMFONT(FONTSIZE)[UIFont boldSystemFontOfSize:FONTSIZE] +#define SYSTEMFONT(FONTSIZE) [UIFont systemFontOfSize:FONTSIZE] +#define FONT(NAME, FONTSIZE) [UIFont fontWithName:(NAME) size:(FONTSIZE)] +#define MEDIUMFONT(FONTSIZE) [UIFont systemFontOfSize:FONTSIZE weight:UIFontWeightMedium]; + +#define PLACEHOLD_IMG IMAGE_NAMED(@"placeholdIMG") + + +#define IMAGE_NAMED(name) [UIImage imageNamed:name] +/** +* the saving objects 存储对象 +* +* @param __VALUE__ V +* @param __KEY__ K +* +* @return +*/ +#define UserDefaultSetObjectForKey(__VALUE__,__KEY__) \ +{\ +[[NSUserDefaults standardUserDefaults] setObject:__VALUE__ forKey:__KEY__];\ +[[NSUserDefaults standardUserDefaults] synchronize];\ +} + +/** + * get the saved objects 获得存储的对象 + */ +#define UserDefaultObjectForKey(__KEY__) [[NSUserDefaults standardUserDefaults] objectForKey:__KEY__] + +/** + * delete objects 删除对象 + */ +#define UserDefaultRemoveObjectForKey(__KEY__) \ +{\ +[[NSUserDefaults standardUserDefaults] removeObjectForKey:__KEY__];\ +[[NSUserDefaults standardUserDefaults] synchronize];\ +} +///IOS 版本判断 +#define IOSAVAILABLEVERSION(version) ([[UIDevice currentDevice] availableVersion:version] < 0) +// 当前系统版本 +#define CurrentSystemVersion [[UIDevice currentDevice].systemVersion doubleValue] +//当前语言 +#define CurrentLanguage ([NSLocale preferredLanguages] objectAtIndex:0]) + +//-------------------打印日志------------------------- +//DEBUG 模式下打印日志,当前行 +#ifdef DEBUG +#define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); +#else +#define DLog(...) +#endif +//颜色 +#define KClearColor [UIColor clearColor] +#define KWhiteColor [UIColor whiteColor] +#define KBlackColor [UIColor blackColor] +#define KGrayColor [UIColor grayColor] +#define KGray2Color [UIColor lightGrayColor] +#define KBlueColor [UIColor blueColor] +#define KRedColor [UIColor redColor] +#define RGBA(r,g,b,a) ([UIColor colorWithRed:r/255.0 \ +green:g/255.0 \ +blue:b/255.0 \ +alpha:a]) +#define RGB(r,g,b) (RGBA(r,g,b,1)) + +#define RGB_VALUE(value) ([UIColor colorWithRed:((float)((value&0xFF0000)>>16))/255.0f \ +green:((float)((value&0xFF00)>>8))/255.0f \ +blue:((float)(value&0xFF))/255.0f \ +alpha:1.0f]) +#define Kcustom_color(R,G,B) ([UIColor colorWithRed:(R)/255.0 \ +green:(G)/255.0 \ +blue:(B)/255.0 \ +alpha:1.0]) + +#define UIColorBackground (RGB(243,244,246)) +#define UIColorTitle1 (RGB_VALUE(0x333333)) +#define UIColorTitle2 (RGB_VALUE(0x666666)) +#define UIColorTitle3 (RGB_VALUE(0x999999)) +#define UITextBackColor (RGBA(169,169,169,1)) +#define UIWhiteColor ([UIColor whiteColor]) +#define UIColorLine (RGB_VALUE(0xE5E5E5)) +#define UIColorTheme (RGB(242,48,48)) +#define UIGreenColor (RGB(123,209,132)) +#define UIColorMain (RGB(189,19,11)) + +//数据验证 +#define StrValid(f) ([f isKindOfClass:[NSNull class]] || f == nil || [f length] < 1 || [f isEqualToString:@"(null)"] || [f isEqualToString:@""] || [f isEqualToString:@"null"]? YES : NO) +#define SafeStr(f) (StrValid(f) ? f:@"") +#define HasString(str,key) ([str rangeOfString:key].location!=NSNotFound) + +#define ValidStr(f) StrValid(f) +#define ValidDict(f) (f!=nil && [f isKindOfClass:[NSDictionary class]]) +#define ValidArray(f) (f!=nil && [f isKindOfClass:[NSArray class]] && [f count]>0) +#define ValidNum(f) (f!=nil && [f isKindOfClass:[NSNumber class]]) +#define ValidClass(f,cls) (f!=nil && [f isKindOfClass:[cls class]]) +#define ValidData(f) (f!=nil && [f isKindOfClass:[NSData class]]) +//拼接字符串 +#define NSStringFormat(format,...) [NSString stringWithFormat:format,##__VA_ARGS__] +//发送通知 +#define KPostNotification(name,obj) [[NSNotificationCenter defaultCenter] postNotificationName:name object:obj]; +//单例化一个类 +#define SINGLETON_FOR_HEADER(className) \ +\ ++ (className *)shared##className; + +#define SINGLETON_FOR_CLASS(className) \ +\ ++ (className *)shared##className { \ +static className *shared##className = nil; \ +static dispatch_once_t onceToken; \ +dispatch_once(&onceToken, ^{ \ +shared##className = [[self alloc] init]; \ +}); \ +return shared##className; \ +} + + +#endif /* YYUtilsMacros_h */ diff --git a/XinjiangProject/XinjiangProject/Manager/AudioManager/CQAudioPlayManager.h b/XinjiangProject/XinjiangProject/Manager/AudioManager/CQAudioPlayManager.h new file mode 100644 index 0000000..7579ab1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/AudioManager/CQAudioPlayManager.h @@ -0,0 +1,25 @@ +// +// CQAudioPlayManager.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/5. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CQAudioPlayManager : NSObject + ++ (AVPlayer *)initWhithUrl:(NSURL *)avUrl; + +//开始播放 ++ (void)avPlayIngAction:(AVPlayer *)avPlay; + +//暂停播放 ++ (void)avPauseAction:(AVPlayer *)avPlay; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Manager/AudioManager/CQAudioPlayManager.m b/XinjiangProject/XinjiangProject/Manager/AudioManager/CQAudioPlayManager.m new file mode 100644 index 0000000..7e56838 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/AudioManager/CQAudioPlayManager.m @@ -0,0 +1,34 @@ +// +// CQAudioPlayManager.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/5. +// + +#import "CQAudioPlayManager.h" + +@implementation CQAudioPlayManager + ++ (AVPlayer *)initWhithUrl:(NSURL *)avUrl { + + + AVPlayerItem * item = [AVPlayerItem playerItemWithURL:avUrl];// 2.创建AVPlayerItem + AVPlayer * avTools = [AVPlayer playerWithPlayerItem:item]; + avTools= [AVPlayer playerWithURL:avUrl]; + return avTools; + +} + +//开始播放 ++ (void)avPlayIngAction:(AVPlayer *)avPlay { + + [avPlay play]; +} + +//暂停播放 ++ (void)avPauseAction:(AVPlayer *)avPlay { + + [avPlay pause]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/DownToolsManager.h b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/DownToolsManager.h new file mode 100644 index 0000000..85533d9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/DownToolsManager.h @@ -0,0 +1,20 @@ +// +// DownToolsManager.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/1. +// + +#import +#import "ReaderViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DownToolsManager : NSObject + ++ (void)downLoadReportWithURL:(NSString *)PDFURL withFileName:(NSString *)fileName; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/DownToolsManager.m b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/DownToolsManager.m new file mode 100644 index 0000000..481c18b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/DownToolsManager.m @@ -0,0 +1,103 @@ +// +// DownToolsManager.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/1. +// + +#import "DownToolsManager.h" +@implementation DownToolsManager + ++ (void)downLoadReportWithURL:(NSString *)PDFURL withFileName:(NSString *)fileName +{ + + [self downLoadPdfFileByUrl:PDFURL fileName:[NSString stringWithFormat:@"%@.pdf",fileName]]; + +} + ++(__kindof NSURLSessionTask *)downloadWithURL:(NSString *)URL + fileDir:(NSString *)fileDir + progress:(void(^)(NSProgress *progress))progress + success:(void(^)(NSString *filePath))success + failure:(void(^)(NSError *error))failure{ + + AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URL]]; + NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { + //下载进度 + progress ? progress(downloadProgress) : nil; + NSLog(@"下载进度:%.2f%%",100.0*downloadProgress.completedUnitCount/downloadProgress.totalUnitCount); + } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { + + //拼接缓存目录 + NSString *downloadStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] ; + + //拼接文件路径 + NSString *filePath = [downloadStr stringByAppendingPathComponent:fileDir]; + + NSLog(@"downloadStr = %@",downloadStr); + return [NSURL fileURLWithPath:filePath]; + + } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { + NSLog(@"%@---%@", filePath, filePath.absoluteString); + success ? success(filePath.absoluteString /** NSURL->NSString*/) : nil; + failure && error ? failure(error) : nil; + }]; + //开始下载 + [downloadTask resume]; + return downloadTask; + +} + +//下载pdf文件 ++(void)downLoadPdfFileByUrl:(NSString *)url fileName:(NSString *)fileName +{ + //如果存在直接打开 + if ([self isFileExist:fileName]) { + //获取路径 + NSString *documentsPath = [ReaderDocument documentsPath]; + //可根据路径command + shift + G查看该路径下的所有的pdf文件 + NSLog(@"%@", documentsPath); + NSString *filePath = [documentsPath stringByAppendingPathComponent:fileName]; + ReaderDocument *document = [ReaderDocument withDocumentFilePath:filePath password:nil]; + if (document != nil) + { + ReaderViewController *readerViewController = [[ReaderViewController alloc] initWithReaderDocument:document]; + + readerViewController.delegate = self; + [[HQCommonUtils getCurrentVC] presentViewController:readerViewController animated:YES completion:nil]; + } + }else{ + + [self downloadWithURL:url fileDir:fileName progress:^(NSProgress *progress) { + + } success:^(NSString *filePath) { + NSLog(@"%@", filePath); + //下载完成直接打开 + [self downLoadPdfFileByUrl:url fileName:fileName]; + } failure:^(NSError *error) { + }]; + } + +} +#pragma mark ReaderViewControllerDelegate因为PDF阅读器可能是push出来的,也可能是present出来的,为了更好的效果,这个代理方法可以实现很好的退出 ++ (void)dismissReaderViewController:(ReaderViewController *)viewController{ + [[HQCommonUtils getCurrentVC] dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma 判断文件是否存在 ++(BOOL)isFileExist:(NSString *)fileName +{ + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *path = [paths objectAtIndex:0]; + NSString *filePath = [path stringByAppendingPathComponent:fileName]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + BOOL result = [fileManager fileExistsAtPath:filePath]; + NSLog(@"这个文件已经存在:%@",result?@"是的":@"不存在"); + return result; + +} + + +@end + diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQAPI.h b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQAPI.h new file mode 100755 index 0000000..0a0dac5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQAPI.h @@ -0,0 +1,126 @@ +// +// API.h +// XZYNetworking +// +// Created by 徐自由 on 2017/12/25. +// Copyright © 2017年 徐自由. All rights reserved. +// + +#import +#import "JKCQNetworkingWithCache.h" + +@interface JKCQAPI : NSObject + +@property (nonatomic,strong) JKCQNetworkingWithCache * httpRequest; + +#pragma mark - init方法 +//无需token +- (instancetype)init:(id)delegate tag:(NSString *)tag; +//携带token +- (instancetype)init:(id)delegate tag:(NSString *)tag NeedToken:(NSString *)NeedToken; + +#pragma mark:应急 +- (void)PostSoSPhoneEmergency:(NSMutableDictionary *)parmDic; +- (void)getSoSCreateGroupChat:(NSMutableDictionary *)parmDic; +- (void)getNearbyHomePageHospitalPoint:(NSMutableDictionary *)parmDic; +- (void)getNearbyAEDEquipmentqNumber:(NSMutableDictionary *)parmDic; +- (void)GetSoSHomePageResources:(NSMutableDictionary *)pamraDic; +- (void)PostEndSoSIMQuestion:(NSMutableDictionary *)pamraDic; +- (void)getSoSCarInfoLocationHome:(NSMutableDictionary *)parmDic; + + +//首页接口 +- (void)GetQuetsionRecordsList:(NSMutableDictionary *)parmDic; +- (void)GetAllDoctorRecordsList:(NSMutableDictionary *)parmDic; +- (void)GetDoctoresExpireTime:(NSMutableDictionary *)parmDic; +- (void)GetAllHistoryChatRecord:(NSMutableDictionary *)parmDic; +- (void)GetverifyToken:(NSMutableDictionary *)parmDic; + +#pragma mark:登录注册 +- (void)PostLogin:(NSMutableDictionary *)parmDic; +- (void)GetIMLoginAccount:(NSMutableDictionary *)pamraDic; +#pragma mark:健康咨询 +- (void)getQuestionRecommendDoctor:(NSMutableDictionary *)parmDic; +- (void)getSearchjibingListRightData:(NSMutableDictionary *)parmDic; +- (void)getFoundExpertHomeData:(NSMutableDictionary *)parmDic; +- (void)getSearchZongheData:(NSMutableDictionary *)parmDic; +- (void)getSearchDoctorData:(NSMutableDictionary *)parmDic; +- (void)getSearchHospatilData:(NSMutableDictionary *)parmDic; +- (void)getSearchSicksListData:(NSMutableDictionary *)parmDic; +- (void)getSearchRoomListData:(NSMutableDictionary *)parmDic; +- (void)getSearchRoomListLeftData:(NSMutableDictionary *)parmDic; +- (void)getAllHospatilData:(NSMutableDictionary *)parmDic; +- (void)getSearchConditionsData:(NSMutableDictionary *)parmDic; +- (void)getConnditionHospitalData:(NSMutableDictionary *)parmDic; +- (void)getHospatilDetail:(NSMutableDictionary *)parmDic; +- (void)getHospatilDetailRoomsDoctor:(NSMutableDictionary *)parmDic; +- (void)getHospatilEvaluate:(NSMutableDictionary *)parmDic; +- (void)getHospatilScore:(NSMutableDictionary *)parmDic; +- (void)getCollectHospatil:(NSMutableDictionary *)parmDic; +- (void)getCancelCollectHospatil:(NSMutableDictionary *)parmDic; +- (void)getDoctorExpertMainData:(NSMutableDictionary *)parmDic; +- (void)getCollectDoctorExpertData:(NSMutableDictionary *)parmDic; +- (void)getCancelCollectDoctorExpertData:(NSMutableDictionary *)parmDic; +- (void)getExpertDoctorEvluateData:(NSMutableDictionary *)parmDic; +- (void)getDoctorScore:(NSMutableDictionary *)parmDic; +- (void)getExpertDoctorHaveTimeData:(NSMutableDictionary *)parmDic; +- (void)postVideoQuestionAPI:(NSMutableDictionary *)parmDic; +- (void)postPictureQuestionAPI:(NSMutableDictionary *)parmDic; +- (void)getAppointmentReportDetailAPI:(NSMutableDictionary *)parmDic; +- (void)GetLookQuestionDetailFileData:(NSMutableDictionary *)parmaDic; +- (void)getCancelQuestion:(NSMutableDictionary *)parmDic; +- (void)getSearchjibingListLeftData:(NSMutableDictionary *)parmDic; +- (void)getOneKeyQuestionByID:(NSMutableDictionary *)parmDic; +- (void)postSearchOneKeyQuestionData:(NSMutableDictionary *)parmDic; +- (void)getHistoryReportById:(NSMutableDictionary *)parmDic; + +#pragma mark:咨询人管理 + +- (void)getQuestionManagerList:(NSMutableDictionary *)parmDic; +- (void)delectedQuestionManagerList:(NSMutableDictionary *)parmDic; +- (void)getAddQuestionFailyMembers:(NSMutableDictionary *)parmDic; +- (void)getQustionOptionsMembers:(NSMutableDictionary *)parmDic; +- (void)getMembersSicksList:(NSMutableDictionary *)parmDic; +- (void)PostMemberShipFileData:(NSMutableDictionary *)parmaDic; +- (void)GetLookModficalMemberShipFileData:(NSMutableDictionary *)parmaDic; +- (void)GetQuestionRecordList:(NSMutableDictionary *)parmaDic; +- (void)postBaseHealthInfoAPI:(NSMutableDictionary *)parmDic; +#pragma mark:IM + +- (void)GetloginIMUserSig:(NSMutableDictionary *)parmDic; +- (void)GetEndPictureEndIMQuestion:(NSMutableDictionary *)pamraDic; +- (void)PostQustionDoctorScore:(NSMutableDictionary *)pamraDic; +- (void)getsendHealthDataReportAPI:(NSMutableDictionary *)parmDic; +- (void)GetisSmallHelp:(NSMutableDictionary *)parmDic; +- (void)GetSmllHelpDetail:(NSMutableDictionary *)parmDic; +#pragma mark:查询 +- (void)postImageArrayUpload:(NSArray *)imageArray withParmDic:(NSMutableDictionary *)parmDic; +- (void)getCheckKeyResult:(NSMutableDictionary *)parmDic; +- (void)getFoundPopConnetResult:(NSMutableDictionary *)parmDic; +- (void)getSelectedShow:(NSMutableDictionary *)parmDic; +- (void)getBodyReportDeatil:(NSMutableDictionary *)parmDic; +- (void)PostGroupIDArray:(NSMutableDictionary *)parmDic; +- (void)postSmallHelpGroup:(NSMutableDictionary *)parmDic; + +#pragma mark:我的 +- (void)getMineCenterNumber:(NSMutableDictionary *)parmDic; +- (void)getMineQuestionRecord:(NSMutableDictionary *)parmDic; +- (void)getMineCenterUserInfo:(NSMutableDictionary *)parmDic; +- (void)getEmergencyContact:(NSMutableDictionary *)parmDic; +- (void)postAddEmergencyContact:(NSMutableDictionary *)parmDic; +- (void)getDelectedEmergencyContact:(NSMutableDictionary *)parmDic; +- (void)postSetUserPassword:(NSMutableDictionary *)parmDic; +- (void)postResetUserNewPassword:(NSMutableDictionary *)parmDic; +- (void)getVesionHideRegis:(NSMutableDictionary *)parmDic; +- (void)postUpdateQuestionFailyMembers:(NSMutableDictionary *)parmDic; + +#pragma mark:用户隐私协议 +- (void)getUserAgreementPrivacy:(NSMutableDictionary *)parmDic; +//更新 +- (void)getABMUpdate:(NSMutableDictionary *)parmDic; + +- (void)getMinitringFillQusetion:(NSMutableDictionary *)parmDic; + +- (void)getMinitringWatchData:(NSMutableDictionary *)parmDic; + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQAPI.m b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQAPI.m new file mode 100755 index 0000000..c7c6ad7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQAPI.m @@ -0,0 +1,751 @@ +// +// API.m +// XZYNetworking +// +// Created by 徐自由 on 2017/12/25. +// Copyright © 2017年 徐自由. All rights reserved. +// + +#import "JKCQAPI.h" + +#define needToken httpRequest.needToken +#define isLoginFlag httpRequest.isLoginFlag + + +@implementation JKCQAPI + +#pragma mark - init方法 +@synthesize httpRequest; + +//无需token +- (instancetype)init:(id)delegate tag:(NSString *)tag +{ + return [self init:delegate tag:tag NeedToken:0]; +} + +//携带token +- (instancetype)init:(id)delegate tag:(NSString *)tag NeedToken:(NSString *)NeedToken +{ + if (self=[super init]) { + + + if (![tag isEqualToString:@"LOGINGAPI"] || ![tag isEqualToString:@"CHANGEAPI"] || ![tag isEqualToString:@"verifyToken"]) { + + HQUserInfo * user = [HQCommonUtils keyedUnarchiverWithKey:LoginUserInfo]; + + httpRequest = [[JKCQNetworkingWithCache alloc] initWithDelegate:delegate bindTag:tag NeedToken:user.token]; + }else{ + httpRequest = [[JKCQNetworkingWithCache alloc] initWithDelegate:delegate bindTag:tag NeedToken:@""]; + + } + } + return self; +} + + + +#pragma mark:应急 + +- (void)PostSoSPhoneEmergency:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-emergency/api/emergency/call",Http] params:parmDic]; + +} + +- (void)getSoSCreateGroupChat:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-emergency/api/emergency/createGroupMag",Http] params:parmDic]; +} + +- (void)PostEndSoSIMQuestion:(NSMutableDictionary *)pamraDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-emergency/api/emergency/order/orderOver",Http] params:pamraDic]; + +} + +- (void)GetSoSHomePageResources:(NSMutableDictionary *)pamraDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-emergency/api/emergency/resource/home",Http] params:pamraDic]; +} + + +- (void)getSoSCarInfoLocationHome:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/medical-center/api/ambulance/nearbyAmbulance",Http] params:parmDic]; + +} + +- (void)getNearbyHomePageHospitalPoint:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/medical-center/api/resource/nearbyResource",Http] params:parmDic]; +} + +- (void)getNearbyAEDEquipmentqNumber:(NSMutableDictionary *)parmDic { + + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-intervene/intervene/v2/aedEquipmentManger/nearbyAed",Http] params:parmDic]; +} +//首页新接口 + + +- (void)GetQuetsionRecordsList:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/selectSessionListByDoctorIdUnit",Http] params:parmDic]; + +} + +- (void)GetAllDoctorRecordsList:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/selectSessionListByDoctorIdHelper",Http] params:parmDic]; + +} + +- (void)GetDoctoresExpireTime:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/selectDoctorCardExpireTime",Http] params:parmDic]; + +} + +- (void)GetAllHistoryChatRecord:(NSMutableDictionary *)parmDic { +//http://192.168.1.28/health-consultation/?groupId=1801087415104962560&pageNo=1&pageSize=10 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/selectImMessagePageListSession",Http] params:parmDic]; + +} + +- (void)GetverifyToken:(NSMutableDictionary *)parmDic { +//https://starry.test.icdat.cn/health-consultation/api/consult/msgRecord/selectTokenExpire?token= HTTP/1.1 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/msgRecord/selectTokenExpire",Http] params:parmDic]; + +} + +- (void)GetisSmallHelp:(NSMutableDictionary *)parmDic { +//https://starry.test.icdat.cn/health-consultation/api/consult/msgRecord/selectTokenExpire?token= HTTP/1.1 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conHelper/selectTfHelper",Http] params:parmDic]; + +} +#pragma mark:登录 + +- (void)PostLogin:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/sys/mLogin",Http] params:parmDic]; + +} +/* + IM登录 + */ +- (void)GetIMLoginAccount:(NSMutableDictionary *)pamraDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-im/wnapp/userSigAndroid",Http] params:pamraDic]; +} + +- (void)GetSmllHelpDetail:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conHelper/selectHelperInfoDesc",Http] params:parmDic]; + +} + +#pragma mark:健康咨询搜索 + +- (void)getQuestionRecommendDoctor:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctor/selectDoctorRecommend",Http] params:parmDic]; + +} + +- (void)getFoundExpertHomeData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/es/searchFirstpage",Http] params:parmDic]; + +} + +- (void)getSearchZongheData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/es/searchComprehensive",Http] params:parmDic]; + +} +//搜专家 +- (void)getSearchDoctorData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/es/searchConDoctor",Http] params:parmDic]; + +} + +//搜医院 +- (void)getSearchHospatilData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/es/searchConResource",Http] params:parmDic]; + +} +//全部医院 +- (void)getAllHospatilData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/es/searchConResourceAll",Http] params:parmDic]; + +} + +//医院详情 +- (void)getHospatilDetail:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conResource/hospitalDetail",Http] params:parmDic]; + +} + +//医院科室 +- (void)getHospatilDetailRoomsDoctor:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctor/selectDoctorByHospitalId",Http] params:parmDic]; + +} +//医院评论 + +- (void)getHospatilEvaluate:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conEvaluate/selectConEvaluateListByHospitalId",Http] params:parmDic]; + +} + +//关注医院 +- (void)getCollectHospatil:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conHospitalFollow/followHostital",Http] params:parmDic]; + +} + +//取消关注医院 +- (void)getCancelCollectHospatil:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conHospitalFollow/cancelHostital",Http] params:parmDic]; + +} + +//医院评分 +- (void)getHospatilScore:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conResource/selectHostitalAverageScore",Http] params:parmDic]; + +} +//医生评分 +- (void)getDoctorScore:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctor/selectDoctorAverageScore",Http] params:parmDic]; + +} + +//带搜索条件 +- (void)getSearchConditionsData:(NSMutableDictionary *)parmDic { +// GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/conDoctor/selectDictListByNHDS?doctorName=&hospitalId=&departmentId=27424429373915145&sickId=&tfSort=1&pageNo=1&pageSize=100 HTTP/1.1 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctor/selectDictListByNHDS",Http] params:parmDic]; + +} + +- (void)postSearchOneKeyQuestionData:(NSMutableDictionary *)parmDic { +// 查询关联疾病和科室的医生 +// POST http://cqyt.dev.yg.dt.io/health-consultation/api/consult/conDoctor/selectDictListBySickAndDepartment HTTP/1.1 +// 入参:{"departmentIds":[],"sickIds":["40289e15409841890115416524830065"],"pageNo":1,"pageSize":10} + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctor/selectDictListBySickAndDepartment",Http] params:(NSMutableDictionary *)parmDic]; + +} + + + + + +//搜疾病 +- (void)getSearchSicksListData:(NSMutableDictionary *)parmDic { + + //GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/es/searchconSicksList?search=%E5%A5%BD&pageNumber=1&pageSize=100 HTTP/1.1 + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/es/searchconSicksList",Http] params:parmDic]; + +} + +//搜科室 +- (void)getSearchRoomListData:(NSMutableDictionary *)parmDic { + + //老的 GET http://cqyt.dev.yg.dt.io//health-consultation/es/searchConDepartment?search=%E5%86%85%E7%A7%91&pageNumber=1&pageSize=100 HTTP/1.1 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/es/searchConDepartment",Http] params:parmDic]; + +} + +//搜科室:左边 +- (void)getSearchRoomListLeftData:(NSMutableDictionary *)parmDic { +// GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/conDepartment/selectDepartListVersionThree?parentId=0 HTTP/1.1 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDepartment/selectDepartListVersionThree",Http] params:parmDic]; + +} +//搜疾病:左边边 +- (void)getSearchjibingListLeftData:(NSMutableDictionary *)parmDic { +// GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/conDepartment/selectDepartListVersionThree?parentId=27342921598501015 HTTP/1.1 + //http://192.168.1.23/health-consultation/api/consult/conDepartment/selectDepartListSickVersionTwo?parentId=0 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDepartment/selectDepartListSickVersionTwo",Http] params:parmDic]; +} + +//搜疾病:右边 +- (void)getSearchjibingListRightData:(NSMutableDictionary *)parmDic { +// GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/conDepartment/selectDepartListVersionThree?parentId=27342921598501015 HTTP/1.1 +// GET http://192.168.1.23/health-consultation/api/consult/conSicks/selectSickListByDepartmentId?departmentId=27342921598501114 HTTP/1.1 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSicks/selectSickListByDepartmentId",Http] params:parmDic]; +} +//医院筛选 +- (void)getConnditionHospitalData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conResource/selectHospitalList",Http] params:parmDic]; +} + +//专家主页 +- (void)getDoctorExpertMainData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctor/selectDoctorInfo",Http] params:parmDic]; +} + +//关注专家 +- (void)getCollectDoctorExpertData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctorFollow/followDoctor",Http] params:parmDic]; +} + +//取消专家 +- (void)getCancelCollectDoctorExpertData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctorFollow/cancelDoctor",Http] params:parmDic]; +} + +//专家评论列表 +- (void)getExpertDoctorEvluateData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conEvaluate/selectConEvaluateList",Http] params:parmDic]; +} + +//专家预约时间 +- (void)getExpertDoctorHaveTimeData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctorSchedulingDate/selectSchedulingDateListByDoctorId",Http] params:parmDic]; +} + + +- (void)postVideoQuestionAPI:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/insertTelephoneSession",Http] params:parmDic]; +} + +- (void)postPictureQuestionAPI:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/insertPictureTextSession",Http] params:parmDic]; + +} + +- (void)getABMUpdate:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:@"https://base.icdat.cn/v2/latest" params:parmDic]; + +} + + +//预约详情 +- (void)getAppointmentReportDetailAPI:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/sessionDetail",Http] params:parmDic]; + +} + +- (void)getOneKeyQuestionByID:(NSMutableDictionary *)parmDic { + NSString * ClassId = [parmDic objectForKey:@"ClassId"]; + // http://cqyt.dev.yg.dt.io/medical/uniItemClass/getOfficeIdsAndSicksIdsRelByClassId?classId=28436350931828841 HTTP/1.1 + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/medical/uniItemClass/getOfficeIdsAndSicksIdsRelByClassId?classId=%@",Http,ClassId] params:parmDic]; +} + + +#pragma mark:咨询人管理 + +- (void)getQuestionManagerList:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/familyMembers/selectMenberOnlyList",Http] params:parmDic]; +} + +- (void)delectedQuestionManagerList:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/familyMembers/removeMemberById",Http] params:parmDic]; +} + + +- (void)getAddQuestionFailyMembers:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/familyMembers/insertFamilyMembers",Http] params:parmDic]; +} + +- (void)postUpdateQuestionFailyMembers:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/familyMembers/updateFamilyMembers",Http] params:parmDic]; +} + + +- (void)getQustionOptionsMembers:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/healthInfo/selectHealthInfo",Http] params:parmDic]; +} + +- (void)getMembersSicksList:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/familyMembers/selectMenberList",Http] params:parmDic]; +} + +- (void)PostMemberShipFileData:(NSMutableDictionary *)parmaDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/medicalRecords/insertConMedicalRecords",Http] params:parmaDic]; +} + +- (void)GetLookModficalMemberShipFileData:(NSMutableDictionary *)parmaDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/medicalRecords/selectConMedicalRecordsById",Http] params:parmaDic]; +} + +- (void)GetLookQuestionDetailFileData:(NSMutableDictionary *)parmaDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/medicalRecords/selectConMedicalRecordsByIdDoctor",Http] params:parmaDic]; +} + + +- (void)GetQuestionRecordList:(NSMutableDictionary *)parmaDic { + +// GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/conSession/selectSessionListByUserIdVersionTwo?type=2&status=5&pageNo=0&pageSize=10 HTTP/1.1 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/selectSessionListByUserIdVersionTwo",Http] params:parmaDic]; +} + + + + +#pragma mark:im +- (void)GetloginIMUserSig:(NSMutableDictionary *)parmDic { + + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-im/wnapp/userSigAndroid",Http] params:parmDic]; + +} +//结束图文咨询 +- (void)GetEndPictureEndIMQuestion:(NSMutableDictionary *)pamraDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/finishSession",Http] params:pamraDic]; + +} + +//医生评分 +- (void)PostQustionDoctorScore:(NSMutableDictionary *)pamraDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conEvaluate/insertConEvaluate",Http] params:pamraDic]; + +} +//发送健康档案 +- (void)getsendHealthDataReportAPI:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/medicalRecords/selectConMedicalRecordsByMemberId",Http] params:parmDic]; + +} + +#pragma mark:tools +- (void)postImageArrayUpload:(NSArray *)imageArray withParmDic:(NSMutableDictionary *)parmDic { + + [httpRequest upLoadDataWithUrlStr:[NSString stringWithFormat:@"%@/sys/upload/uploadFileMany",Http] params:parmDic withDataArray:imageArray]; +} + +- (void)getCheckKeyResult:(NSMutableDictionary *)parmDic { + + // [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/sys/upload/uploadFile",CQHttp] params:parmDic]; + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctor/selectDictList",Http] params:parmDic]; +} + +- (void)getFoundPopConnetResult:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/notice/selectUserNotice",Http] params:parmDic]; +} + + +- (void)getSelectedShow:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/notice/chooseToDontShowUp",Http] params:parmDic]; +} + + + +- (void)getBodyReportDeatil:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/cqyt/middleController/getCheckItemBySfzhNewNew",Http] params:parmDic]; + +} + + +- (void)PostGroupIDArray:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/selectSessionListPictureByUserId",Http] params:parmDic]; +} + +- (void)postSmallHelpGroup:(NSMutableDictionary *)parmDic { + + //insertUserAndHelperSession 以前是这样 + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/insertUserAndHelperSessionNew",Http] params:parmDic]; + +} +- (void)postBaseHealthInfoAPI:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/healthInfo/inserOrUpdatetHealthInfoAnswer",Http] params:parmDic]; +} + + +#pragma mark:我的 + +- (void)getMineCenterNumber:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/sessioningNum",Http] params:parmDic]; + +} + +- (void)getMineQuestionRecord:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/selectSessionListByUserIdVersionThree",Http] params:parmDic]; + + +} + +- (void)getCancelQuestion:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conSession/cancelSession",Http] params:parmDic]; + +} + +- (void)getMineCenterUserInfo:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/sys/api/selectUserInfo",Http] params:parmDic]; + +} +- (void)postSetUserPassword:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-system/api/anon/sys/checkUser",Http] params:parmDic]; + +} +- (void)postResetUserNewPassword:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/health-system/api/anon/sys/resetUserPwd",Http] params:parmDic]; + +} +//紧急联系人 +- (void)getEmergencyContact:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/sys/api/emergencyContact/selectEmergencyContactList",Http] params:parmDic]; + +} + +- (void)postAddEmergencyContact:(NSMutableDictionary *)parmDic { + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/sys/api/emergencyContact/updateAndInsertEmergencyContact",Http] params:parmDic]; + +} + +- (void)getDelectedEmergencyContact:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/sys/api/emergencyContact/removeEmergencyContactList",Http] params:parmDic]; + +} + + +- (void)getUserAgreementPrivacy:(NSMutableDictionary *)parmDic { + + //GET https://cqyt.test.yg.icdat.cn/health-consultation/api/consult/conDoctor/selectDictList?dictKey=jump_url HTTP/1.1 + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-consultation/api/consult/conDoctor/selectDictList?dictKey=qh_ios_jump_url",Http] params:parmDic]; + + +} +#pragma mark:健康现状 + +- (void)gethealthCurrentStatus:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthQuo/info",Http] params:parmDic]; + +} + +- (void)getHistoryReportById:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/historyReport/getHistoryReportById",Http] params:parmDic]; + +} + +//获取体检语音 +- (void)getReportListAudioResource:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/historyReport/getVoiceUrl",Http] params:parmDic]; + +} + +//获取体检语音 +- (void)getReportListHistoryDoctorAudioResource:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/historyReport/convertVoice2",Http] params:parmDic]; + +} + +- (void)getEnergyDemandData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/compute/energyDemand",Http] params:parmDic]; + +} + +- (void)getidealWeightData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/compute/idealBodyWeight",Http] params:parmDic]; + +} + +- (void)getAllSportData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/compute/allExercise",Http] params:parmDic]; + +} + +- (void)getBodyScaleData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/compute/waistHipRatio",Http] params:parmDic]; + +} + +- (void)getOneMinUnderstandData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/compute/knowYourselfInMinute",Http] params:parmDic]; + +} + +- (void)getSubtractWeightData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/compute/loseKilo",Http] params:parmDic]; + +} + +- (void)getHealthAnalyzeData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/medicalDataAnalysis/selectMedicalDataAnalysisVOList",Http] params:parmDic]; + +} + +- (void)getHealthAnalyzeSubData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/medicalDataAnalysis/selectMedicalUniItemClassList",Http] params:parmDic]; + +} + +- (void)getHealthAnalyzeDetailData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/medicalUserResult/selectMedicalUserResult",Http] params:parmDic]; + +} + +- (void)getHealthAnalyzeLineChareTableData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/medicalUserResult/selectMedicalUserResultInfoById",Http] params:parmDic]; + +} + +- (void)selectedTimeData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/medicalUserResult/selectMedicalUserResultInfoExDate",Http] params:parmDic]; + + +} + +- (void)getHealthAnanalyzeResultData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/medicalUserResult/selectMedicalMiddleResultExtVO",Http] params:parmDic]; + +} + +- (void)getHealthMonitorHomepageData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthMonitoring/selectHealthMonitoringInfo",Http] params:parmDic]; +} + +- (void)getHealthBMIData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthMonitoring/selectHeightAndWeightBmi",Http] params:parmDic]; +} + + +- (void)getHealthRecordsListData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthMonitoring/selectHeightAndWeightBmiList",Http] params:parmDic]; +} + +- (void)getHealthBloodPresureDetailData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthMonitoring/selectBloodPresure",Http] params:parmDic]; +} + +- (void)getHealthBloodPresureRecordListData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthMonitoring/selectBloodPresureList",Http] params:parmDic]; +} + +- (void)getHealthBloodlipidRecordListData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthMonitoring/selectBloodFat",Http] params:parmDic]; +} + +- (void)getHealthBloodSugarDetailData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthMonitoring/selectBloodSugarInfo",Http] params:parmDic]; +} + +- (void)getHealthBloodSugarRecordData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthMonitoring/selectBloodSugarList",Http] params:parmDic]; +} + +- (void)getHealthStatusAbnomalData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-archives/api/archives/healthQuo/exceptionList",Http] params:parmDic]; +} + + +//获取报告列表 +- (void)getchangWeiJingReportList:(NSMutableDictionary *)parmDic { + + NSString * userId = [parmDic objectForKey:@"userId"]; + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/medicalGi/phone/reportList/%@",Http,userId] params:parmDic]; +} + + +- (void)getchangWeiJingHaveYearsPaperList:(NSMutableDictionary *)parmDic { + + NSString * userId = [parmDic objectForKey:@"userId"]; + NSString * medicalYear = [parmDic objectForKey:@"medicalYear"]; + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/medicalGi/phone/getPaper/%@/%@",Http,userId,medicalYear] params:parmDic]; +} + +//获取报告详情 +- (void)getchangWeiJingReportDetail:(NSMutableDictionary *)parmDic { + + NSString * urId = [parmDic objectForKey:@"urId"]; + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/medicalGi/phone/report/%@",Http,urId] params:nil]; +} +// +//POST http://cqyt.dev.yg.dt.io/medical/uniItemClass/getOfficeIdsAndSicksIdsRelByGiType?giType=1 HTTP/1.1 +//返回:{"success":true,"message":"","code":200,"result":{"officeIds":[],"sicksIds":[]},"timestamp":1701929792458} +-(void)postChangWeiJingDoctor:(NSMutableDictionary *)parmDic { + + NSString * giType = [parmDic objectForKey:@"giType"]; + + [httpRequest httpPostRequest:[NSString stringWithFormat:@"%@/medical/uniItemClass/getOfficeIdsAndSicksIdsRelByGiType?giType=/%@",Http,giType] params:parmDic]; +} + +#pragma mark:监测 + +- (void)getMinitringFillQusetion:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-intervene/api/risk/riskMyocardialSuddenDeath/selectTfFillQuestion",Http] params:parmDic]; +} + +- (void)getMinitringWatchData:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-watch/watchH5Api/indexDataNew",Http] params:parmDic]; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQNetworkingWithCache.h b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQNetworkingWithCache.h new file mode 100755 index 0000000..22c78d3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQNetworkingWithCache.h @@ -0,0 +1,56 @@ +// +// JKCQNetworkingWithCache.h +// XZYNetworking +// +// Created by 徐自由 on 2017/12/22. +// Copyright © 2017年 徐自由. All rights reserved. +// + +#import +#import +//#import + +@protocol JKCQNetworkingWithCacheDelegate + +@optional +- (void)httpSuccess:(id)response bindTag:(NSString *)bindTag; + +- (void)httpError:(NSString *)error bindTag:(NSString *)bindTag; + +@end + +typedef void (^FileDownloadSucc)(void); +typedef void (^FileDownloadFail)(int code, NSString * desc); + +@interface JKCQNetworkingWithCache : NSObject + +@property (nonatomic,strong) id requestDelegate; +@property (nonatomic,copy) NSString *bindTag; +@property (nonatomic,copy) NSString * needToken; +@property (nonatomic,assign) NSInteger isLoginFlag;//1时如果token可传为空就不跳出登陆界面 +@property (nonatomic,copy) NSString *urlString; + +- (instancetype)initWithDelegate:(id)requestDelegate bindTag:(NSString *)bindTag NeedToken:(NSString *)NeedToken; + +#pragma mark - Get方法(默认方法) +//不带缓存 +- (void)httpGetRequest:(NSString *)api params:(NSMutableDictionary *)params; +- (void)httpGetCacheRequest:(NSString *)api params:(NSMutableDictionary *)params; + +#pragma mark - Post方法 +//不带缓存 +- (void)httpPostRequest:(NSString *)api params:(NSMutableDictionary *)params; +- (void)httpPostCacheRequest:(NSString *)api params:(NSMutableDictionary *)params; + +#pragma mark - 上传文件方法 +//上传单张图片 +- (void)upLoadDataWithUrlStr:(NSString *)api params:(NSMutableDictionary *)params imageKey:(NSString *)name withData:(NSData *)data; +//上传多张图片 +- (void)upLoadDataWithUrlStr:(NSString *)api params:(NSMutableDictionary *)params withDataArray:(NSArray *)dataArray; + +- (void)upLoadVideoDataWithUrlStr:(NSString *)api params:(NSMutableDictionary *)params withDataArray:(NSArray *)dataArray; + +#pragma mark - 下载文件方法 +- (void)downLoadFileWithUrl:(NSString *)urlStr Path:(NSString*)path downloadProgress:(void (^)(NSProgress *downloadProgress))progress SuccessBlock:(FileDownloadSucc)success FileDownloadFail:(FileDownloadFail)failure; + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQNetworkingWithCache.m b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQNetworkingWithCache.m new file mode 100755 index 0000000..8dba942 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/JKCQNetworkingWithCache.m @@ -0,0 +1,508 @@ + +// +// XZYNetworkingWithCache.m +// XZYNetworking +// +// Created by 徐自由 on 2017/12/22. +// Copyright © 2017年 徐自由. All rights reserved. +// + +#import "JKCQNetworkingWithCache.h" + +#define DYLog(...) NSLog(__VA_ARGS__) //如果不需要打印数据, 注释掉NSLog + + +// 请求方式 +typedef NS_ENUM(NSInteger, RequestType) { + RequestTypeGet, + RequestTypePost, + RequestTypeUpLoad,//单个上传 + RequestTypeMultiUpload,//多个上传 + RequestTypeDownload, + RequestTypeUpLoadVideo,//上传视频 +}; + +@implementation JKCQNetworkingWithCache +{ + __weak JKCQNetworkingWithCache *weakSelf; +} + +- (instancetype)initWithDelegate:(id)requestDelegate bindTag:(NSString *)bindTag NeedToken:(NSString *)NeedToken +{ + if (self =[super init]) { + self.requestDelegate = requestDelegate; + self.bindTag = bindTag; + self.needToken = NeedToken; + weakSelf = self; + } + return self; +} + +#pragma mark - Get方法(默认方法) +//不带缓存 +- (void)httpGetRequest:(NSString *)api params:(NSMutableDictionary *)params +{ + [self httpRequestWithUrlStr:api params:params requestType:RequestTypeGet isCache:NO cacheKey:nil imageKey:nil withData:nil withDataArray:nil]; +} + +- (void)httpGetCacheRequest:(NSString *)api params:(NSMutableDictionary *)params +{ + [self httpRequestWithUrlStr:api params:params requestType:RequestTypeGet isCache:YES cacheKey:api imageKey:nil withData:nil withDataArray:nil]; + +} + +#pragma mark - Post方法 +//不带缓存 +- (void)httpPostRequest:(NSString *)api params:(NSMutableDictionary *)params +{ + [self httpRequestWithUrlStr:api params:params requestType:RequestTypePost isCache:NO cacheKey:nil imageKey:nil withData:nil withDataArray:nil]; +} + +- (void)httpPostCacheRequest:(NSString *)api params:(NSMutableDictionary *)params +{ + [self httpRequestWithUrlStr:api params:params requestType:RequestTypePost isCache:YES cacheKey:api imageKey:nil withData:nil withDataArray:nil]; +} + +#pragma mark - 上传文件方法 +//上传单张图片 +- (void)upLoadDataWithUrlStr:(NSString *)api params:(NSMutableDictionary *)params imageKey:(NSString *)name withData:(NSData *)data +{ + [self httpRequestWithUrlStr:api params:params requestType:RequestTypeUpLoad isCache:NO cacheKey:api imageKey:name withData:data withDataArray:nil]; + +} +//上传多张图片 +- (void)upLoadDataWithUrlStr:(NSString *)api params:(NSMutableDictionary *)params withDataArray:(NSArray *)dataArray +{ + [self httpRequestWithUrlStr:api params:params requestType:RequestTypeMultiUpload isCache:NO cacheKey:api imageKey:nil withData:nil withDataArray:dataArray]; +} + +- (void)upLoadVideoDataWithUrlStr:(NSString *)api params:(NSMutableDictionary *)params withDataArray:(NSArray *)dataArray +{ + [self httpRequestWithUrlStr:api params:params requestType:RequestTypeUpLoadVideo isCache:NO cacheKey:api imageKey:nil withData:nil withDataArray:dataArray]; +} + + + +/** 下载文件方法*/ +- (void)downLoadFileWithUrl:(NSString *)urlStr Path:(NSString*)path downloadProgress:(void (^)(NSProgress *downloadProgress))progress SuccessBlock:(FileDownloadSucc)success FileDownloadFail:(FileDownloadFail)failure; +{ + if (urlStr.length == 0) { + return; + } + //1.创建管理者对象 + AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; + //2.确定请求的URL地址 + NSURL *url = [NSURL URLWithString:urlStr]; + //3.创建请求对象 + NSURLRequest *request = [NSURLRequest requestWithURL:url]; + //4.下载任务 + NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { + //打印下下载进度 + progress(downloadProgress); + } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { + //设置文件保存路径 + return [NSURL fileURLWithPath:path]; + } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { + NSLog(@"完成cache:%@",filePath); + NSHTTPURLResponse *response1 = (NSHTTPURLResponse *)response; + NSInteger statusCode = [response1 statusCode]; + if (statusCode == 200) { + success(); + }else{ + failure(0,error.localizedFailureReason); + } + }]; + //5.开始启动下载任务 + [task resume]; +} +#pragma mark - 网络请求统一处理 +/** + + @param api 后台的接口名 + @param params 参数dict + @param requestType 请求类型 + @param isCache 是否缓存标志 + @param cacheKey 缓存的对应key值 + @param name 图片上传的名字(upload) + @param data 图片的二进制数据(upload) + @param dataArray 多图片上传时的imageDataArray + */ +- (void)httpRequestWithUrlStr:(NSString *)api params:(NSMutableDictionary *)params requestType:(RequestType)requestType isCache:(BOOL)isCache cacheKey:(NSString *)cacheKey imageKey:(NSString *)name withData:(NSData *)data withDataArray:(NSArray *)dataArray +{ + NSString *url = api; + + if (params == nil) { + params = [NSMutableDictionary dictionary]; + } + + NSString *allUrl=[self urlDictToStringWithUrlStr:url WithDict:params]; + url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + + //进行网络检查 + if (![self requestBeforeJudgeConnect]) {//断网 + [self showError:@"请检查网络设置"]; + DYLog(@"\n\n----%@------\n\n",@"没有网络"); + return; + } + + AFHTTPSessionManager *session=[AFHTTPSessionManager manager]; +// AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; + + session.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",@"text/plain", nil]; + //超时时间 + + session.requestSerializer.timeoutInterval= 30.f; + session.responseSerializer = [AFHTTPResponseSerializer serializer]; + + session.requestSerializer = [AFJSONRequestSerializer serializer]; + + session.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; + +// [session.requestSerializer setValue:self.needToken forHTTPHeaderField:@"X-Access-Token"]; +// [session.requestSerializer setValue:@"Quarry" forHTTPHeaderField:@"X-ClientSign"]; + + if (requestType == RequestTypeGet) {//Get请求 + + [session GET:url parameters:params headers:@{@"X-Access-Token":self.needToken} progress:^(NSProgress * _Nonnull downloadProgress) { + + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + [weakSelf dealWithResponseObject:responseObject cacheUrl:allUrl]; + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + NSString * statusCode = [error.userInfo objectForKey:@"NSLocalizedDescription"]; +// if (stringUrlOne.count >= 1) +// { + if ([statusCode containsString:@"401"]) { + DLog(@"%@",error.userInfo); + + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + KPostNotification(KNotificationLoginStateChange, @NO); + + if (![HQCommonUtils isLogin]) { + [EasyTextView showErrorText:@"请您登录"]; + } + else{ + [EasyTextView showErrorText:@"身份信息已过期"]; + } + }else + { + NSLog(@"%@",url); + [self showError:@"网络服务出错"]; + } + +// } + + + }]; + } else if (requestType == RequestTypePost) {//post请求 + + [session POST:url parameters:params headers:@{@"X-Access-Token":self.needToken} progress:^(NSProgress * _Nonnull downloadProgress) { + + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + [weakSelf dealWithResponseObject:responseObject cacheUrl:allUrl]; + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + NSString * statusCode = [error.userInfo objectForKey:@"NSLocalizedDescription"]; + if ([statusCode containsString:@"401"]) { + DLog(@"%@",error.userInfo); + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + KPostNotification(KNotificationLoginStateChange, @NO); + if (![HQCommonUtils isLogin]) { + [EasyTextView showErrorText:@"请您登录"]; + } + else{ + [EasyTextView showErrorText:@"身份信息已过期"]; + } + } + else + { + [self showError:@"网络服务出错"]; + } + + }]; + + } else if (requestType == RequestTypeUpLoad) {//上传单张图片 + [session POST:url parameters:params headers:@{@"X-Access-Token":self.needToken} constructingBodyWithBlock:^(id _Nonnull formData) { + + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + // 设置时间格式 + [formatter setDateFormat:@"yyyyMMddHHmmss"]; + NSString *dateString = [formatter stringFromDate:[NSDate date]]; + NSString *fileName = [NSString stringWithFormat:@"%@.jpg", dateString]; + [formData appendPartWithFileData:data name:name fileName:fileName mimeType:@"image/png"]; + + } progress:^(NSProgress * _Nonnull uploadProgress) { + //(float)uploadProgress.completedUnitCount/(float)uploadProgress.totalUnitCount + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + [weakSelf dealWithResponseObject:responseObject cacheUrl:allUrl]; + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + [weakSelf showError:@"上传文件出错"]; + + }]; + } else if (requestType == RequestTypeMultiUpload) {//上传多张图片 + [session POST:url parameters:params headers:@{@"X-Access-Token":self.needToken} constructingBodyWithBlock:^(id _Nonnull formData) { + + // formData = [self dataWith:formData dataArray:dataArray]; + for (int i = 0; i < dataArray.count; i++) { + UIImage *image = dataArray[i]; + NSData *imageData = UIImageJPEGRepresentation(image, 0.5); + // 在网络开发中,上传文件时,是文件不允许被覆盖,文件重名 + // 要解决此问题, + // 可以在上传时使用当前的系统事件作为文件名 + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + // 设置时间格式 + [formatter setDateFormat:@"yyyyMMddHHmmss"]; + NSString *dateString = [formatter stringFromDate:[NSDate date]]; + NSString *fileName = [NSString stringWithFormat:@"%@.jpg", dateString]; + /* + *该方法的参数 + 1. appendPartWithFileData:要上传的照片[二进制流] + 2. name:对应处理文件的字段(比如upload) + 3. fileName:要保存在服务器上的文件名 + 4. mimeType:上传的文件的类型 + */ + [formData appendPartWithFileData:imageData name:@"files" fileName:fileName mimeType:@"image/jpeg"]; // + } + + } progress:^(NSProgress * _Nonnull uploadProgress) { + //(float)uploadProgress.completedUnitCount/(float)uploadProgress.totalUnitCount + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + [weakSelf dealWithResponseObject:responseObject cacheUrl:allUrl]; + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + [weakSelf showError:@"上传文件出错"]; + }]; + }else if (requestType == RequestTypeUpLoadVideo) {//上传视频 + [session POST:url parameters:params headers:@{@"X-Access-Token":self.needToken} constructingBodyWithBlock:^(id _Nonnull formData) { + + // video + [formData appendPartWithFileData:data name:@"video" fileName:@"video.mov" mimeType:@"video/quicktime"]; + + + } progress:^(NSProgress * _Nonnull uploadProgress) { + //(float)uploadProgress.completedUnitCount/(float)uploadProgress.totalUnitCount + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + [weakSelf dealWithResponseObject:responseObject cacheUrl:allUrl]; + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + [weakSelf showError:@"上传文件出错"]; + + }]; + + + } + +} + + +- (NSString *)stringWithDict:(NSDictionary *)dict +{ + NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil]; + NSString *datastr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + datastr = [datastr stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + datastr = [datastr stringByReplacingOccurrencesOfString:@" " withString:@""]; + datastr = [datastr stringByReplacingOccurrencesOfString:@"\\" withString:@""]; + + return datastr; +} + + + +#pragma mark 统一处理请求到的数据 +-(void)dealWithResponseObject:(NSData *)responseData cacheUrl:(NSString *)cacheUrl +{ + + NSString * dataString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; + //dataString = [self deleteSpecialCodeWithStr:dataString]; + DLog(@"response\n%@\n",dataString); + NSData *requestData = [dataString dataUsingEncoding:NSUTF8StringEncoding]; + + [self returnDataWithRequestData:requestData withUrl:cacheUrl]; + +} + +#pragma mark - 根据返回的数据进行统一的格式处理-requestData 网络或者是缓存的数据- +- (void)returnDataWithRequestData:(NSData *)requestData withUrl:(NSString *)url +{ + id myResult = [NSJSONSerialization JSONObjectWithData:requestData options:NSJSONReadingMutableContainers error:nil]; + + //判断是否为字典 + if ([myResult isKindOfClass:[NSDictionary class]]) { + + NSDictionary *response = (NSDictionary *)myResult; + response = [self removeNullsFromDictionary:response]; + //根据返回的接口内容来变 + BOOL flag = false; + if ([response.allKeys containsObject:@"ok"]) { + + flag = [[response objectForKey:@"ok"] boolValue]; + } + if ([response.allKeys containsObject:@"code"]) { + + if ([[response objectForKey:@"code"] integerValue] == 200) + { + flag = true; + }else + { + flag = false; + } + + } + + if (flag == true) { + DLog(@" 返回Json\n%@\n %@", [HQCommonUtils DataTOjsonString:response],url); + if ([response.allKeys containsObject:@"result"]) { + [self showSuccess:[response objectForKey:@"result"]]; + } + if ([response.allKeys containsObject:@"data"]) { + [self showSuccess:[response objectForKey:@"data"]]; + } + } + NSString * codestring = [response objectForKey:@"message"]; + if (flag == false ) { + [self showError:[response objectForKey:@"message"]]; + return; + } + } + +} + +- (id)removeNullsFromDictionary:(id)json { + if ([json isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary]; + for (NSString *key in [json allKeys]) { + id value = json[key]; + mutableDict[key] = [self removeNullsFromDictionary:value]; + } + return [mutableDict copy]; + } else if ([json isKindOfClass:[NSArray class]]) { + NSMutableArray *mutableArray = [NSMutableArray array]; + for (id value in json) { + [mutableArray addObject:[self removeNullsFromDictionary:value]]; + } + return [mutableArray copy]; + } else if ([json isKindOfClass:[NSNull class]]) { + return @""; // 或者替换成你想要的默认值 + } else { + return json; + } +} +#pragma mark - 拼接请求的网络地址 +- (NSString *)urlDictToStringWithUrlStr:(NSString *)urlString WithDict:(NSDictionary *)parameters +{ + if (!parameters) { + return urlString; + } + + NSMutableArray *parts = [NSMutableArray array]; + //enumerateKeysAndObjectsUsingBlock会遍历dictionary并把里面所有的key和value一组一组的展示给你,每组都会执行这个block 这其实就是传递一个block到另一个方法,在这个例子里它会带着特定参数被反复调用,直到找到一个ENOUGH的key,然后就会通过重新赋值那个BOOL *stop来停止运行,停止遍历同时停止调用block + [parameters enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { + //字符串处理 + key = [NSString stringWithFormat:@"%@",key]; + obj = [NSString stringWithFormat:@"%@",obj]; + + //接收key + NSString *finalKey = [key stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + //接收值 + NSString *finalValue = [obj stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + + + NSString *part = [NSString stringWithFormat:@"%@=%@",finalKey,finalValue]; + + [parts addObject:part]; + + }]; + + NSString *queryString = [parts componentsJoinedByString:@"&"]; + + queryString = queryString.length != 0 ? [NSString stringWithFormat:@"?%@",queryString] : @""; + + NSString *pathStr = [NSString stringWithFormat:@"%@%@",urlString,queryString]; + + return pathStr; + +} +#pragma mark -- 处理json格式的字符串中的换行符、回车符 +- (NSString *)deleteSpecialCodeWithStr:(NSString *)str { + NSString *string = [str stringByReplacingOccurrencesOfString:@"\r" withString:@""]; + string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + string = [string stringByReplacingOccurrencesOfString:@"\t" withString:@""]; + //string = [string stringByReplacingOccurrencesOfString:@" " withString:@""]; + string = [string stringByReplacingOccurrencesOfString:@"(" withString:@""]; + string = [string stringByReplacingOccurrencesOfString:@")" withString:@""]; + return string; +} + +#pragma mark 网络判断 +- (BOOL)requestBeforeJudgeConnect +{ + struct sockaddr zeroAddress; + bzero(&zeroAddress, sizeof(zeroAddress)); + zeroAddress.sa_len = sizeof(zeroAddress); + zeroAddress.sa_family = AF_INET; + SCNetworkReachabilityRef defaultRouteReachability = + SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); + SCNetworkReachabilityFlags flags; + BOOL didRetrieveFlags = + SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); + CFRelease(defaultRouteReachability); + if (!didRetrieveFlags) { + printf("Error. Count not recover network reachability flags\n"); + return NO; + } + BOOL isReachable = flags & kSCNetworkFlagsReachable; + BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; + BOOL isNetworkEnable = (isReachable && !needsConnection) ? YES : NO; + dispatch_async(dispatch_get_main_queue(), ^{ + [UIApplication sharedApplication].networkActivityIndicatorVisible = isNetworkEnable;/* 网络指示器的状态: 有网络 : 开 没有网络: 关 */ + + }); + return isNetworkEnable; +} + +#pragma mark - 返回数据的调度显示 +- (void)showSuccess:(id)response +{ + if(!self.requestDelegate) return; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored"-Wundeclared-selector" + + if ([self.requestDelegate respondsToSelector:@selector(Sucess:tag:)]) + { + [self.requestDelegate performSelector:@selector(Sucess:tag:) withObject:response withObject:self.bindTag]; + return; + } + +#pragma clang diagnostic pop +} + +- (void)showError:(NSString *)error +{ + if(!self.requestDelegate) return; +#pragma clang diagnostic push +#pragma clang diagnostic ignored"-Wundeclared-selector" + + if ([self.requestDelegate respondsToSelector:@selector(Failed:tag:)]) + { + [self.requestDelegate performSelector:@selector(Failed:tag:) withObject:error withObject:self.bindTag]; + return; + } + +#pragma clang diagnostic pop +} + +- (void)dealloc +{ + self.requestDelegate=nil; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDGETHealthTokenManager.h b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDGETHealthTokenManager.h new file mode 100644 index 0000000..26b9806 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDGETHealthTokenManager.h @@ -0,0 +1,27 @@ +// +// SDGETHealthTokenManager.h +// EscortProject +// +// Created by 仁康信息 on 2024/1/4. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void (^successBlock)(NSDictionary *responseObject); +typedef void (^failedBlock)(NSError *error); + +@interface SDGETHealthTokenManager : NSObject + ++(SDGETHealthTokenManager *)getHealthTokenManager; + +- (void)getTokenSuccess:(successBlock)success + failed:(failedBlock)failed; + + +-(void)getUserJoinStatusSuccess:(successBlock)success + failed:(failedBlock)failed; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDGETHealthTokenManager.m b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDGETHealthTokenManager.m new file mode 100644 index 0000000..0dfab49 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDGETHealthTokenManager.m @@ -0,0 +1,195 @@ +// +// SDGETHealthTokenManager.m +// EscortProject +// +// Created by 仁康信息 on 2024/1/4. +// + +#import "SDGETHealthTokenManager.h" +#include +#import "RSAObjC.h" + +@interface SDGETHealthTokenManager () +@property (nonatomic,strong)AFHTTPSessionManager *session; +@end + +@implementation SDGETHealthTokenManager + + +#pragma mark - 初始化单例 ++(SDGETHealthTokenManager *)getHealthTokenManager +{ + static SDGETHealthTokenManager *manager = nil; + static dispatch_once_t pred; + dispatch_once(&pred, ^{ + manager = [[self alloc] init]; + }); + return manager; +} +-(id)init +{ + self = [super init]; + if (self) { + _session = [AFHTTPSessionManager manager]; + + /***********请求的序列化**********/ + //传Json 对象 + _session.requestSerializer = [AFJSONRequestSerializer serializer]; + //设置超时时间 + [_session.requestSerializer willChangeValueForKey:@"timeoutInterval"]; + _session.requestSerializer.timeoutInterval = 10.f; + [_session.requestSerializer didChangeValueForKey:@"timeoutInterval"]; + + /**********响应的序列化**************/ + _session.responseSerializer = [AFJSONResponseSerializer serializer]; + _session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json",@"text/plain" ,@"text/javascript",@"text/html",nil]; + } + return self; + + +} + +-(void)httpRequestWithURL:(NSString *)url + parameters:(NSDictionary*)paraDic + hearders:(NSDictionary *)hearder + success:(successBlock)success + failed:(failedBlock)failed +{ + + NSString *fullURL = [NSString stringWithFormat:@"%@/%@",BASEURL,url]; + [_session POST:fullURL parameters:paraDic headers:hearder progress:^(NSProgress * _Nonnull uploadProgress) { + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + success(responseObject); + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + failed(error); + }]; +} + + + +-(void)httpRequestGetWithURL:(NSString *)url + parameters:(NSDictionary*)paraDic + hearders:(NSDictionary *)hearder + success:(successBlock)success + failed:(failedBlock)failed +{ + + NSString *fullURL = [NSString stringWithFormat:@"%@/%@",BASEURL,url]; + + [_session GET:fullURL parameters:paraDic headers:hearder progress:nil success:^(NSURLSessionTask *task, NSDictionary * responseObject) { + + success(responseObject); + } failure:^(NSURLSessionTask *operation, NSError *error) { + failed(error); + }]; +} + +- (void)getTokenSuccess:(successBlock)success failed:(failedBlock)failed { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + + NSMutableDictionary * headerDic = [[NSMutableDictionary alloc] init]; + NSDate * date = [NSDate date]; + NSDateFormatter *matter = [[NSDateFormatter alloc] init]; + matter.dateFormat = @"yyyyMMddHHmmss"; + NSString * dateString = [matter stringFromDate:date]; + + [dic setObject:dateString forKey:@"timeSign"]; + NSMutableDictionary * sigDic = [[NSMutableDictionary alloc] init]; + [sigDic setObject:dateString forKey:@"timeSign"]; + NSString * needSersy = [sigDic modelToJSONString]; +// 时间戳 + NSError *parseError; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:sigDic options:0 error:&parseError]; + if (parseError) { + //解析出错 + } + NSString * str = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; +// 时间戳 + NSMutableString * str3 = [[NSMutableString alloc]initWithString:str]; + + [str3 replaceOccurrencesOfString:@"\\" withString:@"" options:1 range:NSMakeRange(0, str3.length)]; + + [str3 appendString:@"dd05f1c54d63749eda95f9fa6d49v442a"]; + + NSString * md5str = [self getMd5_32Bit_String:str3]; + + [headerDic setObject:dateString forKey:@"X-TIMESTAMP"]; + [headerDic setObject:md5str forKey:@"X-Sign"]; + + [self httpRequestGetWithURL:@"gateway/sys/getPublicKey" parameters:dic hearders:@{@"X-TIMESTAMP":dateString,@"X-Sign":md5str} success:^(NSDictionary * _Nonnull responseObject) { + + if ([responseObject.allKeys containsObject:@"code"]) { + + if ([[responseObject objectForKey:@"code"] integerValue] == 200) + { + NSString *pubkey ; + if ([responseObject.allKeys containsObject:@"result"]) { + pubkey = [NSString stringWithFormat:@"-----BEGIN PUBLIC KEY-----\n%@\n-----END PUBLIC KEY-----",responseObject[@"result"]]; + // 时间戳 + } + HQUserInfo * user = [HQCommonUtils keyedUnarchiverWithKey:LoginUserInfo]; + + NSString *ret = [RSAObjC encrypt:user.idCard PublicKey:pubkey]; + DLog(@"encrypted: %@", ret); + + if (ValidStr(ret)) { +// KPostNotification(KNotificationLoginStateChange, @NO); + return; + } + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:[NSString stringWithFormat:@"RSA_%@",ret] forKey: @"idcard"]; + + NSDate * date = [NSDate date]; + NSDateFormatter *matter = [[NSDateFormatter alloc] init]; + matter.dateFormat = @"yyyyMMddHHmmss"; + NSString * dateString = [matter stringFromDate:date]; + + NSError *parseError; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parmDic options:0 error:&parseError]; + if (parseError) { + //解析出错 + } + NSString * str = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + // 时间戳 + NSMutableString * str3 = [[NSMutableString alloc]initWithString:str]; + + [str3 replaceOccurrencesOfString:@"\\" withString:@"" options:1 range:NSMakeRange(0, str3.length)]; + + [str3 appendString:@"dd05f1c54d63749eda95f9fa6d49v442a"]; + + NSString * md5str = [self getMd5_32Bit_String:str3]; + + + [self httpRequestWithURL:@"gateway/sys/thirdAppGetTokenByIdCard" parameters:parmDic hearders:@{@"X-TIMESTAMP":dateString,@"X-Sign":md5str} success:success failed:failed]; + } + else + { + success(responseObject); + + } + } + + + } failed:^(NSError * _Nonnull error) { + + }]; + +} + + + +- (NSString *)getMd5_32Bit_String:(NSString *)srcString { +// 参数 srcString 传进来的字符串 +// 参数 isUppercase 是否需要大小写 + const char *cStr = [srcString UTF8String]; + unsigned char digest[CC_MD5_DIGEST_LENGTH]; + CC_MD5( cStr, (CC_LONG)srcString.length, digest ); + NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; + for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) + [result appendFormat:@"%02X", digest[i]]; + return result; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDHttpRequest.h b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDHttpRequest.h new file mode 100644 index 0000000..3e45231 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDHttpRequest.h @@ -0,0 +1,33 @@ +// +// SDHttpRequest.h +// colorPrintingMaster +// +// Created by 青山小明 on 17/5/3. +// Copyright © 2017年 zhangming. All rights reserved. +// + +#import +typedef void (^successBlock)(NSDictionary *responseObject); +typedef void (^failedBlock)(NSError *error); + +@interface SDHttpRequest : NSObject ++(SDHttpRequest *)httpRequest; + +#pragma mark - 首页 +- (void)getInterWatchDataUrlWithParm:(NSMutableDictionary *)parmDic + Success:(successBlock)success + failed:(failedBlock)failed; + + +#pragma mark - + +-(void)postWithParameter:(NSDictionary *)para + images:(NSArray *)images + success:(successBlock)success + failed:(failedBlock)failed; + +//获取服务地址 +- (void)getChangeUrlSuccess:(successBlock)success + failed:(failedBlock)failed; + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDHttpRequest.m b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDHttpRequest.m new file mode 100644 index 0000000..5ee23a2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/SDHttpRequest.m @@ -0,0 +1,133 @@ +// +// SDHttpRequest.m +// colorPrintingMaster +// +// Created by 青山小明 on 17/5/3. +// Copyright © 2017年 zhangming. All rights reserved. +// + +#import "SDHttpRequest.h" +#import "AFNetworking.h" +#include +#import "RSAObjC.h" +//static SDHttpRequest *singleton = nil; + +@interface SDHttpRequest () +@property (nonatomic,strong)AFHTTPSessionManager *session; +@end + +@implementation SDHttpRequest +#pragma mark - 初始化单例 ++(SDHttpRequest *)httpRequest +{ + static SDHttpRequest *manager = nil; + static dispatch_once_t pred; + dispatch_once(&pred, ^{ + manager = [[self alloc] init]; + }); + return manager; +} +-(id)init +{ + self = [super init]; + if (self) { + _session = [AFHTTPSessionManager manager]; + + /***********请求的序列化**********/ + //传Json 对象 + _session.requestSerializer = [AFJSONRequestSerializer serializer]; + //设置超时时间 + [_session.requestSerializer willChangeValueForKey:@"timeoutInterval"]; + _session.requestSerializer.timeoutInterval = 30.f; + [_session.requestSerializer didChangeValueForKey:@"timeoutInterval"]; + + /**********响应的序列化**************/ + _session.responseSerializer = [AFJSONResponseSerializer serializer]; + _session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json",@"text/plain" ,@"text/javascript",@"text/html",nil]; + } + return self; +} +#pragma mark---请求调用的方法 +-(void)httpRequestWithURL:(NSString *)url + parameters:(NSDictionary*)paraDic + success:(successBlock)success + failed:(failedBlock)failed +{ + NSUserDefaults * tokenDefaul = [NSUserDefaults standardUserDefaults]; + + NSString * token = [tokenDefaul objectForKey:KHEALTHTOKEN]; + + + + NSString *fullURL = [NSString stringWithFormat:@"%@/%@",BASEURL,url]; + [_session POST:fullURL parameters:paraDic headers: @{@"X-Access-Token":token} progress:^(NSProgress * _Nonnull uploadProgress) { + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + success(responseObject); + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + failed(error); + }]; +} + +- (void)uploadImagesWithURL:(NSString *)url + parameters:(NSDictionary *)paraDic + hearders:(NSDictionary *)hearder + imagesKey:(NSString *)imagesKey + images:(NSArray *)images + success:(successBlock)success + failed:(failedBlock)failed +{ + NSString *fullURL = [NSString stringWithFormat:@"%@/%@",BASEURL,url]; + + [_session POST:fullURL parameters:paraDic headers:hearder constructingBodyWithBlock:^(id _Nonnull formData) { + for (UIImage *image in images) + { + [formData appendPartWithFileData:UIImageJPEGRepresentation(image, 0.5) + name:imagesKey + fileName:@"1.jpeg" + mimeType:@"image/jpeg"]; + } + + } progress:^(NSProgress * _Nonnull uploadProgress) { + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + success(responseObject); + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + failed(error); + }]; +} + +-(void)httpRequestGetWithURL:(NSString *)url + parameters:(NSDictionary*)paraDic + success:(successBlock)success + failed:(failedBlock)failed +{ + NSUserDefaults * tokenDefaul = [NSUserDefaults standardUserDefaults]; + + NSString * token = [tokenDefaul objectForKey:KHEALTHTOKEN]; + + NSString *fullURL = [NSString stringWithFormat:@"%@/%@",BASEURL,url]; + + [_session GET:fullURL parameters:paraDic headers:@{@"X-Access-Token":token} progress:nil success:^(NSURLSessionTask *task, NSDictionary * responseObject) { + + success(responseObject); + } failure:^(NSURLSessionTask *operation, NSError *error) { + failed(error); + }]; +} + + +#pragma mark - 首页 +- (void)getInterWatchDataUrlWithParm:(NSMutableDictionary *)parmDic + Success:(successBlock)success + failed:(failedBlock)failed { + + //参数 + [self httpRequestGetWithURL:@"health-watch/watchH5Api/indexDataNew" + parameters:parmDic success:success failed:failed]; +} + + + + + + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/RuntimeManager/SwapMethodManager.h b/XinjiangProject/XinjiangProject/Manager/RuntimeManager/SwapMethodManager.h new file mode 100644 index 0000000..3a63f1c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/RuntimeManager/SwapMethodManager.h @@ -0,0 +1,20 @@ +// +// SwapMethodManager.h +// WDYAdjustFontSize +// +// Created by wdyzmx on 2022/1/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SwapMethodManager : NSObject +/// runtime方法交换 +/// @param class 对象的类 +/// @param originalSel 对象原方法 +/// @param swizzledSel 对象所要交换的方法 ++ (void)swapMethodInClass:(Class)class originalMethod:(SEL)originalSel swizzledMethod:(SEL)swizzledSel; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Manager/RuntimeManager/SwapMethodManager.m b/XinjiangProject/XinjiangProject/Manager/RuntimeManager/SwapMethodManager.m new file mode 100644 index 0000000..15dc29d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/RuntimeManager/SwapMethodManager.m @@ -0,0 +1,33 @@ +// +// SwapMethodManager.m +// WDYAdjustFontSize +// +// Created by wdyzmx on 2022/1/19. +// + +#import "SwapMethodManager.h" +#import + +@implementation SwapMethodManager + ++ (void)swapMethodInClass:(Class)class originalMethod:(SEL)originalSel swizzledMethod:(SEL)swizzledSel { + Method originalMethod = class_getInstanceMethod(class, originalSel); + Method swizzledMethod = class_getInstanceMethod(class, swizzledSel); + + BOOL willAddMethod = + class_addMethod(class, + originalSel, + method_getImplementation(swizzledMethod), + method_getTypeEncoding(swizzledMethod)); + + if (willAddMethod) { + class_replaceMethod(class, + swizzledSel, + method_getImplementation(originalMethod), + method_getTypeEncoding(originalMethod)); + } else { + method_exchangeImplementations(originalMethod, swizzledMethod); + } +} + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/TUIManager/ESCTUIManager.h b/XinjiangProject/XinjiangProject/Manager/TUIManager/ESCTUIManager.h new file mode 100644 index 0000000..7db5257 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/TUIManager/ESCTUIManager.h @@ -0,0 +1,68 @@ +// +// ESCTUIManager.h +// EscortProject +// +// Created by 仁康信息 on 2023/2/16. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ESCTUIManager : NSObject + +/* + 是否已经登录 + */ ++ (BOOL)TUIUserStatus; + +/* + 登录腾讯IM + */ + ++ (void)loginInitTUISDKAppidWith:(int)sdkAppid UserID:(NSString *)userID userSig:(NSString *)userSig; + + +/* + 发起聊天 : + isUserID:是否为单聊 false:群聊 + chatConnetID:会话id + isAudio:语音是否开启 + isVideo:视频是否开启 + + */ + ++ (void)createUITUIChatViewControllerisGroup:(BOOL)isGroup + chatConnetID:(NSString *)chatConnetID + isAudio:(BOOL)isAudio + isVideo:(BOOL)isVideo; + + +/* + 发起1对1视频通话(假设 userId 为 mike) + */ + ++ (void)sendOneToOneVideo:(NSString *)userID; + +/* + 发起群组视频通话(假设 userId 为 mike) + */ + ++ (void)sendGroupVideo:(NSString *)groupID withUserIdList:(NSArray *)userList; + +/* + 发起1对1语音通话(假设 userId 为 mike) + */ + ++ (void)sendOneToOneAudio:(NSString *)userID; + + +/* + 退出登录腾讯Im + */ + ++ (void)outLoginTUISDK; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Manager/TUIManager/ESCTUIManager.m b/XinjiangProject/XinjiangProject/Manager/TUIManager/ESCTUIManager.m new file mode 100644 index 0000000..b13398b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/TUIManager/ESCTUIManager.m @@ -0,0 +1,116 @@ +// +// ESCTUIManager.m +// EscortProject +// +// Created by 仁康信息 on 2023/2/16. +// + +#import "ESCTUIManager.h" +#import "TUIC2CChatViewController.h" +#import "TUICallKit.h" + +@implementation ESCTUIManager + + ++ (BOOL)TUIUserStatus { + + return [TUILogin isUserLogined]; + +} + ++ (void)loginInitTUISDKAppidWith:(int)sdkAppid UserID:(NSString *)userID userSig:(NSString *)userSig{ + + [[TUICallEngine createInstance] init:sdkAppid userId:userID userSig:userSig succ:^{ + + } fail:^(int code, NSString * _Nullable errMsg) { + + }]; + + + [TUILogin login:sdkAppid userID:userID userSig:userSig succ:^{ + +// KPostNotification(KNotificationLoginIMResult, @YES); + + } fail:^(int code, NSString *msg) { + + [EasyTextView showErrorText:@"IM登录失败"]; + + }]; + + [[TUICallEngine createInstance] addObserver:self]; + +} + +/* + 发起聊天 : + isUserID:是否为单聊 false:群聊 + chatConnetID:会话id + isAudio:语音是否开启 + isVideo:视频是否开启 + + */ + ++ (void)createUITUIChatViewControllerisGroup:(BOOL)isGroup + chatConnetID:(NSString *)chatConnetID + isAudio:(BOOL)isAudio + isVideo:(BOOL)isVideo { + + TUIChatConversationModel *data = [[TUIChatConversationModel alloc] init]; + //显示对方正在输入状态 + data.avatarImage = [UIImage imageNamed:@""]; + data.otherSideTyping = true; + if(isGroup == false) { + data.userID = chatConnetID; + } + else + { + data.groupID = chatConnetID; + } + // TUIC2CChatViewController + TUIC2CChatViewController *vc = [[TUIC2CChatViewController alloc] init]; + [vc setConversationData:data]; + // 显示翻译按钮 +// TUIChatConfig.defaultConfig.enableTextTranslation = YES; + //不显示视频和语音 + [TUIChatConfig defaultConfig].enableVideoCall = isVideo; // YES:开启,NO:关闭 + [TUIChatConfig defaultConfig].enableAudioCall = isAudio; // YES:开启,NO:关闭 + // 把 TUIC2CChatViewController 添加到自己的 ViewController + + HQBaseViewController * currentVc =(HQBaseViewController *)[HQCommonUtils getCurrentVC]; + if (!currentVc) { + + currentVc = [[HQBaseViewController alloc] init]; + } + [currentVc addChildViewController:vc]; + [currentVc.view addSubview:vc.view]; +} + ++ (void)outLoginTUISDK { + + [TUILogin logout:^{ + + + } fail:^(int code, NSString *msg) { + + + }]; + +} + ++ (void)sendOneToOneVideo:(NSString *)userID { + + [[TUICallKit createInstance] call:userID callMediaType:TUICallMediaTypeVideo]; +} + ++ (void)sendGroupVideo:(NSString *)groupID withUserIdList:(NSArray *)userList { + + [[TUICallKit createInstance] groupCall:groupID userIdList:userList callMediaType:TUICallMediaTypeVideo]; +} + + ++ (void)sendOneToOneAudio:(NSString *)userID{ + + [[TUICallKit createInstance] call:userID callMediaType:TUICallMediaTypeAudio]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.h b/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.h new file mode 100755 index 0000000..5be97fe --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.h @@ -0,0 +1,40 @@ +// +// HQUserInfo.h +// idleBuy +// +// Created by ios on 2018/5/30. +// Copyright © 2018年 ios. All rights reserved. +// + +#import + +@interface HQUserInfo : NSObject + +@property (nonatomic, strong) NSDictionary *userInfo; + +@property (nonatomic, copy) NSString * user_id; +@property (nonatomic, copy) NSString * username; +@property (nonatomic, copy) NSString * realname; +@property (nonatomic, copy) NSString * avatar; +@property (nonatomic, copy) NSString * phone; +@property (nonatomic, copy) NSString * orgCode; +@property (nonatomic, copy) NSString * sex; +@property (nonatomic, copy) NSString * loginTenantId; +@property (nonatomic, copy) NSString * status_dictText; +@property (nonatomic, copy) NSString * delFlag; +@property (nonatomic, copy) NSString * workNo; +@property (nonatomic, copy) NSString * idCard; +@property (nonatomic, copy) NSString * sex_dictText; + +@property (nonatomic, copy) NSString * personType; + +@property (nonatomic, strong) NSDictionary * secondDepart; + +@property (nonatomic, copy) NSString * depart_id; +@property (nonatomic, copy) NSString * parentId; +@property (nonatomic, copy) NSString * departName; +@property (nonatomic, copy) NSString * departOrder; + +@property (nonatomic, copy) NSString * token; + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.m b/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.m new file mode 100755 index 0000000..cb080a3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.m @@ -0,0 +1,77 @@ +// +// HQUserInfo.m +// idleBuy +// +// Created by ios on 2018/5/30. +// Copyright © 2018年 ios. All rights reserved. +// + +#import "HQUserInfo.h" + +@implementation HQUserInfo +- (void)encodeWithCoder:(NSCoder *)aCoder +{ + [aCoder encodeObject:self.userInfo forKey:@"userInfo"]; + [aCoder encodeObject:self.user_id forKey:@"user_id"]; + [aCoder encodeObject:self.avatar forKey:@"avatar"]; + [aCoder encodeObject:self.username forKey:@"username"]; + [aCoder encodeObject:self.realname forKey:@"realname"]; + [aCoder encodeObject:self.phone forKey:@"phone"]; + [aCoder encodeObject:self.idCard forKey:@"idCard"]; + [aCoder encodeObject:self.depart_id forKey:@"depart_id"]; + [aCoder encodeObject:self.parentId forKey:@"parentId"]; + [aCoder encodeObject:self.departName forKey:@"departName"]; + [aCoder encodeObject:self.token forKey:@"token"]; + [aCoder encodeObject:self.sex_dictText forKey:@"sex_dictText"]; + + + +} +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super init]; + if (self) + { + self.userInfo = [aDecoder decodeObjectForKey:@"userInfo"]; + self.user_id = [aDecoder decodeObjectForKey:@"user_id"]; + self.avatar = [aDecoder decodeObjectForKey:@"avatar"]; + self.username = [aDecoder decodeObjectForKey:@"username"]; + self.realname = [aDecoder decodeObjectForKey:@"realname"]; + self.phone = [aDecoder decodeObjectForKey:@"phone"]; + self.idCard = [aDecoder decodeObjectForKey:@"idCard"]; + self.depart_id = [aDecoder decodeObjectForKey:@"depart_id"]; + self.parentId = [aDecoder decodeObjectForKey:@"parentId"]; + self.departName = [aDecoder decodeObjectForKey:@"departName"]; + self.token = [aDecoder decodeObjectForKey:@"token"]; + self.sex_dictText = [aDecoder decodeObjectForKey:@"sex_dictText"]; + + } + return self; +} + + +- (void)setUserInfo:(NSDictionary *)userInfo { + + _userInfo = userInfo; + self.user_id = [_userInfo objectForKey:@"id"]; + self.avatar = [NSString stringWithFormat:@"%@%@",ResourceAddress,[_userInfo objectForKey:@"avatar"]]; + self.phone = [_userInfo objectForKey:@"phone"]; + self.realname = [_userInfo objectForKey:@"realname"]; + self.username = [_userInfo objectForKey:@"username"]; + self.sex = [_userInfo objectForKey:@"sex"]; + self.idCard = [_userInfo objectForKey:@"idCard"]; + self.personType = [_userInfo objectForKey:@"personType"]; + self.secondDepart = [_userInfo objectForKey:@"secondDepart"]; + self.sex_dictText = [_userInfo objectForKey:@"sex_dictText"]; + self.depart_id = [self.secondDepart objectForKey:@"id"]; + self.parentId = [self.secondDepart objectForKey:@"parentId"]; + self.departName = [self.secondDepart objectForKey:@"departName"]; +} + + +-(void)setToken:(NSString *)token { + _token = token; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Manager/UserManager/XMKeychainTool.h b/XinjiangProject/XinjiangProject/Manager/UserManager/XMKeychainTool.h new file mode 100755 index 0000000..cad3e97 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/UserManager/XMKeychainTool.h @@ -0,0 +1,36 @@ + +// XMKeychainTool.h +// idleBuy +// +// Created by ios on 2018/5/28. +// Copyright © 2018年 ios. All rights reserved. +#import +#import + +@interface XMKeychainTool : NSObject +/** + * 储存字符串到🔑钥匙串 + * + * @param sValue 对应的Value + * @param sKey 对应的Key + */ ++ (void)saveKeychainValue:(NSString *)sValue key:(NSString *)sKey; + + +/** + * 从🔑钥匙串获取字符串 + * + * @param sKey 对应的Key + * + * @return 返回储存的Value + */ ++ (NSString *)readKeychainValue:(NSString *)sKey; + + +/** + * 从🔑钥匙串删除字符串 + * + * @param sKey 对应的Key + */ ++ (void)deleteKeychainValue:(NSString *)sKey; +@end diff --git a/XinjiangProject/XinjiangProject/Manager/UserManager/XMKeychainTool.m b/XinjiangProject/XinjiangProject/Manager/UserManager/XMKeychainTool.m new file mode 100755 index 0000000..3fd3154 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Manager/UserManager/XMKeychainTool.m @@ -0,0 +1,57 @@ +// +// SDKeychainTool.m +// NewLottery +// +// Created by 孙号斌 on 2017/2/14. +// Copyright © 2017年 孙号斌. All rights reserved. +// + +#import "XMKeychainTool.h" + +@implementation XMKeychainTool ++ (NSMutableDictionary *)getKeychainQuery:(NSString *)service{ + return [NSMutableDictionary dictionaryWithObjectsAndKeys: + (__bridge_transfer id)kSecClassGenericPassword, + (__bridge_transfer id)kSecClass,service, + (__bridge_transfer id)kSecAttrService,service, + (__bridge_transfer id)kSecAttrAccount, + (__bridge_transfer id)kSecAttrAccessibleAfterFirstUnlock, + (__bridge_transfer id)kSecAttrAccessible, + nil]; +} + ++ (void)saveKeychainValue:(NSString *)sValue key:(NSString *)sKey{ + NSMutableDictionary * keychainQuery = [self getKeychainQuery:sKey]; + SecItemDelete((__bridge_retained CFDictionaryRef)keychainQuery); + + [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:sValue] forKey:(__bridge_transfer id)kSecValueData]; + + SecItemAdd((__bridge_retained CFDictionaryRef)keychainQuery, NULL); + +} + ++ (NSString *)readKeychainValue:(NSString *)sKey +{ + NSString *ret = nil; + NSMutableDictionary *keychainQuery = [self getKeychainQuery:sKey]; + [keychainQuery setObject:(id)kCFBooleanTrue forKey:(__bridge_transfer id)kSecReturnData]; + [keychainQuery setObject:(__bridge_transfer id)kSecMatchLimitOne forKey:(__bridge_transfer id)kSecMatchLimit]; + CFDataRef keyData = NULL; + if (SecItemCopyMatching((__bridge CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) { + @try { + ret = (NSString *)[NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData]; + } @catch (NSException *e) { + NSLog(@"Unarchive of %@ failed: %@", sKey, e); + } @finally { + } + } + if (keyData) + CFRelease(keyData); + return ret; +} ++ (void)deleteKeychainValue:(NSString *)sKey { + NSMutableDictionary *keychainQuery = [self getKeychainQuery:sKey]; + SecItemDelete((__bridge CFDictionaryRef)keychainQuery); +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+AppService.h b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+AppService.h new file mode 100644 index 0000000..f15a5a2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+AppService.h @@ -0,0 +1,35 @@ +// +// AppDelegate+appService.h +// healthQuestion +// +// Created by xulei on 2022/8/11. +// + + +#import +#import "AppDelegate.h" + +@interface AppDelegate (AppService) + +//初始化服务 +-(void)initService; +- (void)chageUrlService; +//初始化 window + +-(void)initWindow; + +//初始化键盘 +-(void)initIQKeyBord; + +//初始化高德地图 +-(void)configureAPIKey; + +//初始化 UMeng +-(void)initUMeng; + +//单例 ++ (AppDelegate *)shareAppDelegate; + + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+AppService.m b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+AppService.m new file mode 100644 index 0000000..8f52968 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+AppService.m @@ -0,0 +1,408 @@ +// +// AppDelegate+appService.m +// healthQuestion +// +// Created by xulei on 2022/8/11. +// + +#import "AppDelegate+AppService.h" +#import "HQBaseTabBarController.h" +#import "HQLoginViewController.h" +#import +#import + +#import + + +@implementation AppDelegate (AppService) + +#pragma mark ————— 初始化服务 ————— +-(void)initService{ + + //网络状态监听 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(netWorkStateChange:) + name:KNotificationNetWorkStateChange + object:nil]; + + //登录状态改变通知 + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(loginStateChange:) + name:KNotificationLoginStateChange + object:nil]; + + + //切换SOStabbar + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(tabBarSoSChange:) + name:KNotificSelectSoSTabbar + object:nil]; + + //切换体检tabbar + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(tabBarPhyChange:) + name:KNotificSelectPhysicalTabbar + object:nil]; + + //切换档案tabbar + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(tabBarFileChange:) + name:KNotificSelectFileTabbar + object:nil]; + if ([HQCommonUtils isLogin]) { + //腾讯im + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"IMAPI" NeedToken:nil]; + [proctocolApi GetIMLoginAccount:nil]; + } +} + + +#pragma mark ————— 初始化window ————— +-(void)initWindow{ + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + self.window.backgroundColor = KWhiteColor; + //直接进入显示登录页面 +// if ([HQCommonUtils isLogin]) { + self.mainTabBar = [HQBaseTabBarController new]; + self.mainTabBar.delegate =self; + self.window.rootViewController = self.mainTabBar; + [self.window makeKeyAndVisible]; +// }else { +// HQLoginViewController * loginvc = [[HQLoginViewController alloc] init]; +// HQBaseNavigationController * nav = [[HQBaseNavigationController alloc] initWithRootViewController:loginvc]; +// self.window.rootViewController = nav; +// } +// [self.window makeKeyAndVisible]; + + //判断是否是首次启动 + if(![[NSUserDefaults standardUserDefaults] boolForKey:@"agreeStatus"]){ + //添加隐私合规弹窗 + [self addAlertController]; + //更新App是否显示隐私弹窗的状态,隐私弹窗是否包含高德SDK隐私协议内容的状态. since 8.1.0 + [MAMapView updatePrivacyShow:AMapPrivacyShowStatusDidShow privacyInfo:AMapPrivacyInfoStatusDidContain]; + } + [[TUICallEngine createInstance] addObserver:self]; +} + +#pragma mark:请求前缀 +- (void)chageUrlService { + + AFHTTPSessionManager *session=[AFHTTPSessionManager manager]; + // AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; + + session.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",@"text/plain", nil]; + //超时时间 + + session.requestSerializer.timeoutInterval= 30.f; + session.responseSerializer = [AFHTTPResponseSerializer serializer]; + + session.requestSerializer = [AFJSONRequestSerializer serializer]; + + session.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + + // 获取应用的版本号 + NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + // 将版本号按照点(.)分割成数组 + NSArray * components = [version componentsSeparatedByString:@"."]; + + // 获取数组中的最后一个元素 + NSString * lastComponent = [components lastObject]; + // 如果需要将其转换为整数 + NSInteger lastNumber = [lastComponent integerValue]; + + [parmDic setObject:@(lastNumber) forKey:@"version"]; + [parmDic setObject:@"com.question.QinghaiProvince" forKey:@"pkg"]; + [session GET:@"https://base.icdat.cn/v2/url" parameters:parmDic headers:@{@"X-ClientSign":@"Quarry"} progress:^(NSProgress * _Nonnull downloadProgress) { + + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + NSString * dataString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; + DLog(@"response\n%@\n",dataString); + NSData *requestData = [dataString dataUsingEncoding:NSUTF8StringEncoding]; + + id myResult = [NSJSONSerialization JSONObjectWithData:requestData options:NSJSONReadingMutableContainers error:nil]; + //判断是否为字典 + if ([myResult isKindOfClass:[NSDictionary class]]) { + + NSDictionary *response = (NSDictionary *)myResult; + if ([response.allKeys containsObject:@"result"]) { + NSDictionary * resultDic = [response objectForKey:@"result"]; + + if ([resultDic.allKeys containsObject:@"api"]) { + [[NSUserDefaults standardUserDefaults] setObject:[resultDic objectForKey:@"api"] forKey:@"HTTPS"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + NSString * apiString = [resultDic objectForKey:@"api"]; + //判断是否正在审 + BOOL isExmine; + if ([apiString containsString:@"api.out.icdat.cn"]) { //正在审 + isExmine = true; + }else + { + isExmine = false; + } + [[NSUserDefaults standardUserDefaults] setObject:@(isExmine) forKey:@"isExmine"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + + if ([resultDic.allKeys containsObject:@"h5"]) { + [[NSUserDefaults standardUserDefaults] setObject:[resultDic objectForKey:@"h5"] forKey:@"IntervenH5"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + if ([resultDic.allKeys containsObject:@"h5Host"]) { + [[NSUserDefaults standardUserDefaults] setObject:[resultDic objectForKey:@"h5Host"] forKey:@"H5DevHost"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + if ([resultDic.allKeys containsObject:@"health"]) { + [[NSUserDefaults standardUserDefaults] setObject:[resultDic objectForKey:@"health"] forKey:@"BASEURL"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + KPostNotification(KNotificAgreeProtoocl, nil); + } + } + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + NSString * statusCode = [error.userInfo objectForKey:@"NSLocalizedDescription"]; + //请求超时 + if (error.code == -1001) { + [EasyTextView showErrorText:@"请求超时"]; + } + [[NSUserDefaults standardUserDefaults] setObject:@"https://api.cqygjk.com" forKey:@"HTTPS"]; + [[NSUserDefaults standardUserDefaults] setObject:@"https://yyjk.cqygjk.com/" forKey:@"BASEURL"]; + [[NSUserDefaults standardUserDefaults] setObject:@"api.cqygjk.com" forKey:@"IntervenH5"]; + [[NSUserDefaults standardUserDefaults] setObject:@"https://api.cqygjk.com" forKey:@"H5DevHost"]; + + [[NSUserDefaults standardUserDefaults] synchronize]; + KPostNotification(KNotificAgreeProtoocl, nil); + }]; + +} + + +#pragma mark: 键盘回收 +- (void)initIQKeyBord { + + IQKeyboardManager *keyboardManager = [IQKeyboardManager sharedManager]; // 获取类库的单例变量 + + keyboardManager.enable = YES; // 控制整个功能是否启用 + + keyboardManager.shouldResignOnTouchOutside = YES; // 控制点击背景是否收起键盘 + + keyboardManager.shouldToolbarUsesTextFieldTintColor = YES; // 控制键盘上的工具条文字颜色是否用户自定义 + + keyboardManager.toolbarManageBehavior = IQAutoToolbarBySubviews; // 有多个输入框时,可以通过点击Toolbar 上的“前一个”“后一个”按钮来实现移动到不同的输入框 + + keyboardManager.enableAutoToolbar = YES; // 控制是否显示键盘上的工具条 + + keyboardManager.shouldShowToolbarPlaceholder = YES; // 是否显示占位文字 + + keyboardManager.placeholderFont = [UIFont boldSystemFontOfSize:17]; // 设置占位文字的字体 + + keyboardManager.keyboardDistanceFromTextField = 10.0f; // 输入框距离键盘的距离 + + +} +//初始化高德 +- (void)configureAPIKey +{ + + if ([AMAPSDKKEY length] == 0) + { + NSString *reason = [NSString stringWithFormat:@"apiKey为空,请检查key是否正确设置。"]; + + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:reason delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; + + [alert show]; + } + + [AMapServices sharedServices].apiKey = AMAPSDKKEY; +} + +#pragma mark:进来显示弹框--隐私权限 + +- (void)addAlertController{ + + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + + paragraphStyle.alignment = NSTextAlignmentLeft; + + NSMutableAttributedString *message = [[NSMutableAttributedString alloc] initWithString:@"\n亲,感谢您对健康咨询员工端一直以来的信任!我们依据最新的监管要求更新了健康咨询员工端《隐私权政策》,特向您说明如下\n1.为向您提供交易相关基本功能,我们会收集、使用必要的信息;\n2.基于您的明示授权,我们可能会获取您的位置(为您提供服务)等信息,您有权拒绝或取消授权;\n3.我们会采取业界先进的安全措施保护您的信息安全;\n4.未经您同意,我们不会从第三方处获取、共享或向提供您的信息;" attributes:@{ + NSParagraphStyleAttributeName:paragraphStyle, + }]; + + [message setAttributes:@{NSForegroundColorAttributeName:[UIColor blueColor]} range:[[message string] rangeOfString:@"《隐私权政策》"]]; + + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"温馨提示(隐私合规示例)" message:@"" preferredStyle:UIAlertControllerStyleAlert]; + + [alert setValue:message forKey:@"attributedMessage"]; + + UIAlertAction *conform = [UIAlertAction actionWithTitle:@"同意" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"agreeStatus"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + //更新用户授权高德SDK隐私协议状态. since 8.1.0 + [MAMapView updatePrivacyAgree:AMapPrivacyAgreeStatusDidAgree]; + [self chageUrlService]; + + }]; + + UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"不同意" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"agreeStatus"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + //更新用户授权高德SDK隐私协议状态. since 8.1.0 + [MAMapView updatePrivacyAgree:AMapPrivacyAgreeStatusNotAgree]; + [self chageUrlService]; + }]; + + [alert addAction:conform]; + [alert addAction:cancel]; + + [self.window.rootViewController presentViewController:alert animated:YES completion:nil]; +} + + +//代理方法,这个方法是来判断当点击某个tabBarItem时是否要点击 +- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{ + //判断用户是否登陆,这里我们可以从沙盒里面去取登陆状态 +// index = [tabBarController.viewControllers indexOfObject:viewController]; +// if (![HQCommonUtils isLogin] ) { +// if (index==2 || index==3) { +// HQLoginViewController *loginVC = [[HQLoginViewController alloc]init]; +//// self.mainTabBar.lastSelectIndex = index; +// //这里的NO是关键,如果是这个tabBarItem,就不要让他点击进去 +// UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:loginVC]; +// +// [[self getCurrentVC] presentViewController:nav animated:YES completion:nil]; +// +// return NO; +// } +// } + //当然其余的还是要点击进去的 + return YES; +} +#pragma mark ————— 网络状态变化 ————— +- (void)netWorkStateChange:(NSNotification *)notification +{ + BOOL isNetWork = [notification.object boolValue]; + + if (isNetWork) {//有网络 + + + }else {//无网络通知 + + [EasyTextView showErrorText:@"暂无网络!" config:^EasyTextConfig *{ + return [EasyTextConfig shared].setStatusType(TextStatusTypeMidden) ; + }]; + } +} + +- (void)loginStateChange:(NSNotification *)notification { + + BOOL islogin = [notification.object boolValue]; + + if (islogin) {//登录成功 重置Tabbar + self.mainTabBar = nil; + self.mainTabBar = [HQBaseTabBarController new]; + self.mainTabBar.delegate =self; + self.window.rootViewController = self.mainTabBar; + [self.window makeKeyAndVisible]; + + }else {//登陆失败加载登陆页面控制器 退出登录 + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + self.window.backgroundColor = KWhiteColor; + HQLoginViewController * loginvc = [[HQLoginViewController alloc] init]; + HQBaseNavigationController * nav = [[HQBaseNavigationController alloc] initWithRootViewController:loginvc]; + self.window.rootViewController = nav; + [self.window makeKeyAndVisible]; + + } +} + +#pragma mark: 字体修改 + + +- (void)fontSizeChange:(NSNotification *)notification { + + +} + + +#pragma mark: 切换tabbar +- (void)tabBarSoSChange:(NSNotification *)notification { + + self.mainTabBar.selectedIndex = 2; + +} + +- (void)tabBarPhyChange:(NSNotification *)notification { + + self.mainTabBar.selectedIndex = 3; + +} + +- (void)tabBarFileChange:(NSNotification *)notification { + + self.mainTabBar.selectedIndex = 4; + +} + + + + + ++ (AppDelegate *)shareAppDelegate{ + return (AppDelegate *)[[UIApplication sharedApplication] delegate]; +} + + +#pragma mark -网络请求处理 +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + + if ([tag isEqualToString:@"IMAPI"]) { + + NSDictionary * pamrDic = response; + + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + + + // 1. 从即时通信 IM 控制台获取应用 SDKAppID。 + // 2. 初始化 config 对象 + V2TIMSDKConfig *config = [[V2TIMSDKConfig alloc] init]; + + // 3. 指定 log 输出级别。 + config.logLevel = V2TIM_LOG_INFO; + // 4. 添加 V2TIMSDKListener 的事件监听器,self 是 id 的实现类,如果您不需要监听 IM SDK 的事件,这个步骤可以忽略。 + [[V2TIMManager sharedInstance] addIMSDKListener:self]; + // 5. 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 + [[V2TIMManager sharedInstance] initSDK:[model.sdkAppId intValue] config:config]; + [[V2TIMManager sharedInstance] addSimpleMsgListener:self]; + [[TUICallEngine createInstance] addObserver:self]; + [ESCTUIManager loginInitTUISDKAppidWith:[model.sdkAppId intValue] UserID:model.userId userSig:model.userSig]; + } +} + + +//在线时票据过期:此时您需要生成新的 userSig,并再次重新调用初始化。 +- (void)onKickedOffline { + + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + [ESCTUIManager outLoginTUISDK]; + KPostNotification(KNotificationLoginStateChange, @NO); + + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+PushService.h b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+PushService.h new file mode 100644 index 0000000..17c07fb --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+PushService.h @@ -0,0 +1,18 @@ + +// +// AppDelegate+pushService.h +// healthQuestion +// +// Created by xulei on 2022/8/11. +// + + +#import +#import "AppDelegate.h" + +@interface AppDelegate (PushService) + +- (void)initWithJPush:(NSDictionary *)launchOptions; + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+PushService.m b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+PushService.m new file mode 100644 index 0000000..1969025 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate+PushService.m @@ -0,0 +1,64 @@ +// +// AppDelegate+pushService.m +// healthQuestion +// +// Created by xulei on 2022/8/11. +// + +#import "AppDelegate+PushService.h" + +@implementation AppDelegate (PushService) + +- (void)initWithJPush:(NSDictionary *)launchOptions +{ + /* + NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; + [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil]; + //Required + //notice: 3.0.0及以后版本注册可以这样写,也可以继续用之前的注册方式 + JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init]; + entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound; + if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { + // 可以添加自定义categories + // NSSet *categories for iOS10 or later + // NSSet *categories for iOS8 and iOS9 + } + [JPUSHService registerForRemoteNotificationConfig:entity delegate:self]; + + // Optional + // 获取IDFA + // 如需使用IDFA功能请添加此代码并在初始化方法的advertisingIdentifier参数中填写对应值 + NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; + + // Required + // init Push + // notice: 2.1.5版本的SDK新增的注册方法,改成可上报IDFA,如果没有使用IDFA直接传nil + // 如需继续使用pushConfig.plist文件声明appKey等配置内容,请依旧使用[JPUSHService setupWithOption:launchOptions]方式初始化。 + BOOL isProduction; + #ifdef DEBUG + isProduction = YES; + #else + isProduction = NO; + #endif + [JPUSHService setupWithOption:launchOptions appKey:JpushAppKey + channel:@"App Store" + apsForProduction:isProduction + advertisingIdentifier:advertisingId]; + + //2.1.9版本新增获取registration id block接口。 + [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) { + if(resCode == 0){ + NSLog(@"registrationID获取成功:%@",registrationID); + + UserDefaultSetObjectForKey(registrationID, @"registrationID"); + + } + else{ + NSLog(@"registrationID获取失败,code:%d",resCode); + UserDefaultSetObjectForKey(@"0", @"registrationID"); + } + }]; + */ +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate.h b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate.h new file mode 100644 index 0000000..4498f81 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate.h @@ -0,0 +1,30 @@ +// +// AppDelegate.h +// healthQuestion +// +// Created by xulei on 2022/8/9. +// + +#import +#import "HQBaseTabBarController.h" +/**腾讯IM**/ +#import "TUIDefine.h" +#import "TUIBaseChatViewController.h" +#import "TUIThemeManager.h" +#import "TUILogin.h" +#import "TUIChatConfig.h" +#import "TUICallKit.h" +//Minimalist + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow * window; + +@property (nonatomic,assign)NSInteger allowRotate; + +@property (strong, nonatomic) HQBaseTabBarController * mainTabBar; + +@property (nonatomic,assign)NSInteger unreadNumber; + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate.m b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate.m new file mode 100644 index 0000000..f63fc1d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/AppDelegate/AppDelegate.m @@ -0,0 +1,178 @@ +// +// AppDelegate.m +// healthQuestion +// +// Created by xulei on 2022/8/9. +// + +#import "AppDelegate.h" +#import "SJRotationManager.h" +#import + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + + + + //前缀请求 + //初始化高德地图 + [self configureAPIKey]; + + //前缀请求 + [self chageUrlService]; + + [self initService]; + //初始化window + [self initWindow]; + //初始化IQKeybord + [self initIQKeyBord]; + // 监听推送 + [V2TIMManager.sharedInstance setAPNSListener:self]; + // 监听会话的未读数 + [[V2TIMManager sharedInstance] setConversationListener:self]; + + + SDImageWebPCoder*webPCoder = [SDImageWebPCoder sharedCoder]; + [[SDImageCodersManager sharedManager] addCoder:webPCoder]; + +#if DEBUG + +#else + [CheckProjectTool testAll]; + +#endif + + + return YES; +} + +// 2. 未读数发生变化后保存未读数 +- (void)onTotalUnreadMessageCountChanged:(UInt64)totalUnreadCount { + + self.unreadNumber = 0; +} +- (uint32_t)onSetAPPUnreadCount { + // 1. 获取自定义的角标 + uint32_t customBadgeNumber = 0; + + // 2. 加上 IM 的消息未读数 + customBadgeNumber += self.unreadNumber; + + // 3. 通过 IMSDK 上报给 IM 服务器 + return customBadgeNumber; +} + +- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { + return [SJRotationManager supportedInterfaceOrientationsForWindow:window]; +} + +#pragma mark - NSNotification + + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + +} + +- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray> * __nullable restorableObjects))restorationHandler { + + return YES; + +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + [application setApplicationIconBadgeNumber:0]; + [application cancelAllLocalNotifications]; + +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + [UIApplication sharedApplication].applicationIconBadgeNumber=0; + +} + + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + + + + +@end + +#warning Configuring rotation. 请配置旋转!! + +@implementation UIViewController (RotationConfiguration) +/// +/// 控制器是否可以旋转 +/// +- (BOOL)shouldAutorotate { + return NO; +} + +/// +/// 控制器旋转支持的方向 +/// +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + return UIInterfaceOrientationMaskPortrait; +} +@end + + +@implementation UITabBarController (RotationConfiguration) +- (UIViewController *)sj_topViewController { + if ( self.selectedIndex == NSNotFound ) + return self.viewControllers.firstObject; + return self.selectedViewController; +} + +- (BOOL)shouldAutorotate { + return [[self sj_topViewController] shouldAutorotate]; +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + return [[self sj_topViewController] supportedInterfaceOrientations]; +} + +- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { + return [[self sj_topViewController] preferredInterfaceOrientationForPresentation]; +} +@end + +@implementation UINavigationController (RotationConfiguration) +- (BOOL)shouldAutorotate { + return self.topViewController.shouldAutorotate; +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + return self.topViewController.supportedInterfaceOrientations; +} + +- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { + return self.topViewController.preferredInterfaceOrientationForPresentation; +} + +- (nullable UIViewController *)childViewControllerForStatusBarStyle { + return self.topViewController; +} + +- (nullable UIViewController *)childViewControllerForStatusBarHidden { + return self.topViewController; +} +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Base/BaseWebViewVC.h b/XinjiangProject/XinjiangProject/Project/Base/BaseWebViewVC.h new file mode 100644 index 0000000..d9f67a9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/BaseWebViewVC.h @@ -0,0 +1,39 @@ +// +// BaseWebViewVC.h +// ScarHousekeeper +// +// Created by 张小万 on 2021/1/21. +// + +#import +#import + + +NS_ASSUME_NONNULL_BEGIN + +typedef enum { + WkJSMessageTypeDefault = 0, + WkJSMessageTypeBack = 1, +}WkJSMessageType; +typedef enum { + RightDefaultType = 0, + RightCompleteType = 1, +}RightNavType; + +@protocol WebJSExport + +- (void)startFunction; +@end + +@interface BaseWebViewVC : HQBaseViewController + +@property (nonatomic, strong) NSString *webUrl; +@property (nonatomic, strong) NSString *webTitle; +@property (nonatomic, strong) JSContext *context; +@property (nonatomic, strong) WKWebView *wkWebView; +@property (nonatomic, assign) RightNavType rightType; + +- (void)webViewRequest; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Base/BaseWebViewVC.m b/XinjiangProject/XinjiangProject/Project/Base/BaseWebViewVC.m new file mode 100644 index 0000000..b393cf6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/BaseWebViewVC.m @@ -0,0 +1,249 @@ +// +// BaseWebViewVC.m +// ScarHousekeeper +// +// Created by 张小万 on 2021/1/21. +// + +#import "BaseWebViewVC.h" + +@interface BaseWebViewVC () + +@property (nonatomic, strong)NSURL *originalUrl; +@property (nonatomic, copy)NSString *videoUrl; +@property (nonatomic, copy)NSString *messageType; + + +@end + +@implementation BaseWebViewVC + + +#pragma mark - LifeCycle +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = [UIColor whiteColor]; + self.isHidenNaviBar = false; + [self addNavigationItemWithImageNames:@[@"whiteBack_icon"] isLeft:YES target:self action:@selector(backVC) tags:@[@""]]; + [self addSubviews]; + if (self.webTitle) { + self.navigationItem.title = self.webTitle; + } +} + +- (void)backVC { + + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; + if (_wkWebView) { + _wkWebView.navigationDelegate = self; + _wkWebView.UIDelegate = self; + _wkWebView.allowsBackForwardNavigationGestures = true; + + } +} + + +- (void)viewWillDisappear:(BOOL)animated{ + [super viewWillDisappear:animated]; + _wkWebView.navigationDelegate = nil; + _wkWebView.UIDelegate = nil; + //清除cookies + NSHTTPCookie *cookie; + NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + for (cookie in [storage cookies]) { + [storage deleteCookie:cookie]; + } + [[NSURLCache sharedURLCache] removeAllCachedResponses]; + [self clearWebViewCache]; +} + +#pragma mark - Create UI +- (void)addSubviews{ + WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; + WKPreferences *preferences = [[WKPreferences alloc]init]; + preferences.javaScriptEnabled = YES; + preferences.javaScriptCanOpenWindowsAutomatically = YES; + preferences.minimumFontSize = 10; + configuration.preferences = preferences; + [configuration.userContentController addScriptMessageHandler:self name:@"JSCallback"]; + [configuration.userContentController addScriptMessageHandler:self name:@"htmlBack"]; + //防止搜索框自动放大 注入js代码 + WKUserContentController *userController = [WKUserContentController new]; + NSString *jScript = @"var script = document.createElement('meta');script.name = 'viewport';script.content='width=device-width,user-scalable=no';document.getElementsByTagName('head')[0].appendChild(script);"; + + WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; + WKUserContentController * wkUController = [[WKUserContentController alloc] init]; + [wkUController addScriptMessageHandler: self name: @"finishActivity"];//不带参数的调用 + + [wkUController addUserScript:wkUScript]; + configuration.userContentController= wkUController; + + self.wkWebView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, WIDTH, MyViewHEIGHT) configuration:configuration]; + self.wkWebView.navigationDelegate = self; + self.wkWebView.UIDelegate = self; + if (@available(iOS 11.0, *)) { + self.wkWebView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [self.view addSubview:self.wkWebView]; + self.wkWebView.scrollView.bounces = false;//禁止滑动 + [self webViewRequest]; + /* + [self.wkWebView evaluateJavaScript:@"htmlBack" completionHandler:^(id _Nullable response, NSError * _Nullable error) { + NSLog(@"response: %@ error: %@", response, error); + if (response) { + [self back]; + } + }]; + */ + + +} + +- (void)finishActivity { + + +} + + +- (void)webViewRequest{ + NSString *urlString = self.webUrl; + [self hiddenAllMBProgressHUD]; + if (urlString.length > 0) { + [self showMBProgressHUDOnlyWithString:@"加载中"]; + NSURL *url = [NSURL URLWithString:urlString]; + NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; + if (self.wkWebView) { + [self.wkWebView loadRequest:urlRequest]; + } + } +} + + + + +#pragma mark - WKNavigationDelegate +- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{ + if ([message.name isEqualToString:@"JSCallback"]) { + if (message.body) { + NSData *jsonData = [message.body dataUsingEncoding:NSUTF8StringEncoding]; + NSError *err; + NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData + options:NSJSONReadingMutableContainers + error:&err]; + if(err) { + } + WkJSMessageType messageType = [[dic objectForKey:@"messageType"] intValue]; + switch (messageType) { + case WkJSMessageTypeBack:{ +// [self.navigationController popViewControllerAnimated:YES]; + } + break; + default: + break; + } + } + + } else if ([message.name isEqualToString:@"htmlBack"]) { + [[NSNotificationCenter defaultCenter] postNotificationName:@"fromWebToReloadData" object:nil]; + } +} + +#pragma mark - WKScriptMessageHandler +- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures { + [self hiddenAllMBProgressHUD]; + if (!navigationAction.targetFrame.isMainFrame) { + [webView loadRequest:navigationAction.request]; + } + return nil; +} + +- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{ + if (!self.webTitle) { + self.title = @"加载中..."; + } +} + +- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{ + [self hiddenAllMBProgressHUD]; + + if (!self.webTitle) { + self.title = webView.title; + } + +} + +- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(nonnull NSError *)error{ + [self hiddenAllMBProgressHUD]; +} + + + + + + + + + + + + + + +#pragma mark - ACTION +- (void)ToClickNavRight:(UIButton *)button{ + +} + + +#pragma mark - 自定义 +- (void)onBackClicked{ + if ( self.wkWebView.canGoBack){ + [self.wkWebView goBack]; + } else { + [self clearWebViewCache]; + } +} + +- (void)clearWebViewCache{ + if (iOS9Later) { + NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes]; + NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0]; + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{ + NSLog(@"-----clear webView cache success------"); + }]; + } else { + NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; + NSString *cookiesFolderPath = [libraryPath stringByAppendingString:@"/Cookies"]; + NSError *errors; + [[NSFileManager defaultManager] removeItemAtPath:cookiesFolderPath error:&errors]; + if (!errors) { + NSLog(@"-----clear wkWebView cache success------"); + } + } +} +- (NSString *)URLEncodedString:(NSString *)urlString{ + NSString *encodePath ; + if (!IOS7) { + encodePath = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + }else{ + encodePath = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + }return encodePath; +} + + +#pragma mark - SETTER +- (void)setRightType:(RightNavType)rightType{ + _rightType = rightType; +} + +- (void)setWebUrl:(NSString *)webUrl{ + _webUrl = webUrl; + [self webViewRequest]; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Base/DownPDFFileVC.h b/XinjiangProject/XinjiangProject/Project/Base/DownPDFFileVC.h new file mode 100644 index 0000000..0f5be9c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/DownPDFFileVC.h @@ -0,0 +1,18 @@ +// +// DownPDFFileVC.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/1. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DownPDFFileVC : HQBaseViewController + +@property (nonatomic, strong) NSString * PDFUrl; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Base/DownPDFFileVC.m b/XinjiangProject/XinjiangProject/Project/Base/DownPDFFileVC.m new file mode 100644 index 0000000..0eeeb9a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/DownPDFFileVC.m @@ -0,0 +1,31 @@ +// +// DownPDFFileVC.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/1. +// + +#import "DownPDFFileVC.h" + +@interface DownPDFFileVC () + +@end + +@implementation DownPDFFileVC + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Base/HQBaseNavigationController.h b/XinjiangProject/XinjiangProject/Project/Base/HQBaseNavigationController.h new file mode 100644 index 0000000..d5f667e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/HQBaseNavigationController.h @@ -0,0 +1,25 @@ +// +// HQBaseNavigationController.h +// healthQuestion +// +// Created by xulei on 2022/8/12. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HQBaseNavigationController : UINavigationController + +/*! + * 返回到指定的类视图 + * + * @param ClassName 类名 + * @param animated 是否动画 + */ +-(BOOL)popToAppointViewController:(NSString *)ClassName animated:(BOOL)animated; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Base/HQBaseNavigationController.m b/XinjiangProject/XinjiangProject/Project/Base/HQBaseNavigationController.m new file mode 100644 index 0000000..2dd1432 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/HQBaseNavigationController.m @@ -0,0 +1,305 @@ +// +// HQBaseNavigationController.m +// healthQuestion +// +// Created by xulei on 2022/8/12. +// + +#import "HQBaseNavigationController.h" +#import "XYTransitionProtocol.h" +#import "XYTransition.h" + +@interface HQBaseNavigationController () + +@property (nonatomic, weak) id popDelegate; +@property (nonatomic,strong) UIPercentDrivenInteractiveTransition *interactivePopTransition; +@property (nonatomic,strong) UIScreenEdgePanGestureRecognizer *popRecognizer; +@property(nonatomic,assign) BOOL isSystemSlidBack;//是否开启系统右滑返回 + +@end + +@implementation HQBaseNavigationController + +//APP生命周期中 只会执行一次 ++ (void)initialize +{ + //导航栏主题 title文字属性 + UINavigationBar *navBar = [UINavigationBar appearance]; + //导航栏背景图 + [navBar setBackgroundImage:[UIImage imageNamed:@"navBackImg"] forBarMetrics:UIBarMetricsDefault]; + [navBar setBarTintColor:UIColorHex(#21BEBD)]; + [navBar setTintColor:UIColorHex(#21BEBD)]; + [navBar setTitleTextAttributes:@{NSForegroundColorAttributeName :KWhiteColor, NSFontAttributeName :[UIFont systemFontOfSize:18 weight:UIFontWeightBold] }]; + [navBar setBackgroundImage:[UIImage imageWithColor:UIColorHex(#21BEBD)] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; + + if (@available(iOS 15.0,*) ) { + UINavigationBarAppearance *apperance = [[UINavigationBarAppearance alloc]init]; + + [apperance configureWithOpaqueBackground];// 重置背景和阴影颜色 + + apperance.backgroundColor = UIColorHex(#21BEBD); + + apperance.backgroundEffect = nil; + + // 去除导航栏阴影(如果不设置clear,导航栏底下会有一条阴影线) + + apperance.shadowColor = [UIColor clearColor]; + + [apperance setShadowImage:[UIImage imageWithColor:[UIColor clearColor]]]; + + [apperance setTitleTextAttributes:@{NSForegroundColorAttributeName :KWhiteColor, NSFontAttributeName : [UIFont systemFontOfSize:18 weight:UIFontWeightBold]}]; + + [[UINavigationBar appearance]setStandardAppearance:apperance]; + + [[UINavigationBar appearance]setScrollEdgeAppearance:apperance]; + + }else{ + + + + [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName :KWhiteColor, NSFontAttributeName :[UIFont systemFontOfSize:18 weight:UIFontWeightBold]}]; + + [[UINavigationBar appearance] setBarTintColor:UIColorHex(#21BEBD)]; + + [[UINavigationBar appearance] setShadowImage:[UIImage imageWithColor:[UIColor clearColor]]]; + + + + } + [UITabBar appearance].translucent = NO; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.popDelegate = self.interactivePopGestureRecognizer.delegate; + self.delegate = self; + + //默认开启系统右划返回 + self.interactivePopGestureRecognizer.enabled = YES; + self.interactivePopGestureRecognizer.delegate = self; + + //只有在使用转场动画时,禁用系统手势,开启自定义右划手势 + _popRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleNavigationTransition:)]; + //下面是全屏返回 + // _popRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleNavigationTransition:)]; + _popRecognizer.edges = UIRectEdgeLeft; + [_popRecognizer setEnabled:NO]; + [self.view addGestureRecognizer:_popRecognizer]; +} + +//解决手势失效问题 +- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated +{ + if (_isSystemSlidBack) { + self.interactivePopGestureRecognizer.enabled = YES; + [_popRecognizer setEnabled:NO]; + }else{ + self.interactivePopGestureRecognizer.enabled = NO; + [_popRecognizer setEnabled:YES]; + } +} + +//根视图禁用右划返回 +-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ + return self.childViewControllers.count == 1 ? NO : YES; +} + +//push时隐藏tabbar +- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated +{ + if (self.viewControllers.count > 0) { + if ([viewController conformsToProtocol:@protocol(XYTransitionProtocol)] && [self isNeedTransition:viewController]) { + viewController.hidesBottomBarWhenPushed = NO; + }else{ + viewController.hidesBottomBarWhenPushed = YES; + } + + } + [super pushViewController:viewController animated:animated]; + // 修改tabBra的frame + CGRect frame = self.tabBarController.tabBar.frame; + frame.origin.y = [UIScreen mainScreen].bounds.size.height - frame.size.height; + self.tabBarController.tabBar.frame = frame; +} + +-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ + + if ([viewController isKindOfClass:[HQBaseViewController class]]) { + HQBaseViewController * vc = (HQBaseViewController *)viewController; + if (vc.isHidenNaviBar) { + vc.view.top = 0; + [vc.navigationController setNavigationBarHidden:YES animated:animated]; + }else{ + vc.view.top = kTopHeight; + [vc.navigationController setNavigationBarHidden:NO animated:animated]; + } + } + + +} + +/** + * 返回到指定的类视图 + * + * @param ClassName 类名 + * @param animated 是否动画 + */ +-(BOOL)popToAppointViewController:(NSString *)ClassName animated:(BOOL)animated +{ + id vc = [self getCurrentViewControllerClass:ClassName]; + if(vc != nil && [vc isKindOfClass:[UIViewController class]]) + { + [self popToViewController:vc animated:animated]; + return YES; + } + + return NO; +} + +/*! + * 获得当前导航器显示的视图 + * + * @param ClassName 要获取的视图的名称 + * + * @return 成功返回对应的对象,失败返回nil; + */ +-(instancetype)getCurrentViewControllerClass:(NSString *)ClassName +{ + Class classObj = NSClassFromString(ClassName); + + NSArray * szArray = self.viewControllers; + for (id vc in szArray) { + if([vc isMemberOfClass:classObj]) + { + return vc; + } + } + + return nil; +} + + +-(UIViewController *)childViewControllerForStatusBarStyle{ + return self.topViewController; +} + + +#pragma mark ————— 转场动画区 ————— + +//navigation切换是会走这个代理 +-(id)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC +{ + NSLog(@"转场动画代理方法"); + self.isSystemSlidBack = YES; + //如果来源VC和目标VC都实现协议,那么都做动画 + if ([fromVC conformsToProtocol:@protocol(XYTransitionProtocol)] && [toVC conformsToProtocol:@protocol(XYTransitionProtocol)]) { + + BOOL pinterestNedd = [self isNeedTransition:fromVC:toVC]; + XYTransition *transion = [XYTransition new]; + if (operation == UINavigationControllerOperationPush && pinterestNedd) { + transion.isPush = YES; + + //暂时屏蔽带动画的右划返回 + self.isSystemSlidBack = NO; + // self.isSystemSlidBack = YES; + } + else if(operation == UINavigationControllerOperationPop && pinterestNedd) + { + //暂时屏蔽带动画的右划返回 + // return nil; + + transion.isPush = NO; + self.isSystemSlidBack = NO; + } + else{ + return nil; + } + return transion; + }else if([toVC conformsToProtocol:@protocol(XYTransitionProtocol)]){ + //如果只有目标VC开启动画,那么isSystemSlidBack也要随之改变 + BOOL pinterestNedd = [self isNeedTransition:toVC]; + self.isSystemSlidBack = !pinterestNedd; + return nil; + } + return nil; +} + +//判断fromVC和toVC是否需要实现pinterest效果 +-(BOOL)isNeedTransition:(UIViewController *)fromVC :(UIViewController *)toVC +{ + BOOL a = NO; + BOOL b = NO; + if ([fromVC respondsToSelector:@selector(isNeedTransition)] && [fromVC isNeedTransition]) { + a = YES; + } + if ([toVC respondsToSelector:@selector(isNeedTransition)] && [toVC isNeedTransition]) { + b = YES; + } + return (a && b) ; + +} +//判断fromVC和toVC是否需要实现pinterest效果 +-(BOOL)isNeedTransition:(UIViewController *)toVC +{ + BOOL b = NO; + if ([toVC respondsToSelector:@selector(isNeedTransition)] && [toVC isNeedTransition]) { + b = YES; + } + return b; + +} + +#pragma mark -- NavitionContollerDelegate +- (id)navigationController:(UINavigationController *)navigationController +interactionControllerForAnimationController:(id)animationController +{ + if (!self.interactivePopTransition) { return nil; } + return self.interactivePopTransition; +} + + +#pragma mark UIGestureRecognizer handlers + +- (void)handleNavigationTransition:(UIScreenEdgePanGestureRecognizer*)recognizer +{ + CGFloat progress = [recognizer translationInView:self.view].x / (self.view.bounds.size.width); + // progress = MIN(1.0, MAX(0.0, progress)); + NSLog(@"右划progress %.2f",progress); + + if (recognizer.state == UIGestureRecognizerStateBegan) { + self.interactivePopTransition = [[UIPercentDrivenInteractiveTransition alloc] init]; + [self popViewControllerAnimated:YES]; + } + else if (recognizer.state == UIGestureRecognizerStateChanged) { + [self.interactivePopTransition updateInteractiveTransition:progress]; + } + else if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled) { + CGPoint velocity = [recognizer velocityInView:recognizer.view]; + + if (progress > 0.5 || velocity.x >100) { + [self.interactivePopTransition finishInteractiveTransition]; + } + else { + [self.interactivePopTransition cancelInteractiveTransition]; + } + self.interactivePopTransition = nil; + } +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* + #pragma mark - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. + } + */ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Base/HQBaseTabBarController.h b/XinjiangProject/XinjiangProject/Project/Base/HQBaseTabBarController.h new file mode 100644 index 0000000..2ee7729 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/HQBaseTabBarController.h @@ -0,0 +1,25 @@ +// +// HQBaseTabBarController.h +// healthQuestion +// +// Created by xulei on 2022/8/12. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HQBaseTabBarController : UITabBarController + +/** + 设置小红点 + + @param index tabbar下标 + @param isShow 是显示还是隐藏 + */ +-(void)setRedDotWithIndex:(NSInteger)index isShow:(BOOL)isShow isNumber:(NSInteger)number; + +@property (nonatomic, assign)NSInteger lastSelectIndex; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Base/HQBaseTabBarController.m b/XinjiangProject/XinjiangProject/Project/Base/HQBaseTabBarController.m new file mode 100644 index 0000000..3f3f119 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/HQBaseTabBarController.m @@ -0,0 +1,157 @@ +// +// HQBaseTabBarController.m +// healthQuestion +// +// Created by xulei on 2022/8/12. +// + +#import "HQBaseTabBarController.h" +#import "HQTabBar.h" +#import "MyCenterViewController.h" +#import "ChatListViewController.h" +//主控制器 +#import "QuestionViewController.h" +#import "MyCenterViewController.h" +#import "SosCenterViewController.h" +#import "HeartBadViewController.h" + +//干预二期 + +@interface HQBaseTabBarController () + +@property (nonatomic,strong) NSMutableArray * VCS;//tabbar root VC + +@property (nonatomic, assign) BOOL isConnecting; + +@property (nonatomic, strong) UIActivityIndicatorView *indicatorView; + +@property (nonatomic, copy) NSDictionary * dictionary; + +@property (nonatomic, assign) BOOL isPushed; + + + + +@end + +@implementation HQBaseTabBarController + + +- (void)viewDidLoad { + [super viewDidLoad]; + self.delegate = self; + + + //初始化tabbar + [self setUpTabBar]; + //添加子控制器 + [self setUpAllChildViewController]; + +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + self.isPushed = NO; +} + +- (void)viewWillDisappear:(BOOL)animated { + self.isPushed = YES; +} + +#pragma mark ————— 初始化TabBar ————— +-(void)setUpTabBar{ + //设置背景色 去掉分割线 + [self setValue:[HQTabBar new] forKey:@"tabBar"]; + [self.tabBar setBackgroundColor:[UIColor whiteColor]]; + [self.tabBar setBackgroundImage:[UIImage new]]; + //通过这两个参数来调整badge位置 +// [self.tabBar setTabIconWidth:95]; +// [self.tabBar setBadgeTop:9]; + [[HQTabBar appearance] setTranslucent:NO]; +} + +#pragma mark -——————— 初始化VC ———————— +-(void)setUpAllChildViewController{ + _VCS = @[].mutableCopy; + + QuestionViewController * questionVC = [[QuestionViewController alloc]init]; + [self setupChildViewController:questionVC title:@"咨询" imageName:@"Question_normal_icon" seleceImageName:@"Question_selected_icon"]; + + + SosCenterViewController * sosVC = [[SosCenterViewController alloc]init]; + [self setupChildViewController:sosVC title:@"就医" imageName:@"Question_normal_icon" seleceImageName:@"Question_selected_icon"]; + + HeartBadViewController * jianceVC = [[HeartBadViewController alloc]init]; + [self setupChildViewController:jianceVC title:@"监测" imageName:@"Question_normal_icon" seleceImageName:@"Question_selected_icon"]; + + + MyCenterViewController * centerVC = [[MyCenterViewController alloc] init]; + [self setupChildViewController:centerVC title:@"我的" imageName:@"mine_normal" seleceImageName:@"mine_selected"]; + + + self.viewControllers = _VCS; + +} + + +-(void)setupChildViewController:(UIViewController*)controller title:(NSString *)title imageName:(NSString *)imageName seleceImageName:(NSString *)selectImageName{ + controller.title = title; + controller.tabBarItem.title = title;//跟上面一样效果 + controller.tabBarItem.image = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; + controller.tabBarItem.selectedImage = [[UIImage imageNamed:selectImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; + //未选中字体颜色 + [controller.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName:UIColorHex(#666666),NSFontAttributeName:SYSTEMFONT(10.0f)} forState:UIControlStateNormal]; + //选中字体颜色 + + [controller.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName:UIColorHex(#21BEBD),NSFontAttributeName:SYSTEMFONT(10.0f)} forState:UIControlStateSelected]; + //包装导航控制器 + HQBaseNavigationController *nav = [[HQBaseNavigationController alloc]initWithRootViewController:controller]; + + [_VCS addObject:nav]; + +} +-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController +{ +// tabbarSelect = [NSString stringWithFormat:@"%ld",tabBarController.selectedIndex]; +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +- (void)dealloc { + +} + +#pragma mark - auto rotate +- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { + + return [self.selectedViewController preferredInterfaceOrientationForPresentation]; +} + +- (BOOL)shouldAutorotate { + + return [self.selectedViewController shouldAutorotate]; +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + + return [self.selectedViewController supportedInterfaceOrientations]; +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Base/HQBaseViewController.h b/XinjiangProject/XinjiangProject/Project/Base/HQBaseViewController.h new file mode 100644 index 0000000..a845046 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/HQBaseViewController.h @@ -0,0 +1,91 @@ +// +// HQBaseViewController.h +// healthQuestion +// +// Created by xulei on 2022/8/11. +// + +#import +#import "MBProgressHUD.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HQBaseViewController : UIViewController + +/** + * 修改状态栏颜色 + */ +@property (nonatomic, assign) UIStatusBarStyle StatusBarStyle; + +/** + * 是否显示返回按钮,默认情况是YES + */ +@property (nonatomic, assign) BOOL isShowLiftBack; + +/** + 是否隐藏导航栏 + */ +@property (nonatomic, assign) BOOL isHidenNaviBar; + +/** + 是否需要登录 + */ +@property (nonatomic, assign) BOOL isNeedLogin; + +/** + 导航栏添加文本按钮 + + @param titles 文本数组 + @param isLeft 是否是左边 非左即右 + @param target 目标 + @param action 点击方法 + @param tags tags数组 回调区分用 + */ +- (void)addNavigationItemWithTitles:(NSArray *)titles isLeft:(BOOL)isLeft target:(id)target action:(SEL)action tags:(NSArray *)tags; + +/** + 导航栏添加图标按钮 + + @param imageNames 图标数组 + @param isLeft 是否是左边 非左即右 + @param target 目标 + @param action 点击方法 + @param tags tags数组 回调区分用 + */ +- (void)addNavigationItemWithImageNames:(NSArray *)imageNames isLeft:(BOOL)isLeft target:(id)target action:(SEL)action tags:(NSArray *)tags; +/** + * 展示轮型加载器 + * + * @param string 展示的内容 + * @param hidden yes自动隐藏 no不隐藏 + */ +- (void)showMBProgressHUDWithString:(NSString *)string autoHidden:(BOOL)hidden; + +/** + * 展示提醒文字后1.5秒后消失 + * + * @param string 展示信息 + */ +- (void)showMBProgressHUDOnlyWithString:(NSString *)string; +- (void)showMBProgressHUDOnlyWithString:(NSString *)string autoHidden:(BOOL)hidden; +- (void)showMBProgressHUDOnlyWithString:(NSString *)string haveDelegate:(BOOL)haveDelegate; +- (void)hudWasHidden:(MBProgressHUD *)hud; //代理方法 + +/** + * 展示提醒 有详情字符串 + * + * @param string 简述 + * @param detailString 详情 + */ +- (void)showMBProgressHUDWithString:(NSString *)string detailString:(NSString *)detailString; + + + +/** + * 隐藏提醒框 + */ +- (void)hiddenAllMBProgressHUD; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Base/HQBaseViewController.m b/XinjiangProject/XinjiangProject/Project/Base/HQBaseViewController.m new file mode 100644 index 0000000..ff3e492 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/HQBaseViewController.m @@ -0,0 +1,255 @@ +// +// HQBaseViewController.m +// healthQuestion +// +// Created by xulei on 2022/8/11. +// + +#import "HQBaseViewController.h" +#import "HQLoginViewController.h" + +@interface HQBaseViewController () + +@end + +@implementation HQBaseViewController + +- (UIStatusBarStyle)preferredStatusBarStyle{ + return _StatusBarStyle; +} + + +//动态更新状态栏颜色 +-(void)setStatusBarStyle:(UIStatusBarStyle)StatusBarStyle{ + _StatusBarStyle=StatusBarStyle; + [self setNeedsStatusBarAppearanceUpdate]; +} +// + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + //是否显示返回按钮 + self.isShowLiftBack = YES; + //是否需要登录/默认no + //默认导航栏样式:黑字 + self.StatusBarStyle = UIStatusBarStyleLightContent; +} + +/** + * 是否显示返回按钮 + */ +- (void) setIsShowLiftBack:(BOOL)isShowLiftBack +{ + _isShowLiftBack = isShowLiftBack; + NSInteger VCCount = self.navigationController.viewControllers.count; + //下面判断的意义是 当VC所在的导航控制器中的VC个数大于1 或者 是present出来的VC时,才展示返回按钮,其他情况不展示 + if (isShowLiftBack && ( VCCount > 1 || self.navigationController.presentingViewController != nil)) { + [self addNavigationItemWithImageNames:@[@"whiteBack_icon"] isLeft:YES target:self action:@selector(backBtnClicked) tags:nil]; + + } else { + self.navigationItem.hidesBackButton = YES; + UIBarButtonItem * NULLBar=[[UIBarButtonItem alloc]initWithCustomView:[UIView new]]; + self.navigationItem.leftBarButtonItem = NULLBar; + } +} + + + +- (void)backBtnClicked +{ + if (self.presentingViewController) { + [self dismissViewControllerAnimated:YES completion:nil]; + }else{ + [self.navigationController popViewControllerAnimated:YES]; + } +} + + +#pragma mark ————— 导航栏 添加图片按钮 ————— +/** + 导航栏添加图标按钮 + + @param imageNames 图标数组 + @param isLeft 是否是左边 非左即右 + @param target 目标 + @param action 点击方法 + @param tags tags数组 回调区分用 + */ +- (void)addNavigationItemWithImageNames:(NSArray *)imageNames isLeft:(BOOL)isLeft target:(id)target action:(SEL)action tags:(NSArray *)tags +{ + NSMutableArray * items = [[NSMutableArray alloc] init]; + //调整按钮位置 + // UIBarButtonItem* spaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; + // //将宽度设为负值 + // spaceItem.width= -5; + // [items addObject:spaceItem]; + NSInteger i = 0; + for (NSString * imageName in imageNames) { + UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom]; + [btn setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; + + btn.frame = CGRectMake(0, 0, 30, 30); + [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; + + btn.tag = [tags[i++] integerValue]; + + UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithCustomView:btn]; + [items addObject:item]; + + } + if (isLeft) { + self.navigationItem.leftBarButtonItems = items; + } else { + self.navigationItem.rightBarButtonItems = items; + } +} + +#pragma mark ————— 导航栏 添加文字按钮 ————— +- (NSMutableArray *)addNavigationItemWithTitles:(NSArray *)titles isLeft:(BOOL)isLeft target:(id)target action:(SEL)action tags:(NSArray *)tags +{ + + NSMutableArray * items = [[NSMutableArray alloc] init]; + + NSMutableArray * buttonArray = [NSMutableArray array]; + NSInteger i = 0; + for (NSString * title in titles) { + UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom]; + btn.frame = CGRectMake(0, 0, 30, 30); + [btn setTitle:title forState:UIControlStateNormal]; + [btn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; + btn.titleLabel.font = SYSTEMFONT(15); + btn.tag = [tags[i++] integerValue]; + [btn sizeToFit]; + + //设置偏移 + if (isLeft) { + [btn setContentEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; + }else{ + [btn setContentEdgeInsets:UIEdgeInsetsMake(0, 10, 0, -10)]; + } + + UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithCustomView:btn]; + [items addObject:item]; + [buttonArray addObject:btn]; + } + if (isLeft) { + self.navigationItem.leftBarButtonItems = items; + } else { + self.navigationItem.rightBarButtonItems = items; + } + return buttonArray; +} +#pragma mark - 屏幕旋转 +-(UIInterfaceOrientationMask)supportedInterfaceOrientations +{ + //当前支持的旋转类型 + return UIInterfaceOrientationMaskPortrait; +} + +- (BOOL)shouldAutorotate +{ + // 是否支持旋转 + return NO; +} + +-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation +{ + // 默认进去类型 + return UIInterfaceOrientationPortrait; +} + +#pragma mark - ProgressHUD +/** + * 展示轮型加载器 + * + * @param string 展示的内容 + * @param hidden yes自动隐藏 no不隐藏 + */ +- (void)showMBProgressHUDWithString:(NSString *)string autoHidden:(BOOL)hidden +{ + MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:kApplication.keyWindow animated:YES]; + HUD.backgroundColor = RGBA(0, 0, 0, 0.5); + if (string != nil && ![string isEqualToString:@""]) + { + HUD.label.text = string; + } + if (hidden) + { + [HUD hideAnimated:YES afterDelay:2]; + } +} + +/** + * 展示提醒文字后1.5秒后消失 + * + * @param string 展示信息 + */ +- (void)showMBProgressHUDOnlyWithString:(NSString *)string +{ + [self showMBProgressHUDOnlyWithString:string haveDelegate:NO]; +} +- (void)showMBProgressHUDOnlyWithString:(NSString *)string haveDelegate:(BOOL)haveDelegate +{ + MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; + HUD.mode = MBProgressHUDModeText;//only show label + if (!ValidStr(string)) { + HUD.label.text = string; + + } + HUD.label.textColor = KWhiteColor; + HUD.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; + HUD.bezelView.color = UIColor.blackColor; + HUD.userInteractionEnabled = NO; + + if (haveDelegate) + { + HUD.delegate = self; + } + [HUD hideAnimated:YES afterDelay:3]; +} + +- (void)showMBProgressHUDOnlyWithString:(NSString *)string autoHidden:(BOOL)hidden +{ + MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:kApplication.keyWindow animated:YES]; + HUD.mode = MBProgressHUDModeText;//only show label + HUD.label.text = string; + if (hidden) + { + [HUD hideAnimated:YES afterDelay:1.5]; + } +} + +- (void)showMBProgressHUDWithString:(NSString *)string detailString:(NSString *)detailString +{ + MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; + HUD.mode = MBProgressHUDModeText; + HUD.label.text = string; + HUD.detailsLabel.text = detailString; + [HUD hideAnimated:YES afterDelay:1.5]; +} + +- (void)hiddenAllMBProgressHUD +{ + + [MBProgressHUD hideHUDForView:kApplication.keyWindow animated:YES]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Base/TabBarView/HQTabBar.h b/XinjiangProject/XinjiangProject/Project/Base/TabBarView/HQTabBar.h new file mode 100755 index 0000000..8f392fb --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/TabBarView/HQTabBar.h @@ -0,0 +1,13 @@ +// +// HQTabBar.h +// idleBuy +// +// Created by ios on 2018/5/29. +// Copyright © 2018年 ios. All rights reserved. +// + +#import + +@interface HQTabBar : UITabBar + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Base/TabBarView/HQTabBar.m b/XinjiangProject/XinjiangProject/Project/Base/TabBarView/HQTabBar.m new file mode 100755 index 0000000..32fb4cf --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/TabBarView/HQTabBar.m @@ -0,0 +1,60 @@ +// +// HQTabBar.m +// idleBuy +// +// Created by ios on 2018/5/29. +// Copyright © 2018年 ios. All rights reserved. +// + +#import "HQTabBar.h" +@interface HQTabBar() + +@property (nonatomic,assign)UIEdgeInsets oldSafeAreaInsets; + +@end + +@implementation HQTabBar + + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // 设置tabBarItem选中状态时的颜色 + self.tintColor = UIColorHex(#21BEBD); + } + + return self; +} + + +- (void) safeAreaInsetsDidChange +{ + [super safeAreaInsetsDidChange]; + if(self.oldSafeAreaInsets.left != self.safeAreaInsets.left || + self.oldSafeAreaInsets.right != self.safeAreaInsets.right || + self.oldSafeAreaInsets.top != self.safeAreaInsets.top || + self.oldSafeAreaInsets.bottom != self.safeAreaInsets.bottom) + { + self.oldSafeAreaInsets = self.safeAreaInsets; + [self invalidateIntrinsicContentSize]; + [self.superview setNeedsLayout]; + [self.superview layoutSubviews]; + } + +} +- (CGSize) sizeThatFits:(CGSize) size +{ + CGSize s = [super sizeThatFits:size]; + if(@available(iOS 11.0, *)) + { + CGFloat bottomInset = self.safeAreaInsets.bottom; + if( bottomInset > 0 && s.height < 50) { + s.height += bottomInset; + } + } + return s; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Base/TabBarView/UITabBar+CustomBadge.h b/XinjiangProject/XinjiangProject/Project/Base/TabBarView/UITabBar+CustomBadge.h new file mode 100755 index 0000000..163d6f2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/TabBarView/UITabBar+CustomBadge.h @@ -0,0 +1,32 @@ +// +// UITabBar+CustomBadge.h +// idleBuy +// +// Created by ios on 2018/5/29. +// Copyright © 2018年 ios. All rights reserved. +// + +#import +typedef NS_ENUM(NSUInteger, CustomBadgeType){ + kCustomBadgeStyleRedDot, + kCustomBadgeStyleNumber, + kCustomBadgeStyleNone +}; +@interface UITabBar (CustomBadge) +/** + *设置tab上icon的宽度,用于调整badge的位置 + */ +- (void)setTabIconWidth:(CGFloat)width; + +/** + *设置badge的top + */ +- (void)setBadgeTop:(CGFloat)top; + +/** + *设置badge样、数字 + */ +- (void)setBadgeStyle:(CustomBadgeType)type value:(NSInteger)badgeValue atIndex:(NSInteger)index; + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Base/TabBarView/UITabBar+CustomBadge.m b/XinjiangProject/XinjiangProject/Project/Base/TabBarView/UITabBar+CustomBadge.m new file mode 100755 index 0000000..8b526b2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Base/TabBarView/UITabBar+CustomBadge.m @@ -0,0 +1,115 @@ +// +// UITabBar+CustomBadge.m +// idleBuy +// +// Created by ios on 2018/5/29. +// Copyright © 2018年 ios. All rights reserved. +// + +#import "UITabBar+CustomBadge.h" +#import + +static NSString * const kBadgeViewInitedKey = @"kBadgeViewInited"; +static NSString * const kBadgeDotViewsKey = @"kBadgeDotViewsKey"; +static NSString * const kBadgeNumberViewsKey = @"kBadgeNumberViewsKey"; +static NSString * const kTabIconWidth = @"kTabIconWidth"; +static NSString * const kBadgeTop = @"kBadgeTop"; + +@implementation UITabBar (CustomBadge) + +-(void)setTabIconWidth:(CGFloat)width{ + [self setValue:@(width) forUndefinedKey:kTabIconWidth]; +} + +-(void)setBadgeTop:(CGFloat)top{ + [self setValue:@(top) forUndefinedKey:kBadgeTop]; +} + +-(void)setBadgeStyle:(CustomBadgeType)type value:(NSInteger)badgeValue atIndex:(NSInteger)index{ + if( ![[self valueForKey:kBadgeViewInitedKey] boolValue] ){ + [self setValue:@(YES) forKey:kBadgeViewInitedKey]; + [self addBadgeViews]; + } + NSMutableArray *badgeDotViews = [self valueForKey:kBadgeDotViewsKey]; + NSMutableArray *badgeNumberViews = [self valueForKey:kBadgeNumberViewsKey]; + + [badgeDotViews[index] setHidden:YES]; + [badgeNumberViews[index] setHidden:YES]; + + if(type == kCustomBadgeStyleRedDot){ + [badgeDotViews[index] setHidden:NO]; + + }else if(type == kCustomBadgeStyleNumber){ + [badgeNumberViews[index] setHidden:NO]; + UILabel *label = badgeNumberViews[index]; + [self adjustBadgeNumberViewWithLabel:label number:badgeValue]; + + }else if(type == kCustomBadgeStyleNone){ + } +} + +-(void)addBadgeViews{ + id idIconWith = [self valueForKey:kTabIconWidth]; + CGFloat tabIconWidth = idIconWith ? [idIconWith floatValue] : 32; + id idBadgeTop = [self valueForKey:kBadgeTop]; + CGFloat badgeTop = idBadgeTop ? [idBadgeTop floatValue] : 11; + + NSInteger itemsCount = self.items.count; + CGFloat itemWidth = self.bounds.size.width / itemsCount; + + //dot views + NSMutableArray *badgeDotViews = [NSMutableArray new]; + for(int i = 0;i < itemsCount;i ++){ + UIView *redDot = [UIView new]; + redDot.bounds = CGRectMake(0, 0, 10, 10); + redDot.center = CGPointMake(itemWidth*(i+0.5)+tabIconWidth/2, badgeTop); + redDot.layer.cornerRadius = redDot.bounds.size.width/2; + redDot.clipsToBounds = YES; + redDot.backgroundColor = [UIColor redColor]; + redDot.hidden = YES; + [self addSubview:redDot]; + [badgeDotViews addObject:redDot]; + } + [self setValue:badgeDotViews forKey:kBadgeDotViewsKey]; + + //number views + NSMutableArray *badgeNumberViews = [NSMutableArray new]; + for(int i = 0;i < itemsCount;i ++){ + UILabel *redNum = [UILabel new]; + redNum.layer.anchorPoint = CGPointMake(0, 0.5); + redNum.bounds = CGRectMake(0, 0, 20, 14); + redNum.center = CGPointMake(itemWidth*(i+0.5)+tabIconWidth/2-10, badgeTop); + redNum.layer.cornerRadius = redNum.bounds.size.height/2; + redNum.clipsToBounds = YES; + redNum.backgroundColor = [UIColor redColor]; + redNum.hidden = YES; + + redNum.textAlignment = NSTextAlignmentCenter; + redNum.font = [UIFont systemFontOfSize:12]; + redNum.textColor = [UIColor whiteColor]; + + [self addSubview:redNum]; + [badgeNumberViews addObject:redNum]; + } + [self setValue:badgeNumberViews forKey:kBadgeNumberViewsKey]; +} + +-(void)adjustBadgeNumberViewWithLabel:(UILabel *)label number:(NSInteger)number{ + [label setText:(number > 99 ? @"..." : @(number).stringValue)]; + if(number < 10){ + label.bounds = CGRectMake(0, 0, 14, 14); + }else if(number < 99){ + label.bounds = CGRectMake(0, 0, 20, 14); + }else{ + label.bounds = CGRectMake(0, 0, 20, 14); + } +} + +-(id)valueForUndefinedKey:(NSString *)key{ + return objc_getAssociatedObject(self, (__bridge const void *)(key)); +} + +-(void)setValue:(id)value forUndefinedKey:(NSString *)key{ + objc_setAssociatedObject(self, (__bridge const void *)(key), value, OBJC_ASSOCIATION_COPY); +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomSystemEvaluateModel.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomSystemEvaluateModel.h new file mode 100644 index 0000000..0e3fbc8 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomSystemEvaluateModel.h @@ -0,0 +1,26 @@ +// +// CustomSystemEvaluateModel.h +// EscortProject +// +// Created by Apple on 2024/6/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomSystemEvaluateModel : NSObject + + +@property (nonatomic, copy) NSString * title; + +@property (nonatomic, copy) NSString * content; + +@property (nonatomic, assign) NSInteger type; + +@property (nonatomic, assign) CGFloat systemHeight; +//CGFloat textMaxWidth = 245.f; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomSystemEvaluateModel.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomSystemEvaluateModel.m new file mode 100644 index 0000000..829b6fc --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomSystemEvaluateModel.m @@ -0,0 +1,12 @@ +// +// CustomSystemEvaluateModel.m +// EscortProject +// +// Created by Apple on 2024/6/19. +// + +#import "CustomSystemEvaluateModel.h" + +@implementation CustomSystemEvaluateModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTUIHistoryModel.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTUIHistoryModel.h new file mode 100644 index 0000000..9c4a965 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTUIHistoryModel.h @@ -0,0 +1,42 @@ +// +// CustomTUIHistoryModel.h +// EscortProject +// +// Created by Apple on 2024/6/21. +// + +#import + +typedef NS_ENUM(NSUInteger, MessageType) { + MessageTypeText, + MessageTypeImage, + MessageTypeVideo, + MessageTypeReviceCustom,//评论消息 + MessageTypeMapCustom,//地图消息 + MessageTypeDoctorCard,//医生名片 + MessageTypeHealthData,//健康档案 +}; + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomTUIHistoryModel : NSObject + +@property (nonatomic, assign) BOOL isSelf; +@property (nonatomic, copy) NSString * avatar;//头像 +@property (nonatomic, copy) NSString * content; +@property (nonatomic, strong) NSString * image; +//视频 +@property (nonatomic, copy) NSString * VideoUrl; +@property (nonatomic, copy) NSString * ThumbUrl; +@property (nonatomic, assign) CGFloat videoHeight; + +@property (nonatomic, assign) NSString * customData; +@property (nonatomic, assign) CGFloat textHeight; +//评论 +@property (nonatomic, copy) NSString * title; +@property (nonatomic, assign) CGFloat systemHeight; +@property (nonatomic, assign) MessageType msgType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTUIHistoryModel.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTUIHistoryModel.m new file mode 100644 index 0000000..afd93e7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTUIHistoryModel.m @@ -0,0 +1,12 @@ + // +// CustomTUIHistoryModel.m +// EscortProject +// +// Created by Apple on 2024/6/21. +// + +#import "CustomTUIHistoryModel.h" + +@implementation CustomTUIHistoryModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTextModel.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTextModel.h new file mode 100644 index 0000000..aec4837 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTextModel.h @@ -0,0 +1,24 @@ +// +// CustomTextModel.h +// EscortProject +// +// Created by Apple on 2024/6/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomTextModel : NSObject + +@property (nonatomic, copy) NSString * text; + +@property (nonatomic, copy) NSString * imageHeard; + +@property (nonatomic, assign) BOOL isSelf; + +@property (nonatomic, assign) CGFloat textHeight; +//CGFloat textMaxWidth = 245.f; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTextModel.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTextModel.m new file mode 100644 index 0000000..d714621 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomModel/CustomTextModel.m @@ -0,0 +1,12 @@ +// +// CustomTextModel.m +// EscortProject +// +// Created by Apple on 2024/6/19. +// + +#import "CustomTextModel.h" + +@implementation CustomTextModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomTUIModel.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomTUIModel.h new file mode 100644 index 0000000..7dbbf5b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomTUIModel.h @@ -0,0 +1,60 @@ +// +// CustomTUIModel.h +// EscortProject +// +// Created by Apple on 2024/6/17. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + + +@interface DataContent : NSObject +@property (nonatomic, copy) NSString *businessID; +@property (nonatomic, copy) NSString *title; +@property (nonatomic, assign) NSInteger type; +@property (nonatomic, copy) NSString *content; +@end + + +@interface MsgContent : NSObject + +@property (nonatomic, copy) NSString *Text; //文本消息 + +@property (nonatomic, strong) DataContent *Data; //自定义消息 + +@property (nonatomic, strong) NSString *ThumbUrl; //缩略图 + +@property (nonatomic, strong) NSString * VideoUrl; //缩略图 + +@end + + +@interface MsgBody : NSObject +@property (nonatomic, strong) MsgContent *MsgContent; +@property (nonatomic, copy) NSString *MsgType; +@end + + +@interface CustomTUIModel : NSObject + +@property (nonatomic, assign) BOOL isSelf; +@property (nonatomic, assign) NSInteger OnlineOnlyFlag; +@property (nonatomic, copy) NSString *CallbackCommand; +@property (nonatomic, strong) NSArray *MsgBody; +@property (nonatomic, copy) NSString *Operator_Account; +@property (nonatomic, copy) NSString *GroupId; +@property (nonatomic, copy) NSString *Type; +@property (nonatomic, assign) NSInteger Random; +@property (nonatomic, assign) NSInteger EventTime; +@property (nonatomic, copy) NSString *MsgPriority; +@property (nonatomic, assign) NSInteger MsgSeq; +@property (nonatomic, copy) NSString *From_Account; +@property (nonatomic, assign) NSInteger MsgTime; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomTUIModel.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomTUIModel.m new file mode 100644 index 0000000..a1595b5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/CustomTUIModel.m @@ -0,0 +1,53 @@ +// +// CustomTUIModel.m +// EscortProject +// +// Created by Apple on 2024/6/17. +// + +#import "CustomTUIModel.h" + +@implementation DataContent + + +@end + + +@implementation MsgBody + + + +@end + +@implementation MsgContent + ++ (NSDictionary *)modelCustomPropertyMapper { + return @{ + @"Data" : @"Data" + }; +} + +- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic { + + if ([dic.allKeys containsObject:@"Data"]) { + NSString *dataString = dic[@"Data"]; + NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + self.Data = [DataContent modelWithDictionary:dataDict]; + } + return YES; +} + + +@end + +@implementation CustomTUIModel + ++ (NSDictionary *)modelContainerPropertyGenericClass { + return @{ + @"MsgBody" : [MsgBody class], + }; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIBaseMessageController.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIBaseMessageController.h new file mode 100644 index 0000000..57ebc22 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIBaseMessageController.h @@ -0,0 +1,18 @@ +// +// CustomTUIBaseMessageController.h +// EscortProject +// +// Created by Apple on 2024/6/12. +// + +#import "TUIBaseMessageController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomTUIBaseMessageController : HQBaseViewController + +@property(nonatomic, strong) NSString * groupID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIBaseMessageController.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIBaseMessageController.m new file mode 100644 index 0000000..b8c6970 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIBaseMessageController.m @@ -0,0 +1,244 @@ +// +// CustomTUIBaseMessageController.m +// EscortProject +// +// Created by Apple on 2024/6/12. +// + +#import "CustomTUIBaseMessageController.h" +#import "TUIChatDataProvider.h" +#import "TUIChatPopMenu.h" +#import "TUIFaceMessageCell.h" +#import "TUIFaceView.h" +#import "TUIFileMessageCell.h" +#import "TUIFileViewController.h" +#import "TUIImageMessageCell.h" +#import "TUIJoinGroupMessageCell.h" +#import "TUILinkCell.h" +#import "TUIMediaView.h" +#import "TUIMergeMessageCell.h" +#import "TUIMergeMessageListController.h" +#import "TUIMessageDataProvider.h" +#import "TUIMessageProgressManager.h" +#import "TUIMessageReadViewController.h" +#import "TUIOrderCell.h" +#import "TUIReferenceMessageCell.h" +#import "TUIRepliesDetailViewController.h" +#import "TUIReplyMessageCell.h" +#import "TUIReplyMessageCellData.h" +#import "TUITextMessageCell.h" +#import "TUIVideoMessageCell.h" +#import "TUIVoiceMessageCell.h" +#import "CustomMapMessageCell.h" +#import "CustomTUIModel.h" +//自定义模型 + +#import "CustomTextModel.h" +#import "CustomSystemEvaluateModel.h" +#import "CustomTUIHistoryModel.h" +#import "CustomTUIHistoryTable.h" + + +@interface CustomTUIBaseMessageController () + +@property(nonatomic, strong) CustomTUIHistoryTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@end + +@implementation CustomTUIBaseMessageController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = false; + //获取历史记录 + [self createUI]; + self.navigationItem.title = @"聊天记录"; + [self getHistoryData]; + +} + +- (void)createUI { + + self.homeTable = [[CustomTUIHistoryTable alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - kTopHeight) style:UITableViewStyleGrouped]; + + [self.view addSubview:self.homeTable]; + + +} + +- (void)getHistoryData { +//http:192.168.1.28/health-consultation/api/consult/conSession/selectImMessagePageListSession?groupId=1801087415104962560&pageNo=1&pageSize=10 + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.groupID forKey:@"groupId"]; + + JKCQAPI * agreeAPI = [[JKCQAPI alloc] init:self tag:@"HISTORYAPI" NeedToken:@""]; + + [agreeAPI GetAllHistoryChatRecord:nil]; + + +// NSDictionary * responDic = @{@"OnlineOnlyFlag":@"0", +// @"CallbackCommand":@"Group.CallbackAfterSendMsg", +// @"CloudCustomData":@"", +// @"MsgBody":@[@{@"MsgContent":@{@"Text":@"您好,欢迎咨询,请输入您的问题?"}, +// @"MsgType":@"TIMTextElem"}], +// @"Operator_Account":@"administrator", +// @"GroupId":@"1800813149574791168", +// @"Type":@"Public", +// @"Random":@(4294967295), +// @"EventTime":@(1718182290636), +// @"MsgPriority":@"High", +// @"MsgSeq":@(1), +// @"From_Account":@"1684154499493081089", +// @"MsgTime":@(1718182290)}; +// + +} + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [EasyTextView showErrorText:message]; + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"HISTORYAPI"]) { + //解析模型 + NSDictionary * responDic = response; + CustomTUIModel * model = [CustomTUIModel modelWithDictionary:responDic]; + //用户信息 + HQUserInfo * user = [HQCommonUtils keyedUnarchiverWithKey:LoginUserInfo]; + + if ([user.user_id isEqualToString:model.From_Account]) { + model.isSelf = true; + }else + { + model.isSelf = false; + } + + for (MsgBody *msgBody in model.MsgBody) { + NSLog(@"MsgType: %@", msgBody.MsgType); + NSLog(@"MsgContent Data - title: %@", msgBody.MsgContent.Text); + + if([msgBody.MsgType isEqualToString:@"TIMTextElem"]) //文本消息 + { + CustomTUIHistoryModel * textModel = [[CustomTUIHistoryModel alloc] init]; + textModel.content = msgBody.MsgContent.Text; + textModel.isSelf = model.isSelf; + //计算文本高度 宽度245 + CGSize size = [self calculateTextSize:textModel.content withFont:[UIFont systemFontOfSize:13]]; + textModel.textHeight = size.height; + textModel.msgType = MessageTypeText; + [self.dataArray addObject:textModel]; + + } + if([msgBody.MsgType isEqualToString:@"TIMVideoFileElem"]) //视频消息 + { + CustomTUIHistoryModel * textModel = [[CustomTUIHistoryModel alloc] init]; + textModel.content = msgBody.MsgContent.Text; + textModel.isSelf = model.isSelf; + textModel.ThumbUrl = msgBody.MsgContent.ThumbUrl; + textModel.VideoUrl = msgBody.MsgContent.VideoUrl; + textModel.videoHeight = 245; + //计算文本高度 宽度245 + CGSize size = [self calculateTextSize:textModel.content withFont:[UIFont systemFontOfSize:13]]; + textModel.textHeight = size.height; + textModel.msgType = MessageTypeText; + [self.dataArray addObject:textModel]; + + } + + if([msgBody.MsgType isEqualToString:@"TIMCustomElem"]) //自定义消息 + { + if ( [msgBody.MsgContent.Data.businessID isEqualToString:@"system"])//自定义评论 + + { + UILabel * commanLabel = [[UILabel alloc] init]; + CGFloat h = [HQCommonUtils getSpaceLabelHeight:commanLabel withStr:msgBody.MsgContent.Data.content withFont:[UIFont systemFontOfSize:14] withWidth:245 - 28 withLineSpacing:2]; + CGFloat textMaxWidth = 245.f; + CGFloat textMaxHeight = h + 100; + + CustomTUIHistoryModel * systemModel = [[CustomTUIHistoryModel alloc] init]; + systemModel.title = msgBody.MsgContent.Data.title; + systemModel.content = msgBody.MsgContent.Data.content; + //计算文本高度 宽度245 + CGSize size = [self calculateTextSize:systemModel.content withFont:[UIFont systemFontOfSize:13]]; + systemModel.systemHeight = size.height; + systemModel.textHeight = MessageTypeReviceCustom; + [self.dataArray addObject:systemModel]; + + } + + } + + + + if([msgBody.MsgType isEqualToString:@"TIMCustomElem"]) //自定义消息 + { + if ( [msgBody.MsgContent.Data.businessID isEqualToString:@"system"])//自定义评论 + + { + UILabel * commanLabel = [[UILabel alloc] init]; + CGFloat h = [HQCommonUtils getSpaceLabelHeight:commanLabel withStr:msgBody.MsgContent.Data.content withFont:[UIFont systemFontOfSize:14] withWidth:245 - 28 withLineSpacing:2]; + CGFloat textMaxWidth = 245.f; + CGFloat textMaxHeight = h + 100; + + CustomSystemEvaluateModel * systemModel = [[CustomSystemEvaluateModel alloc] init]; + systemModel.title = msgBody.MsgContent.Data.title; + systemModel.content = msgBody.MsgContent.Data.content; + //计算文本高度 宽度245 + CGSize size = [self calculateTextSize:systemModel.content withFont:[UIFont systemFontOfSize:13]]; + systemModel.systemHeight = size.height; + [self.dataArray addObject:systemModel]; + + } + } + } + //自己造一个文本model + + self.homeTable.dataArray = self.dataArray; + + } + +} + +- (CGSize)calculateTextSize:(NSString *)text withFont:(UIFont *)font { + // 限制宽度为245 + CGFloat maxWidth = 245.0; + CGFloat verticalPadding = 20.0; // 上下各10点边距 + + // 创建限制尺寸 + CGSize maxSize = CGSizeMake(maxWidth, CGFLOAT_MAX); + + // 设置文本属性 + NSDictionary *attributes = @{NSFontAttributeName: font}; + + // 计算文本矩形 + CGRect textRect = [text boundingRectWithSize:maxSize + options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading + attributes:attributes + context:nil]; + + // 返回计算出的尺寸,并加上上下边距 + return CGSizeMake(textRect.size.width, textRect.size.height + verticalPadding); +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIHistoryTable.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIHistoryTable.h new file mode 100644 index 0000000..f249abd --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIHistoryTable.h @@ -0,0 +1,18 @@ +// +// CustomTUIHistoryTable.h +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomTUIHistoryTable : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIHistoryTable.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIHistoryTable.m new file mode 100644 index 0000000..1dea67f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/VC/CustomTUIHistoryTable.m @@ -0,0 +1,164 @@ +// +// CustomTUIHistoryTable.m +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import "CustomTUIHistoryTable.h" +#import "CustomMapMessageCell.h" +#import "CustomSystemTextCell.h" +#import "CustomSystemImageCell.h" +#import "CustomHealthFileVideoCell.h" +#import "CustomAudioCell.h" +#import "CustomHealthReportVideoCell.h" +#import "CustomReviceTableViewCell.h" +#import "CustomTUIHistoryModel.h" +#import "CustomDoctorIDTableViewCell.h" + +@interface CustomTUIHistoryTable() + +@end + +@implementation CustomTUIHistoryTable + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { + + if (self = [super initWithFrame:frame style:style]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + if ([[UIDevice currentDevice].systemVersion floatValue] >= 11) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; + + +} + +- (void)setDataArray:(NSArray *)dataArray { + + _dataArray = dataArray; + + [self reloadData]; + +} + +#pragma mark - tableview的代理方法 +//组数 +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + + return 1; +} +//每组多少行 +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} +//注册cell +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + CustomTUIHistoryModel * model = self.dataArray[indexPath.row]; + + if (model.msgType == MessageTypeText) // 文本消息 + { + CustomSystemTextCell * textCell = [[CustomSystemTextCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TEXTCELLID"]; + + textCell.model = model; + + textCell.backgroundColor = KClearColor; + return textCell; + } + if (model.msgType == MessageTypeImage) // 图文消息 + { + CustomSystemImageCell * iamgeCell = [[CustomSystemImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"IMAGECELLID"]; + + + return iamgeCell; + } + if (model.msgType == MessageTypeVideo) // 视频消息 + { + CustomSystemImageCell * iamgeCell = [[CustomSystemImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"IMAGECELLID"]; + + return iamgeCell; + } + if (model.msgType == MessageTypeMapCustom) // 地图消息 + { + CustomMapMessageCell * mapCell = [[CustomMapMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MAPCELLID"]; + + return mapCell; + } + if (model.msgType == MessageTypeReviceCustom) // 评论消息 + { + CustomReviceTableViewCell * reviceCell = [[CustomReviceTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"REVICECELLID"]; + + return reviceCell; + } + if (model.msgType == MessageTypeDoctorCard) // 文本消息 + { + + CustomDoctorIDTableViewCell * reviceCell = [[CustomDoctorIDTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"REVICECELLID"]; + + return reviceCell; + } + if (model.msgType == MessageTypeHealthData) // 健康档案 + { + + } + return UITableViewCell.new; +} +////每行高度 +//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +//{ +// +// return 40; +//} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { + + return CGFLOAT_MIN; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + + return CGFLOAT_MIN; +} + +//组头 --- 组尾 + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + + return [UIView new]; + +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + return [UIView new]; + +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + + + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomAudioCell.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomAudioCell.h new file mode 100644 index 0000000..6eea7d6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomAudioCell.h @@ -0,0 +1,16 @@ +// +// CustomAudioCell.h +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomAudioCell : UITableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomAudioCell.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomAudioCell.m new file mode 100644 index 0000000..bb10684 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomAudioCell.m @@ -0,0 +1,23 @@ +// +// CustomAudioCell.m +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import "CustomAudioCell.h" + +@implementation CustomAudioCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomDoctorIDTableViewCell.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomDoctorIDTableViewCell.h new file mode 100644 index 0000000..ace5b7a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomDoctorIDTableViewCell.h @@ -0,0 +1,16 @@ +// +// CustomDoctorIDTableViewCell.h +// EscortProject +// +// Created by Apple on 2024/7/5. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomDoctorIDTableViewCell : UITableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomDoctorIDTableViewCell.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomDoctorIDTableViewCell.m new file mode 100644 index 0000000..86ce2c3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomDoctorIDTableViewCell.m @@ -0,0 +1,23 @@ +// +// CustomDoctorIDTableViewCell.m +// EscortProject +// +// Created by Apple on 2024/7/5. +// + +#import "CustomDoctorIDTableViewCell.h" + +@implementation CustomDoctorIDTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthFileVideoCell.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthFileVideoCell.h new file mode 100644 index 0000000..21a0c4d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthFileVideoCell.h @@ -0,0 +1,16 @@ +// +// CustomHealthFileVideoCell.h +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomHealthFileVideoCell : UITableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthFileVideoCell.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthFileVideoCell.m new file mode 100644 index 0000000..f334c68 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthFileVideoCell.m @@ -0,0 +1,23 @@ +// +// CustomHealthFileVideoCell.m +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import "CustomHealthFileVideoCell.h" + +@implementation CustomHealthFileVideoCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthReportVideoCell.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthReportVideoCell.h new file mode 100644 index 0000000..14b1cac --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthReportVideoCell.h @@ -0,0 +1,16 @@ +// +// CustomHealthReportVideoCell.h +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomHealthReportVideoCell : UITableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthReportVideoCell.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthReportVideoCell.m new file mode 100644 index 0000000..fed2751 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomHealthReportVideoCell.m @@ -0,0 +1,39 @@ +// +// CustomHealthReportVideoCell.m +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import "CustomHealthReportVideoCell.h" + +@implementation CustomHealthReportVideoCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style + reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomMapMessageCell.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomMapMessageCell.h new file mode 100644 index 0000000..0142b26 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomMapMessageCell.h @@ -0,0 +1,17 @@ +// +// CustomMapMessageCell.h +// EscortProject +// +// Created by Apple on 2024/6/12. +// + +#import +#import +#import "CustomMapMessageCellData.h" + + +@interface CustomMapMessageCell : UITableViewCell + + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomMapMessageCell.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomMapMessageCell.m new file mode 100644 index 0000000..08ad66b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomMapMessageCell.m @@ -0,0 +1,79 @@ +// +// CustomMapMessageCell.m +// EscortProject +// +// Created by Apple on 2024/6/12. +// + +#import "CustomMapMessageCell.h" + +@interface CustomMapMessageCell () + +@property (nonatomic, strong) UIImageView * heardImage; + +@property (nonatomic, strong) UILabel * connetLabel; + + +@end + +@implementation CustomMapMessageCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + [self createUI]; + + + } + return self; +} + +- (void)createUI { + + self.heardImage = [[UIImageView alloc] init]; + self.heardImage.backgroundColor = KRedColor; + [self.contentView addSubview:self.heardImage]; + self.heardImage.layer.cornerRadius = 15; + self.heardImage.layer.masksToBounds = true; + [self.heardImage mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(@15); + make.top.mas_equalTo(@8); + make.height.width.mas_equalTo(@30); + }]; + + self.connetLabel = [[UILabel alloc] init]; + self.connetLabel.backgroundColor = KRedColor; + [self.contentView addSubview:self.heardImage]; + self.connetLabel.layer.cornerRadius = 10; + self.connetLabel.layer.masksToBounds = true; + self.connetLabel.numberOfLines = 0; + [self.connetLabel mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(self.heardImage.right).offset(8); + make.top.mas_equalTo(@10); + make.width.mas_equalTo(@245.0); + }]; + [self.connetLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + +} + + + +@end + + diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomReviceTableViewCell.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomReviceTableViewCell.h new file mode 100644 index 0000000..c0c4b33 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomReviceTableViewCell.h @@ -0,0 +1,16 @@ +// +// CustomReviceTableViewCell.h +// EscortProject +// +// Created by Apple on 2024/7/5. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomReviceTableViewCell : UITableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomReviceTableViewCell.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomReviceTableViewCell.m new file mode 100644 index 0000000..da470e9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomReviceTableViewCell.m @@ -0,0 +1,23 @@ +// +// CustomReviceTableViewCell.m +// EscortProject +// +// Created by Apple on 2024/7/5. +// + +#import "CustomReviceTableViewCell.h" + +@implementation CustomReviceTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemImageCell.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemImageCell.h new file mode 100644 index 0000000..0380026 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemImageCell.h @@ -0,0 +1,19 @@ +// +// CustomSystemImageCell.h +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import +#import "CustomTUIHistoryModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface CustomSystemImageCell : UITableViewCell + +@property (nonatomic, strong) CustomTUIHistoryModel * model; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemImageCell.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemImageCell.m new file mode 100644 index 0000000..58e64f5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemImageCell.m @@ -0,0 +1,102 @@ +// +// CustomSystemImageCell.m +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import "CustomSystemImageCell.h" + +@interface CustomSystemImageCell () + +@property (nonatomic, strong) UIImageView * phoneImage; + +@property (nonatomic, strong) UIImageView * heardImage; + +@property (nonatomic, strong) UIImageView * connetLabel; + +@end + +@implementation CustomSystemImageCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style + reuseIdentifier:reuseIdentifier]) { + [self createUI]; + } + return self; +} + +- (void)createUI { + + self.phoneImage = [[UIImageView alloc] init]; + self.phoneImage.backgroundColor = KRedColor; + [self.contentView addSubview:self.phoneImage]; + self.phoneImage.layer.cornerRadius = 10; + self.phoneImage.layer.masksToBounds = true; + [self.phoneImage mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(@15); + make.top.mas_equalTo(@8); + make.height.width.mas_equalTo(@100); + }]; + + +} +- (void)setModel:(CustomTUIHistoryModel *)model { + + _model = model; + + if (_model.isSelf == true) { //头像在右 + + [self.heardImage mas_updateConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(@-15); + make.top.mas_equalTo(@8); + make.height.width.mas_equalTo(@30); + }]; + + [self.connetLabel mas_updateConstraints:^(MASConstraintMaker *make) { + + make.right.mas_equalTo(self.heardImage.left).offset(8); + make.top.mas_equalTo(@10); + make.width.mas_equalTo(@245.0); + make.bottom.mas_offset(8); + }]; + [self.connetLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + }else + { + [self.heardImage mas_updateConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(@15); + make.top.mas_equalTo(@8); + make.height.width.mas_equalTo(@30); + }]; + + [self.connetLabel mas_updateConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(self.heardImage.right).offset(8); + make.top.mas_equalTo(@10); + make.width.mas_equalTo(@245.0); + make.bottom.mas_offset(8); + }]; + } + + + [self.heardImage sd_setImageWithURL: [NSURL URLWithString: [NSString stringWithFormat:@"%@",_model.avatar]] placeholderImage:PLACEHOLD_IMG]; + +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemTextCell.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemTextCell.h new file mode 100644 index 0000000..545d60b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemTextCell.h @@ -0,0 +1,17 @@ +// +// CustomSystemTextCell.h +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import +#import "CustomTUIHistoryModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomSystemTextCell : UITableViewCell +@property (nonatomic, strong) CustomTUIHistoryModel * model; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemTextCell.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemTextCell.m new file mode 100644 index 0000000..5a54655 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemTextCell.m @@ -0,0 +1,167 @@ +// +// CustomSystemTextCell.m +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import "CustomSystemTextCell.h" + +@interface CustomSystemTextCell () + +@property (nonatomic, strong) UIImageView * heardImage; + +@property (nonatomic, strong) UILabel * connetLabel; + +@property (nonatomic, strong) UILabel * nickNameLabel; + +@end + +@implementation CustomSystemTextCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + [self createUI]; + + + } + return self; +} + +- (void)createUI { + + self.heardImage = [[UIImageView alloc] init]; + self.heardImage.backgroundColor = KWhiteColor; + self.heardImage.image = [UIImage imageNamed:@"heard_man"]; + [self.contentView addSubview:self.heardImage]; + self.heardImage.layer.cornerRadius = 20; + self.heardImage.layer.masksToBounds = true; + [self.heardImage mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(@15); + make.top.mas_equalTo(@8); + make.height.width.mas_equalTo(@30); + }]; + + self.nickNameLabel = [[UILabel alloc] init]; + self.nickNameLabel.text = @"全科医生"; + [self.contentView addSubview:self.nickNameLabel]; + self.nickNameLabel.font = SYSTEMFONT(12); + [self.nickNameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(self.heardImage.mas_right).offset(10); + make.top.mas_equalTo(@10); + make.width.mas_equalTo(@300.0); + make.height.mas_offset(13); + }]; + + + self.connetLabel = [[UILabel alloc] init]; + self.connetLabel.backgroundColor = KWhiteColor; + [self.contentView addSubview:self.connetLabel]; + self.connetLabel.font = SYSTEMFONT(15); + self.connetLabel.layer.cornerRadius = 10; + self.connetLabel.layer.masksToBounds = true; + self.connetLabel.numberOfLines = 0; + [self.connetLabel mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(self.heardImage.mas_right).offset(8); + make.top.mas_equalTo(self.nickNameLabel.mas_bottom).offset(2); + make.width.mas_equalTo(@300.0); + make.bottom.mas_offset(8); + }]; + [self.connetLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + + [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_offset(0); + make.bottom.mas_equalTo(self.connetLabel.mas_bottom).offset(10); + }]; +} + +- (void)setModel:(CustomTUIHistoryModel *)model { + + _model = model; + + + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.firstLineHeadIndent = 10.0; // 左边距 + paragraphStyle.headIndent = 10.0; // 左边距 + paragraphStyle.tailIndent = -10.0; // 右边距 + + NSDictionary *attributes = @{ + NSParagraphStyleAttributeName: paragraphStyle + }; + + NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:model.content attributes:attributes]; + + // 将带有内边距的 attributedText 赋值给 UILabel + self.connetLabel.attributedText = attributedText; + + if (_model.isSelf == true) { //头像在右 + + [self.heardImage mas_updateConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(@-15); + make.top.mas_equalTo(@8); + make.height.width.mas_equalTo(@30); + }]; + + [self.connetLabel mas_updateConstraints:^(MASConstraintMaker *make) { + + make.right.mas_equalTo(self.heardImage.mas_left).offset(10); + make.top.mas_equalTo(@10); + make.width.mas_equalTo(@300.0); + make.bottom.mas_offset(8); + }]; + [self.connetLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + }else + { + [self.heardImage mas_updateConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(@15); + make.top.mas_equalTo(@8); + make.height.width.mas_equalTo(@40); + }]; + + [self.nickNameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(self.heardImage.mas_right).offset(10); + make.top.mas_equalTo(@10); + make.width.mas_equalTo(@300.0); + make.height.mas_offset(13); + }]; + + + [self.connetLabel mas_updateConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(self.heardImage.mas_right).offset(10); + make.top.mas_equalTo(self.nickNameLabel.mas_bottom).offset(5); + make.width.mas_equalTo(@245.0); + make.bottom.mas_offset(8); + }]; + } + [self.contentView mas_updateConstraints:^(MASConstraintMaker *make) { + make.top.mas_offset(0); + make.bottom.mas_equalTo(self.connetLabel.mas_bottom).offset(10); + }]; + [self.contentView layoutIfNeeded]; + +// [self.heardImage sd_setImageWithURL: [NSURL URLWithString: [NSString stringWithFormat:@"%@",_model.avatar]] placeholderImage:PLACEHOLD_IMG]; + +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemVideoCell.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemVideoCell.h new file mode 100644 index 0000000..ca5f9f1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemVideoCell.h @@ -0,0 +1,16 @@ +// +// CustomSystemVideoCell.h +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CustomSystemVideoCell : UITableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemVideoCell.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemVideoCell.m new file mode 100644 index 0000000..c4ed379 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cell/CustomSystemVideoCell.m @@ -0,0 +1,23 @@ +// +// CustomSystemVideoCell.m +// EscortProject +// +// Created by Apple on 2024/6/14. +// + +#import "CustomSystemVideoCell.h" + +@implementation CustomSystemVideoCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cellData/CustomMapMessageCellData.h b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cellData/CustomMapMessageCellData.h new file mode 100644 index 0000000..5fec76d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cellData/CustomMapMessageCellData.h @@ -0,0 +1,18 @@ +// +// CustomMapMessageCellData.h +// EscortProject +// +// Created by Apple on 2024/6/12. +// + +#import "TUIMessageCellData.h" +#import + + +@interface CustomMapMessageCellData : TUIBubbleMessageCellData + +@property (nonatomic, copy) NSString *text; +@property (nonatomic, copy) NSString * MapPictureImg; + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cellData/CustomMapMessageCellData.m b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cellData/CustomMapMessageCellData.m new file mode 100644 index 0000000..3632559 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/CustomTUIChat/cellData/CustomMapMessageCellData.m @@ -0,0 +1,79 @@ +// +// CustomMapMessageCellData.m +// EscortProject +// +// Created by Apple on 2024/6/12. +// + +#import "CustomMapMessageCellData.h" +#import + +@implementation CustomMapMessageCellData + ++ (TUIMessageCellData *)getCellData:(V2TIMMessage *)message{ +// NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.locationElem.desc options:NSJSONReadingAllowFragments error:nil]; + CustomMapMessageCellData *cellData = [[CustomMapMessageCellData alloc] initWithDirection:message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming]; + cellData.innerMessage = message; + cellData.msgID = message.msgID; + cellData.text = message.locationElem.desc; + cellData.MapPictureImg = [self mapLocationImage:message.locationElem.longitude Withlation:message.locationElem.latitude]; + cellData.reuseId = @"MapMessageCustomCell"; + cellData.showAvatar = true; +// cellData.avatarUrl = [NSURL URLWithString:message.faceURL]; + return cellData; +} + + ++ (NSString *)mapLocationImage:(CGFloat)longLation Withlation:(CGFloat)lation { + // 0: self.longLation,self.lation + //https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png + NSString * staciUrl = @"https://restapi.amap.com/v3/staticmap?key=9e4aac9a04b8296e9039adce3b472f28"; + NSString * mapKey = @"9e4aac9a04b8296e9039adce3b472f28"; + NSString * loctaionUrl = @"https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png"; + + NSString * needMdString = [NSString stringWithFormat:@"key=%@&location=%f,%f&markers=-1,%@,0:%f,%f&size=700*500&zoom=154985aa1abb49ce2daa20d032a374eb58",mapKey,longLation,lation,loctaionUrl,longLation,lation]; + + + NSString * mapUrl = [NSString stringWithFormat:@"%@&location=%f,%f&markers=-1,%@,0:%f,%f&size=700*500&zoom=15&sig=%@",staciUrl,longLation,lation,loctaionUrl,longLation,lation,[self md5:needMdString]]; + + return mapUrl; + + + +} +//md加密 ++ (NSString *)md5:(NSString *)str +{ + const char *cStr = [str UTF8String]; + unsigned char result[16]; + CC_MD5(cStr, strlen(cStr), result); // This is the md5 call + return [NSString stringWithFormat: + @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + result[0], result[1], result[2], result[3], + result[4], result[5], result[6], result[7], + result[8], result[9], result[10], result[11], + result[12], result[13], result[14], result[15] + ]; +} + + + +- (CGSize)contentSize +{ +// CGRect rect = [self.text boundingRectWithSize:CGSizeMake(300, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } context:nil]; +// CGSize size = CGSizeMake(ceilf(rect.size.width)+1, ceilf(rect.size.height)); +// // 加上气泡边距 +// size.height += 60; +// size.width += 20; +// return size; + + CGFloat textMaxWidth = 245.f; + + CGSize size = CGSizeMake(textMaxWidth, 170); + return size; +} + + + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/Login/HQLoginViewController.h b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/HQLoginViewController.h new file mode 100644 index 0000000..f3170e7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/HQLoginViewController.h @@ -0,0 +1,16 @@ +// +// HQLoginViewController.h +// healthQuestion +// +// Created by xulei on 2022/8/16. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HQLoginViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/Login/HQLoginViewController.m b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/HQLoginViewController.m new file mode 100644 index 0000000..0891e62 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/HQLoginViewController.m @@ -0,0 +1,576 @@ +// +// HQLoginViewController.m +// healthQuestion +// +// Created by xulei on 2022/8/16. +// + +#import "HQLoginViewController.h" +#import "TUIC2CChatViewController.h" +#import "LoginFoundPasswordViewController.h" +#import "IMUserInfoModel.h" +#import "RSAObjC.h" +#import "MineCenterUserModel.h" +#import "ADJumpViewController.h" +#import "HQRegisterViewController.h" +#import "LVKeyboard.h" +#import "MQTextField.h" +@interface HQLoginViewController () + +@property (nonatomic, strong) UITextField * userNameField; + +@property (nonatomic, strong) MQTextField * passwordField; + +@property (nonatomic, strong) UIButton * logoBtn; + +@property (nonatomic, strong) UIView * loginView; + +@property (nonatomic, strong) UIButton * privacyPolicyBtn; + +@property (nonatomic, strong) UIButton * agreenBtn; + +@property (nonatomic, strong) IMUserInfoModel * model ; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, strong) UIButton * regisBtn; + +@property (nonatomic, strong) LVKeyboard *keyboard; + +@property (nonatomic, strong) UIButton *toggleButton; + +@end + +@implementation HQLoginViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; +} + + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = YES; + self.view.backgroundColor = KWhiteColor; + [self createUI]; + [self createData]; +// [self ishiderRegisData]; + //初始化键盘 + LVKeyboard *keyboard = [[LVKeyboard alloc] init]; + keyboard.delegate = self; + self.keyboard = keyboard; + + +} + +- (void)createUI { + + UIImageView * topBackImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(243))]; + topBackImg.image = IMAGE_NAMED(@"loginTopBimg"); + topBackImg.userInteractionEnabled = true; + [self.view addSubview:topBackImg]; + + UIImageView * cenetrImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, kRealValue(70), kRealValue(68), kRealValue(68))]; + cenetrImg.centerX = self.view.centerX; + cenetrImg.image = IMAGE_NAMED(@"login_icon"); + cenetrImg.userInteractionEnabled = true; + [self.view addSubview:cenetrImg]; + + UIButton * homeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + homeBtn.frame = CGRectMake(kRealValue(15), kRealValue(40),kRealValue(100), 41); + [homeBtn setTitle:@"< 去首页" forState:UIControlStateNormal]; + [homeBtn.titleLabel setFont:BOLDSYSTEMFONT(14)]; + [homeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [homeBtn addTarget:self action:@selector(backHomeAction) forControlEvents:UIControlEventTouchUpInside]; + [topBackImg addSubview:homeBtn]; + + UIImageView *titleImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, cenetrImg.bottom + kRealValue(20), kRealValue(109), kRealValue(24))]; + titleImg.centerX = self.view.centerX; + titleImg.image = IMAGE_NAMED(@"loginTitle_Img"); + [self.view addSubview:titleImg]; +// + UIView *loginView = [[UIView alloc]init]; + loginView.frame = CGRectMake(0, titleImg.bottom + kRealValue(41), kScreenWidth, kScreenHeight - titleImg.bottom - kRealValue(41)); + [self.view addSubview:loginView]; + loginView.backgroundColor = KWhiteColor; + UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:loginView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(20, 20)]; + CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; + maskLayer.path = maskPath.CGPath; + loginView.layer.mask = maskLayer; + self.loginView = loginView; +// + UITextField *accountField = [[UITextField alloc]init]; + accountField.frame = CGRectMake(kRealValue(35), kRealValue(36), loginView.width - kRealValue(70), 40); + accountField.placeholder = @"请输入用户名"; + accountField.font = BOLDSYSTEMFONT(14); + accountField.textColor = CFontColor1; + self.userNameField = accountField; + self.userNameField.backgroundColor = UIColorHex(#EEEEEE); + self.userNameField.layer.cornerRadius = 20; + self.userNameField.layer.masksToBounds = true; + UIView * leftview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 40)]; + self.userNameField.leftView = leftview; + self.userNameField.leftViewMode = UITextFieldViewModeAlways; + [loginView addSubview:accountField ]; +// +// + MQTextField * passwordField = [[MQTextField alloc]init]; + passwordField.frame = CGRectMake(kRealValue(35), accountField.bottom + kRealValue(19), accountField.width, accountField.height); + passwordField.placeholder = @"请输入密码"; + passwordField.font = BOLDSYSTEMFONT(14); + passwordField.textColor = CFontColor1; + passwordField.backgroundColor = UIColorHex(#EEEEEE); + passwordField.secureTextEntry = YES; + self.passwordField = passwordField; + self.passwordField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 40)]; + self.passwordField.leftViewMode = UITextFieldViewModeAlways; + self.passwordField.layer.cornerRadius = 20; + self.passwordField.layer.masksToBounds = true; + self.passwordField.delegate = self; + self.passwordField.inputView = self.keyboard; + + self.toggleButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [self.toggleButton setImage:[UIImage imageNamed:@"eye"] forState:UIControlStateNormal]; + [self.toggleButton setImage:[UIImage imageNamed:@"eye.slash"] forState:UIControlStateSelected]; + self.toggleButton.frame = CGRectMake(0, 5, 30,30); + [self.toggleButton addTarget:self action:@selector(togglePasswordVisibility) forControlEvents:UIControlEventTouchUpInside]; + // 创建一个容器视图来包含按钮,并增加边距 + UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; + [rightView addSubview:self.toggleButton]; + + // 调整按钮在容器视图中的位置,增加边距 + self.toggleButton.center = CGPointMake(rightView.frame.size.width - self.toggleButton.frame.size.width / 2, rightView.frame.size.height / 2); + self.passwordField.rightView = rightView; + self.passwordField.rightViewMode = UITextFieldViewModeAlways; + + [loginView addSubview:passwordField]; + + + + + UIButton *loginBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + loginBtn.frame = CGRectMake(kRealValue(35), self.passwordField.bottom + kRealValue(19), WIDTH - kRealValue(70), 41); + [loginBtn setTitle:@"登录" forState:UIControlStateNormal]; + [loginBtn.titleLabel setFont:BOLDSYSTEMFONT(14)]; + [loginBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [loginBtn setBackgroundImage:[UIImage imageNamed:@"loginBtn_img"] forState:UIControlStateNormal]; + [loginBtn addTarget:self action:@selector(toClickFootBtn:) forControlEvents:UIControlEventTouchUpInside]; + [loginView addSubview:loginBtn]; + + UIButton * foundPasswordBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + foundPasswordBtn.frame = CGRectMake(kRealValue(35), loginBtn.bottom + kRealValue(10), WIDTH - kRealValue(70), 20); + [foundPasswordBtn setTitle:@"找回密码" forState:UIControlStateNormal]; + foundPasswordBtn.titleLabel.font = MEDIUMFONT(14); + [foundPasswordBtn setTitleColor:UIColorHex(#999999) forState:UIControlStateNormal]; + [foundPasswordBtn addTarget:self action:@selector(foundUserPasswordAction) forControlEvents:UIControlEventTouchUpInside]; + [loginView addSubview:foundPasswordBtn]; + + + UIButton * regisBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + regisBtn.frame = CGRectMake(kRealValue(35), foundPasswordBtn.bottom + kRealValue(20), kScreenWidth - kRealValue(70), 20); + [regisBtn setTitle:@"注册" forState:UIControlStateNormal]; + self.regisBtn = regisBtn; + regisBtn.titleLabel.font = MEDIUMFONT(14); + self.regisBtn.hidden = true; + [regisBtn setTitleColor:UIColorHex(#999999) forState:UIControlStateNormal]; + [regisBtn addTarget:self action:@selector(regisAction) forControlEvents:UIControlEventTouchUpInside]; + [loginView addSubview:regisBtn]; + + [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"LOGINAgree"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + NSUserDefaults * agreeDefaul = [NSUserDefaults standardUserDefaults]; + + NSString * agree = [agreeDefaul objectForKey:@"LOGINAgree"]; + + self.agreenBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + self.agreenBtn.frame = CGRectMake(kRealValue(28), self.view.bottom - kRealValue(45) - SafetyAreaHeight, kRealValue(20), kRealValue(20)); + [self.agreenBtn addTarget:self action:@selector(agreeProtocolAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.agreenBtn setImage:IMAGE_NAMED(@"login_nomalProtocol") forState:UIControlStateNormal]; + [self.agreenBtn setImage:IMAGE_NAMED(@"login_selectProtocol") forState:UIControlStateSelected]; + if ([agree intValue] == 1) { + self.agreenBtn.selected = true; + }else + { + self.agreenBtn.selected = false; + } + [self.view addSubview:self.agreenBtn]; + + + //隐私 + YYLabel * yslabel = [[YYLabel alloc] initWithFrame:CGRectMake(self.agreenBtn.right + kRealValue(5) ,self.agreenBtn.top , kScreenWidth - self.agreenBtn.right - kRealValue(47), 20)]; + [self.view addSubview:yslabel]; + yslabel.numberOfLines = 0; + + NSString *string = @"已阅读并同意《用户协议》、《隐私政策》"; + NSMutableAttributedString *attributed = [[NSMutableAttributedString alloc] initWithString:string]; + [attributed setAttribute:NSForegroundColorAttributeName value:UIColorHex(#3390FF) range:[string rangeOfString:@"《用户协议》"]]; + [attributed setAttribute:NSForegroundColorAttributeName value:UIColorHex(#3390FF) range:[string rangeOfString:@"《隐私政策》"]]; +// [attributed setAttribute:NSForegroundColorAttributeName value:UIColorHex(#3390FF) range:[string rangeOfString:@"《相关法律说明》"]]; + + YYTextHighlight * protocolHightlight = [[YYTextHighlight alloc] init]; + protocolHightlight.userInfo = @{@"协议":@"《用户协议》"}; + [protocolHightlight setColor:UIColorHex(#3390FF)]; + [attributed setTextHighlight:protocolHightlight range:[string rangeOfString:@"《用户协议》"]]; + + YYTextHighlight * layHightlight = [[YYTextHighlight alloc] init]; + layHightlight.userInfo = @{@"隐私":@"《隐私政策》"}; + [layHightlight setColor:UIColorHex(#3390FF)]; + [attributed setTextHighlight:layHightlight range:[string rangeOfString:@"《隐私政策》"]]; + +// +// YYTextHighlight * shuoHightlight = [[YYTextHighlight alloc] init]; +// shuoHightlight.userInfo = @{@"说明":@"《相关法律说明》"}; +// [shuoHightlight setColor:UIColorHex(#3390FF)]; +// [attributed setTextHighlight:shuoHightlight range:[string rangeOfString:@"《相关法律说明》"]]; + + attributed.lineSpacing = 3; + attributed.paragraphSpacing = 5; + yslabel.attributedText = attributed; + + yslabel.highlightTapAction = ^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + NSString *string = [text.string substringWithRange:range]; + if ([string containsString:@"用户协议"]){ + if (self.dataArray.count <= 0) { + [EasyTextView showErrorText:@"暂无用户协议"]; + return; + } + for (MineCenterUserModel * model in self.dataArray) { + + if ([model.value integerValue] == 1) { + + ADJumpViewController * webVC= [[ADJumpViewController alloc] init]; + webVC.webTitle = @"用户协议"; + webVC.webUrl = [NSString stringWithFormat:@"%@%@",IntervenH5,model.text]; + [self.navigationController pushViewController:webVC animated:YES]; + } + + } + + } + if ([string containsString:@"隐私政策"]){ + if (self.dataArray.count <= 0) { + [EasyTextView showErrorText:@"暂无隐私政策"]; + return; + } + for (MineCenterUserModel * model in self.dataArray) { + if ([model.value integerValue] == 2) { + + ADJumpViewController * webVC= [[ADJumpViewController alloc] init]; + webVC.webTitle = @"隐私政策"; + webVC.webUrl = [NSString stringWithFormat:@"%@%@",IntervenH5,model.text]; + [self.navigationController pushViewController:webVC animated:YES]; + } + } + } + if ([string containsString:@"相关法律说明"]){ + for (MineCenterUserModel * model in self.dataArray) { + if ([model.value integerValue] == 3) { + + ADJumpViewController * webVC= [[ADJumpViewController alloc] init]; + webVC.webTitle = @"相关法律说明"; + webVC.webUrl = [NSString stringWithFormat:@"%@%@",IntervenH5,model.text]; + [self.navigationController pushViewController:webVC animated:YES]; + } + } + } + }; + +} +- (void)createData { + + JKCQAPI * agreeAPI = [[JKCQAPI alloc] init:self tag:@"AGREEAPI" NeedToken:@""]; + + [agreeAPI getUserAgreementPrivacy:nil]; + +} + + +#pragma mark - ACTION +- (void)toClickFootBtn:(UIButton *)button{ + + if (self.agreenBtn.selected == false) { + [EasyTextView showErrorText:@"请选阅读并同意用户服务协议与隐私"]; + return;; + } + + + + if (self.userNameField.text.length < 1) { + [EasyTextView showErrorText:@"请输入用户名"]; + return;; + } + + if (self.passwordField.text.length < 12 || self.passwordField.text.length > 32) { + + + + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"密码不安全,请先修改密码" preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + + LoginFoundPasswordViewController * modifVC = [[LoginFoundPasswordViewController alloc] init]; + [self.navigationController pushViewController:modifVC animated:YES]; + + }]; + [alertController addAction:cancelAction]; + [alertController addAction:sureAction]; + + [self presentViewController:alertController animated:YES completion:nil]; + + + return;; + } + + if (self.passwordField.text.length < 1) { + [EasyTextView showErrorText:@"请输入密码"]; + return;; + } + + NSString * publish_key = @" MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmZfR/bA9X3vp86y1aEpvwzXJYKRRF1fLau2+05/ZtaITLpV8bhkmSf3neSy/Q9gAdvG75Fr73E+GWE+K5b0BpvIS1jDGo319+PpZR39SaZTKZ27XFXrosmJTZutN79t819HS1VseleunHAFgMVufE9U5jP6LGzl/wbkSy01GhzwIDAQAB"; + + // 原始数据,要加密的字符串 + NSString *originalString = self.passwordField.text; + + // RSA 加密,使用字符串格式的公钥私钥加密解密, RSAPublickKey 为公钥字符串(NSString 格式) + NSString *encryptStr = [RSAObjC encrypt:originalString PublicKey:publish_key]; + + [self showMBProgressHUDWithString:@"登录中" autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.userNameField.text forKey:@"username"]; + //新增 + UIDevice *currentDevice = [UIDevice currentDevice]; + NSString * phone = [currentDevice getCurrentDeviceModel]; +// NSString * system = [NSString stringWithFormat:@"%.1f",CurrentSystemVersion] ; + if (!ValidStr(phone)) { + [parmDic setObject:phone forKey:@"deviceType"]; + + } + [parmDic setObject:@(CurrentSystemVersion) forKey:@"deviceSystem"]; + + [parmDic setObject:encryptStr forKey:@"password"]; + + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"LOGINGAPI" NeedToken:nil]; + [proctocolApi PostLogin:parmDic]; + +// +// NSString * userSig = @""; +// if ([self.userNameField.text isEqual:@"111"]) { +// +// userSig = @"eAEtzMsKgkAUBuB3OdtCzow2N3CTiZs01F4gcmpOkYgjUUTvnjhtv--ygeO*jXx3Pw0DdWBYgig1l1ytl2Sih51VSLHhUqgkqKcrGGhjXZZFvap2mTvnLneHbXOrG1k5XcT4Vk1Bo2Uq471PIQzta5gNjMBEIQZ72nE*4xH*O9TZfqILLcwYg*8PBAYuZw__"; +// }else { +// userSig = @"eAEtzLsOgjAUBuB36arB9gR6gMSBQV0g0UBwcTFpK0esaQARY3x3iXX9-subVXkZ9Ko9O0eKpSLkHBNAiJe-ZCCrZ5UoI0CUodeeLixl1xticRRCtmbf2M0z2dVVsS2jCbKHMK-Tyo1NVotykdvDmvmlnhx186PkYcy5t1F38xsE-N8hpe8DGfIMwD5fblkvWg__"; +// } +// +// [ESCTUIManager loginInitTUISDKUserID:self.userNameField.text userSig:userSig]; +// +// + +} + +#pragma mark -网络请求处理 +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [self hiddenAllMBProgressHUD]; + [self showMBProgressHUDOnlyWithString:message]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + + if ([tag isEqualToString:@"LOGINGAPI"]) { + [self hiddenAllMBProgressHUD]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AVATAR"]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"placeholdImg"]; + + NSDictionary * dic = response; + HQUserInfo * user = [[HQUserInfo alloc] init]; + user.userInfo = [dic objectForKey:@"userInfo"]; + user.token = [dic objectForKey:@"token"]; + [HQCommonUtils keyedArchiverWithData:user key:LoginUserInfo]; + [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"LOGINAgree"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + NSString * avatar = @""; + NSString * placeholdImg ; + if (!ValidStr(user.avatar)) { + avatar = user.avatar; + }else + { + if ([user.sex_dictText isEqualToString:@"女"]) { + placeholdImg = @"heard_man"; + }else + { + placeholdImg = @"heard_woman"; + } + } + if (ValidStr(user.personType) || [user.personType intValue] != 1 ) { + + [self showMBProgressHUDOnlyWithString:@"账号或登录密码错误,请重试"]; + return; + } + [[NSUserDefaults standardUserDefaults] setObject:avatar forKey:@"AVATAR"]; + [[NSUserDefaults standardUserDefaults] setObject:placeholdImg forKey:@"placeholdImg"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + KPostNotification(KNotificationLoginStateChange, @YES); + //登录im + [self loginImAccount]; + } + if ([tag isEqualToString:@"IMAPI"]) { + + NSDictionary * pamrDic = response; + + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + + + // 1. 从即时通信 IM 控制台获取应用 SDKAppID。 + // 2. 初始化 config 对象 + V2TIMSDKConfig *config = [[V2TIMSDKConfig alloc] init]; + + // 3. 指定 log 输出级别。 + config.logLevel = V2TIM_LOG_INFO; + // 4. 添加 V2TIMSDKListener 的事件监听器,self 是 id 的实现类,如果您不需要监听 IM SDK 的事件,这个步骤可以忽略。 + [[V2TIMManager sharedInstance] addIMSDKListener:self]; + // 5. 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 + [[V2TIMManager sharedInstance] initSDK:[model.sdkAppId intValue] config:config]; + + [ESCTUIManager loginInitTUISDKAppidWith:[model.sdkAppId intValue] UserID:model.userId userSig:model.userSig]; + } + if ([tag isEqualToString:@"AGREEAPI"]) { + + NSArray * array = response; + + for (NSDictionary * parmDic in array) { + + MineCenterUserModel * model = [MineCenterUserModel modelWithDictionary:parmDic]; + https://api.cqygjk.com/health-consultation/api/consult/conDoctor/selectDictList?dictKey=qh_jump_url + [self.dataArray addObject:model]; + + } + + } + if ([tag isEqualToString:@"VERSIONAPI"]) { + + NSString * version = response; + + + NSBundle *mainBundle = [NSBundle mainBundle]; + if (mainBundle) { + NSString *version = [mainBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; +// NSString *build = [mainBundle objectForInfoDictionaryKey:@"CFBundleVersion"]; +// NSString *displayName = [mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"]; +// NSString *fullVersion = [NSString stringWithFormat:@"%@ %@ (Build %@)", displayName, version, build]; + if([version floatValue] < [version floatValue]) { + self.regisBtn.hidden = true; + }else + { + self.regisBtn.hidden = false; + } + } + } +} + + +- (void)backHomeAction { + + KPostNotification(KNotificationLoginStateChange, @YES); + +} + + +- (void)loginImAccount { + + + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"IMAPI" NeedToken:nil]; + [proctocolApi GetIMLoginAccount:nil]; + + + +} +//建议整体禁用(复制、粘贴、全选等都被禁用了) +-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{ + + UIMenuController *menuController = [UIMenuController sharedMenuController]; + if (menuController) { + [UIMenuController sharedMenuController].menuVisible = NO; + } + return NO; +} + +- (void)agreeProtocolAction:(UIButton *)agreeBtn { + + agreeBtn.selected = !agreeBtn.selected; + + +} +#pragma mark:找回密码 +- (void)foundUserPasswordAction { +// GastoremteroscopeViewController * resultAppointVC = [[GastoremteroscopeViewController alloc] init]; +// [self.navigationController pushViewController:resultAppointVC animated:YES]; + LoginFoundPasswordViewController * foundVC = [[LoginFoundPasswordViewController alloc] init]; + + [self.navigationController pushViewController:foundVC animated:YES]; +} + +- (void)ishiderRegisData { + + + JKCQAPI * versionAPI = [[JKCQAPI alloc] init:self tag:@"VERSIONAPI" NeedToken:@""]; + + [versionAPI getVesionHideRegis:@{@"type":@"app_update_user_ios"}.mutableCopy]; + + +} + +#pragma mark:注册 +- (void)regisAction { + + HQRegisterViewController * forgetVc = [[HQRegisterViewController alloc] init]; + + [self presentViewController:forgetVc animated:YES completion:nil]; +} + + +-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { + + if(textField == self.passwordField) { + + self.passwordField.inputView = self.keyboard; + } + return YES; + +} + +- (void)keyboard:(LVKeyboard *)keyboard didClickDeleteButton:(UIButton *)deleteBtn string:(NSMutableString *)string { + self.passwordField.text = string; +} + +- (void)keyboard:(LVKeyboard *)keyboard didClickTextButton:(UIButton *)textBtn string:(NSMutableString *)string { + self.passwordField.text = string; +} + + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + [self.passwordField resignFirstResponder]; +} + +- (void)togglePasswordVisibility { + self.passwordField.secureTextEntry = !self.passwordField.secureTextEntry; + self.toggleButton.selected = !self.toggleButton.selected; +} +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginFoundPasswordViewController.h b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginFoundPasswordViewController.h new file mode 100644 index 0000000..6f4a6bf --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginFoundPasswordViewController.h @@ -0,0 +1,16 @@ +// +// LoginFoundPasswordViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/22. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LoginFoundPasswordViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginFoundPasswordViewController.m b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginFoundPasswordViewController.m new file mode 100644 index 0000000..ca8e062 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginFoundPasswordViewController.m @@ -0,0 +1,211 @@ +// +// LoginFoundPasswordViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/22. +// + +#import "LoginFoundPasswordViewController.h" +#import "LoginSetPasswordViewController.h" +#import "LVKeyboard.h" +#import "MQTextField.h" +@interface LoginFoundPasswordViewController () + +@property (nonatomic, strong)UITextField * nameTextFild; +@property (nonatomic, strong)UITextField * phoneTextFild; +@property (nonatomic, strong)MQTextField * codeTextFild; +@property (nonatomic, strong)UIButton * codeButton; +@property (nonatomic, strong) LVKeyboard *keyboard; + +@end + +@implementation LoginFoundPasswordViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = false; + self.navigationItem.title = @"修改密码"; + // Do any additional setup after loading the view. + self.view.backgroundColor = UIColorHex(#E0E0E0); + [self createUI]; +} + +- (void)createUI { + + + //初始化键盘 + LVKeyboard *keyboard = [[LVKeyboard alloc] init]; + keyboard.delegate = self; + self.keyboard = keyboard; + + UIView * topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(151))]; + topView.backgroundColor = KWhiteColor; + [self.view addSubview:topView]; + + + + UIView * nameLeft = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 112, kRealValue(50))]; + UILabel * nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 0, 80, kRealValue(50))]; + nameLabel.text = @"用户姓名"; + nameLabel.textAlignment = NSTextAlignmentLeft; + nameLabel.font = SYSTEMFONT(13); + nameLabel.textColor = UIColorHex(#666666); + [nameLeft addSubview:nameLabel]; + + + self.nameTextFild = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(50))]; + self.nameTextFild.placeholder = @"请输入用户姓名"; + self.nameTextFild.returnKeyType = UIReturnKeyDone; + self.nameTextFild.font = [UIFont systemFontOfSize:14]; + self.nameTextFild.backgroundColor = KWhiteColor; + self.nameTextFild.leftView = nameLeft; + self.nameTextFild.leftViewMode = UITextFieldViewModeAlways; + self.nameTextFild.font = SYSTEMFONT(14); + [topView addSubview:self.nameTextFild]; + + UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(16, self.nameTextFild.bottom, kScreenWidth - 32, 1)]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [topView addSubview:linv]; + + UIView * codeLeft = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 112, kRealValue(50))]; + UILabel * codeLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 0, 90, kRealValue(50))]; + codeLabel.text = @"身份证号"; + codeLabel.textAlignment = NSTextAlignmentLeft; + codeLabel.font = SYSTEMFONT(13); + codeLabel.textColor = UIColorHex(#666666); + + [codeLeft addSubview:codeLabel]; + + self.codeTextFild = [[MQTextField alloc] initWithFrame:CGRectMake(0, self.nameTextFild.bottom+1, kScreenWidth, kRealValue(50))]; + self.codeTextFild.placeholder = @"请输入用户身份证号"; + self.codeTextFild.font = [UIFont systemFontOfSize:14]; + self.codeTextFild.backgroundColor = KWhiteColor; + self.codeTextFild.inputView = self.keyboard; + self.codeTextFild.delegate = self; + self.codeTextFild.leftView = codeLeft; + self.codeTextFild.leftViewMode = UITextFieldViewModeAlways; + [topView addSubview:self.codeTextFild]; + + UIView * linvCard = [[UIView alloc] initWithFrame:CGRectMake(16, self.codeTextFild.bottom, kScreenWidth - 32, 1)]; + linvCard.backgroundColor = UIColorHex(#E0E0E0); + [topView addSubview:linvCard]; + + + UIView * phoneLeft = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 112, kRealValue(50))]; + UILabel * phoneLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 0, 90, kRealValue(50))]; + phoneLabel.text = @"手机号"; + phoneLabel.textAlignment = NSTextAlignmentLeft; + phoneLabel.font = SYSTEMFONT(13); + phoneLabel.textColor = UIColorHex(#666666); + [phoneLeft addSubview:phoneLabel]; + + self.phoneTextFild = [[UITextField alloc] initWithFrame:CGRectMake(0, self.codeTextFild.bottom+1, kScreenWidth, kRealValue(50))]; + self.phoneTextFild.placeholder = @"请输入用户手机号"; + self.phoneTextFild.font = [UIFont systemFontOfSize:14]; + self.phoneTextFild.backgroundColor = KWhiteColor; + self.phoneTextFild.leftView = phoneLeft; + self.phoneTextFild.keyboardType = UIKeyboardTypeNumberPad; + self.phoneTextFild.leftViewMode = UITextFieldViewModeAlways; + [topView addSubview:self.phoneTextFild]; + + UIView * phoneLinv = [[UIView alloc] initWithFrame:CGRectMake(16, self.phoneTextFild.bottom, kScreenWidth - 32, 1)]; + phoneLinv.backgroundColor = UIColorHex(#E0E0E0); + [topView addSubview:phoneLinv]; + + + UIButton * loginBtn = [[UIButton alloc] initWithFrame:CGRectMake(48,self.phoneTextFild.bottom+58, kScreenWidth-96, 48)]; + [loginBtn setTitle:@"确定" forState:UIControlStateNormal ]; + loginBtn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; + [loginBtn setBackgroundColor:UIColorHex(#21BEBD)]; + loginBtn.layer.cornerRadius = 20; + loginBtn.layer.masksToBounds = true; + [loginBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [loginBtn addTarget:self action:@selector(sureFoundAction) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:loginBtn]; +} + +#pragma mark - 确定点击 +- (void)sureFoundAction { + + + if (ValidStr(self.nameTextFild.text)) { + [EasyTextView showErrorText:@"请输入用户姓名"]; + return; + } + if (ValidStr(self.codeTextFild.text)) { + [EasyTextView showErrorText:@"请输入用户身份证号"]; + return; + } + if (ValidStr(self.phoneTextFild.text)) { + [EasyTextView showErrorText:@"请输入用户手机号"]; + return; + } + [self showMBProgressHUDWithString:@"信息验证中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:self.nameTextFild.text forKey:@"realname"]; + [parmDic setObject:self.codeTextFild.text forKey:@"idCard"]; + [parmDic setObject:self.phoneTextFild.text forKey:@"phone"]; + + JKCQAPI * chageApi = [[JKCQAPI alloc] init:self tag:@"CHANGEAPI" NeedToken:@""]; + + [chageApi postSetUserPassword:parmDic]; + + +} + +#pragma mark -网络请求处理 +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"CHANGEAPI"]) { + + [self hiddenAllMBProgressHUD]; + NSString * result = response; + + LoginSetPasswordViewController * password = [[LoginSetPasswordViewController alloc] init]; + password.result = result; + [self.navigationController pushViewController:password animated:YES]; + } + +} + + +-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { + + if(textField == self.codeTextFild) { + + self.codeTextFild.inputView = self.keyboard; + } + return YES; + +} + +- (void)keyboard:(LVKeyboard *)keyboard didClickDeleteButton:(UIButton *)deleteBtn string:(NSMutableString *)string { + self.codeTextFild.text = string; +} + +- (void)keyboard:(LVKeyboard *)keyboard didClickTextButton:(UIButton *)textBtn string:(NSMutableString *)string { + self.codeTextFild.text = string; +} + + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + [self.codeTextFild resignFirstResponder]; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginSetPasswordViewController.h b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginSetPasswordViewController.h new file mode 100644 index 0000000..912e472 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginSetPasswordViewController.h @@ -0,0 +1,18 @@ +// +// LoginSetPasswordViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/22. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LoginSetPasswordViewController : HQBaseViewController + +@property (nonatomic, copy) NSString * result; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginSetPasswordViewController.m b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginSetPasswordViewController.m new file mode 100644 index 0000000..a14673a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/LoginSetPasswordViewController.m @@ -0,0 +1,229 @@ +// +// LoginSetPasswordViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/22. +// + +#import "LoginSetPasswordViewController.h" +#import "RSAObjC.h" +#import "HQLoginViewController.h" + +@interface LoginSetPasswordViewController () + +@property (nonatomic, strong) UITextField * phoneTextFild; +@property (nonatomic, strong) UITextField * codeTextFild; + +@property (nonatomic, strong) UIButton * toggleButton; +@property (nonatomic, strong) UIButton * suretoggleButton; + +@end + +@implementation LoginSetPasswordViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.navigationItem.title = @"设置密码"; + self.view.backgroundColor = UIColorHex(#EFEFEF); + [self createUI]; +} + +- (void)createUI { + + UIView * topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(100))]; + topView.backgroundColor = KWhiteColor; + [self.view addSubview:topView]; + + + + UIView * phoneLeft = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 112, kRealValue(50))]; + UILabel * phoneLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 0, 80, kRealValue(50))]; + phoneLabel.text = @"新密码"; + phoneLabel.textAlignment = NSTextAlignmentLeft; + phoneLabel.font = SYSTEMFONT(13); + phoneLabel.textColor = UIColorHex(#666666); + [phoneLeft addSubview:phoneLabel]; + + + self.phoneTextFild = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(50))]; + self.phoneTextFild.placeholder = @"请输入新密码"; + self.phoneTextFild.returnKeyType = UIReturnKeyDone; + self.phoneTextFild.font = [UIFont systemFontOfSize:14]; + self.phoneTextFild.backgroundColor = KWhiteColor; + self.phoneTextFild.leftView = phoneLeft; + self.phoneTextFild.secureTextEntry = YES; + self.phoneTextFild.leftViewMode = UITextFieldViewModeAlways; + self.phoneTextFild.font = SYSTEMFONT(14); + [self.view addSubview:self.phoneTextFild]; + + + self.toggleButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [self.toggleButton setImage:[UIImage imageNamed:@"eye"] forState:UIControlStateNormal]; + [self.toggleButton setImage:[UIImage imageNamed:@"eye.slash"] forState:UIControlStateSelected]; + self.toggleButton.frame = CGRectMake(0, 5, 30,30); + [self.toggleButton addTarget:self action:@selector(togglePasswordVisibility) forControlEvents:UIControlEventTouchUpInside]; + // 创建一个容器视图来包含按钮,并增加边距 + UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; + [rightView addSubview:self.toggleButton]; + + // 调整按钮在容器视图中的位置,增加边距 + self.toggleButton.centerX = rightView.centerX; + + self.toggleButton.center = CGPointMake(rightView.frame.size.width - self.toggleButton.frame.size.width / 2, rightView.frame.size.height / 2); + self.phoneTextFild.rightView = rightView; + self.phoneTextFild.rightViewMode = UITextFieldViewModeAlways; + + UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(16, self.phoneTextFild.bottom, kScreenWidth - 32, 1)]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [self.view addSubview:linv]; + + UIView * codeLeft = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 112, kRealValue(50))]; + UILabel * codeLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 0, 90, kRealValue(50))]; + codeLabel.text = @"确认密码"; + codeLabel.textAlignment = NSTextAlignmentLeft; + codeLabel.font = SYSTEMFONT(13); + codeLabel.textColor = UIColorHex(#666666); + [codeLeft addSubview:codeLabel]; + + self.codeTextFild = [[UITextField alloc] initWithFrame:CGRectMake(0, self.phoneTextFild.bottom+1, kScreenWidth, kRealValue(50))]; + self.codeTextFild.placeholder = @"请输入新密码"; + self.codeTextFild.font = [UIFont systemFontOfSize:14]; + self.codeTextFild.backgroundColor = KWhiteColor; + self.codeTextFild.leftView = codeLeft; + self.codeTextFild.secureTextEntry = YES; + self.codeTextFild.leftViewMode = UITextFieldViewModeAlways; + [self.view addSubview:self.codeTextFild]; + + + self.suretoggleButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [self.suretoggleButton setImage:[UIImage imageNamed:@"eye"] forState:UIControlStateNormal]; + [self.suretoggleButton setImage:[UIImage imageNamed:@"eye.slash"] forState:UIControlStateSelected]; + self.suretoggleButton.frame = CGRectMake(0, 5, 30,30); + [self.suretoggleButton addTarget:self action:@selector(sureTogglePasswordVisibility) forControlEvents:UIControlEventTouchUpInside]; + // 创建一个容器视图来包含按钮,并增加边距 + UIView *coderightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; + [coderightView addSubview:self.suretoggleButton]; + + // 调整按钮在容器视图中的位置,增加边距 + self.suretoggleButton.centerX = coderightView.centerX; + self.codeTextFild.rightView = coderightView; + self.codeTextFild.rightViewMode = UITextFieldViewModeAlways; + + UILabel * passwordLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), topView.bottom + kRealValue(8) , kScreenWidth - kRealValue(30), 42)]; + passwordLabel.textColor = UIColorHex(#666666); + passwordLabel.text = @"温馨提示:密码需要为12-32位(包含数字、大写、小写字母、特殊字符)"; + passwordLabel.numberOfLines = 2; + passwordLabel.font =MEDIUMFONT(14); + [passwordLabel sizeToFit]; +// NSMutableAttributedString * attString = [HQCommonUtils firstString:@"请为您的账号" firstColor:UIColorHex(#666666) firstSize:14 secondString:@"zhangsan" secondColor:UIColorHex(#333333) secondSize:14 thirdString:@"设置一个新密码" thirdColor:UIColorHex(#666666) thirdSize:14]; +// passwordLabel.attributedText = attString ; +// passwordLabel.textAlignment = NSTextAlignmentCenter; +// [topView addSubview:passwordLabel]; + [self.view addSubview:passwordLabel]; + + UIButton * loginBtn = [[UIButton alloc] initWithFrame:CGRectMake(48,passwordLabel.bottom+58, kScreenWidth-96, 48)]; + [loginBtn setTitle:@"确定" forState:UIControlStateNormal ]; + loginBtn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; + [loginBtn setBackgroundColor:UIColorHex(#21BEBD)]; + loginBtn.layer.cornerRadius = 20; + loginBtn.layer.masksToBounds = true; + [loginBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [loginBtn addTarget:self action:@selector(sureFoundAction) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:loginBtn]; +} + +#pragma mark:重新设置密码 +- (void)sureFoundAction { + + [self.phoneTextFild resignFirstResponder]; + [self.codeTextFild resignFirstResponder]; + + if (ValidStr(self.phoneTextFild.text) || ValidStr(self.codeTextFild.text)) { + [EasyTextView showErrorText:@"请输入新密码"]; + return; + } + if (isValidPassword(self.phoneTextFild.text)) { + + } else { + [EasyTextView showErrorText:@"请按照密码规则,请重新输入"]; + return; + } + if ( ![self.phoneTextFild.text isEqualToString:self.codeTextFild.text]) { + [EasyTextView showErrorText:@"两次输入密码不一致,请重新输入"]; + return; + } + + NSString * publish_key = @" MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmZfR/bA9X3vp86y1aEpvwzXJYKRRF1fLau2+05/ZtaITLpV8bhkmSf3neSy/Q9gAdvG75Fr73E+GWE+K5b0BpvIS1jDGo319+PpZR39SaZTKZ27XFXrosmJTZutN79t819HS1VseleunHAFgMVufE9U5jP6LGzl/wbkSy01GhzwIDAQAB"; + + // 原始数据,要加密的字符串 + NSString *originalString = self.phoneTextFild.text; + + // RSA 加密,使用字符串格式的公钥私钥加密解密, RSAPublickKey 为公钥字符串(NSString 格式) + NSString *encryptStr = [RSAObjC encrypt:originalString PublicKey:publish_key]; + + [self showMBProgressHUDWithString:@"密码重置中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:encryptStr forKey:@"newPassword"]; + [parmDic setObject:encryptStr forKey:@"newPasswordConfirm"]; + [parmDic setObject:self.result forKey:@"resetCode"]; + + JKCQAPI * chageApi = [[JKCQAPI alloc] init:self tag:@"CHANGEAPI" NeedToken:@""]; + + [chageApi postResetUserNewPassword:parmDic]; + + +} + + +BOOL isValidPassword(NSString *password) { + // 定义正则表达式 + NSString *pattern = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*(),.?\":{}|<>]).{12,32}$"; + + // 创建NSPredicate对象 + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern]; + + // 使用NSPredicate对象进行判断 + return [predicate evaluateWithObject:password]; +} + +#pragma mark -网络请求处理 +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"CHANGEAPI"]) { + [self hiddenAllMBProgressHUD]; + [self.navigationController popToRootViewControllerAnimated:YES]; + [self showMBProgressHUDOnlyWithString:response]; + } + +} + + +- (void)togglePasswordVisibility { + self.phoneTextFild.secureTextEntry = !self.phoneTextFild.secureTextEntry; + self.toggleButton.selected = !self.toggleButton.selected; +} + +- (void)sureTogglePasswordVisibility { + self.codeTextFild.secureTextEntry = !self.codeTextFild.secureTextEntry; + self.suretoggleButton.selected = !self.suretoggleButton.selected; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/Login/Model/IMUserInfoModel.h b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/Model/IMUserInfoModel.h new file mode 100644 index 0000000..5572c6f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/Model/IMUserInfoModel.h @@ -0,0 +1,25 @@ +// +// IMUserInfoModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/29. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface IMUserInfoModel : NSObject + +@property (nonatomic, strong) NSDictionary *IMInfo; + + +@property (nonatomic, copy) NSString * sdkAppId; + +@property (nonatomic, copy) NSString * userSig; + +@property (nonatomic, copy) NSString * userId; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/Login/Model/IMUserInfoModel.m b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/Model/IMUserInfoModel.m new file mode 100644 index 0000000..0df806a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/Login/Model/IMUserInfoModel.m @@ -0,0 +1,43 @@ +// +// IMUserInfoModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/29. +// + +#import "IMUserInfoModel.h" + +@implementation IMUserInfoModel + +- (void)encodeWithCoder:(NSCoder *)aCoder +{ + [aCoder encodeObject:self.sdkAppId forKey:@"sdkAppId"]; + [aCoder encodeObject:self.userSig forKey:@"userSig"]; + [aCoder encodeObject:self.userId forKey:@"userId"]; + + +} +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super init]; + if (self) + { + self.userId = [aDecoder decodeObjectForKey:@"userId"]; + self.userSig = [aDecoder decodeObjectForKey:@"userSig"]; + self.sdkAppId = [aDecoder decodeObjectForKey:@"sdkAppId"]; + + } + return self; +} + + +-(void)setIMInfo:(NSDictionary *)IMInfo { + + _IMInfo = IMInfo; + self.sdkAppId = [_IMInfo objectForKey:@"sdkAppId"]; + self.userSig = [_IMInfo objectForKey:@"userSig"]; + self.userId = [_IMInfo objectForKey:@"userId"]; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/register/HQRegisterViewController.h b/XinjiangProject/XinjiangProject/Project/Login_Register/register/HQRegisterViewController.h new file mode 100644 index 0000000..47bb2ad --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/register/HQRegisterViewController.h @@ -0,0 +1,16 @@ +// +// HQRegisterViewController.h +// healthQuestion +// +// Created by xulei on 2022/8/17. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HQRegisterViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Login_Register/register/HQRegisterViewController.m b/XinjiangProject/XinjiangProject/Project/Login_Register/register/HQRegisterViewController.m new file mode 100644 index 0000000..eeacd0b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Login_Register/register/HQRegisterViewController.m @@ -0,0 +1,264 @@ +// +// HQRegisterViewController.m +// healthQuestion +// +// Created by xulei on 2022/8/17. +// + +#import "HQRegisterViewController.h" +#import "ADJumpViewController.h" +#import "MineCenterUserModel.h" + +@interface HQRegisterViewController () + +@property (nonatomic, strong)UITextField * phoneTextField; +@property (nonatomic, strong)UITextField * codeTextField; +@property (nonatomic, strong)UITextField * passwordTextField; +@property (nonatomic, strong)UITextField * surePasswordTextField; +@property (nonatomic, strong)UITextField * inviteCodeTextField; +@property (nonatomic, strong)UIButton * protocolBtn; +@property (nonatomic, strong)UIButton * codeButton; +@property (nonatomic, copy)NSString * protocolString; + +@end + +@implementation HQRegisterViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = YES; + self.StatusBarStyle = UIStatusBarStyleDefault; + self.view.backgroundColor = CViewBgColor; + [self createUI]; + [self getUserProtocol]; +} + +- (void)createUI +{ + + UIImageView * topBackImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(243))]; + topBackImg.image = IMAGE_NAMED(@"loginTopBimg"); + [self.view addSubview:topBackImg]; + + UIImageView * cenetrImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, kRealValue(70), kRealValue(68), kRealValue(68))]; + cenetrImg.centerX = self.view.centerX; + cenetrImg.image = IMAGE_NAMED(@"login_icon"); + [self.view addSubview:cenetrImg]; + + + UIImageView *titleImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, cenetrImg.bottom + kRealValue(20), kRealValue(109), kRealValue(24))]; + titleImg.centerX = self.view.centerX; + titleImg.image = IMAGE_NAMED(@"loginTitle_Img"); + [self.view addSubview:titleImg]; + + UIButton * leftButton = [[UIButton alloc] initWithFrame:CGRectMake(11, 40, 20, 20)]; + [leftButton setImage:[UIImage imageNamed:@"close_Icon"] forState:UIWindowLevelNormal]; + [leftButton addTarget:self action:@selector(leftBtnClick) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:leftButton]; + + UIView * connetView = [[UIView alloc] init]; + connetView.frame = CGRectMake(0, topBackImg.bottom+1, kScreenWidth, 200); + connetView.backgroundColor = [UIColor whiteColor]; + [self.view addSubview:connetView]; + + self.phoneTextField = [self createTextFieldWithFrame:CGRectMake(10, 0, kScreenWidth-20, 50) placeholder:@"请输入账户名" passWord:NO leftImageView:nil rightImageView:nil Font:14]; + self.phoneTextField.delegate =self; + self.phoneTextField.keyboardType = UIKeyboardTypeNumberPad; + [connetView addSubview:self.phoneTextField]; + + + self.passwordTextField = [self createTextFieldWithFrame:CGRectMake(10, self.phoneTextField.bottom+1, kScreenWidth-20, 50) placeholder:@"请输入密码(6-20位)" passWord:NO leftImageView:nil rightImageView:nil Font:14]; + self.passwordTextField.secureTextEntry = YES; + self.passwordTextField.delegate =self; + [connetView addSubview:self.passwordTextField]; + + + + //平台协议 + UIButton * protocolBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, connetView.bottom+9, 20, 20)]; + [protocolBtn setImage:IMAGE_NAMED(@"login_nomalProtocol") forState:UIControlStateNormal]; + [protocolBtn setImage:IMAGE_NAMED(@"login_selectProtocol") forState:UIControlStateSelected]; + protocolBtn.selected = NO; + [protocolBtn addTarget:self action:@selector(agreeProtocol:) forControlEvents:UIControlEventTouchUpInside]; + self.protocolBtn = protocolBtn; + [self.view addSubview:protocolBtn]; + + UILabel * contentTitle = [[UILabel alloc] initWithFrame:CGRectMake(protocolBtn.right+5,connetView.bottom+9, 300, 20)]; + NSString *text = @"我已阅读并同意《健康咨询员工端使用协议》"; + NSMutableAttributedString *attributeStr = [[NSMutableAttributedString alloc]initWithString:text]; + [attributeStr addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:50/255.0 green:170/255.0 blue:223/255.0 alpha:1] range:NSMakeRange(7, text.length - 7)]; + contentTitle.attributedText = attributeStr; + contentTitle.textAlignment = NSTextAlignmentLeft; + contentTitle.font = [UIFont systemFontOfSize:12]; + contentTitle.userInteractionEnabled = YES; + UITapGestureRecognizer * tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)]; + [contentTitle addGestureRecognizer:tapRecognizer]; + [self.view addSubview:contentTitle]; + + UIButton * loginBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, self.surePasswordTextField.bottom+140, kScreenWidth-20, 44)]; + loginBtn.mj_y = self.protocolBtn.bottom+25; + [loginBtn setTitle:@"注册" forState:UIControlStateNormal ]; + loginBtn.tag = 100; + loginBtn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:16]; + [loginBtn setBackgroundImage:[UIImage imageNamed:@"loginBtn_img"] forState:UIControlStateNormal]; + [loginBtn setTitleColor:UIColorTitle1 forState:UIControlStateNormal]; + [loginBtn addTarget:self action:@selector(regisOnClick) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:loginBtn]; + +} +- (void)agreeProtocol:(UIButton *)agreeBtn +{ + agreeBtn.selected = !agreeBtn.selected; + +} + +#pragma mark - 获取协议 +- (void)getUserProtocol { + + JKCQAPI * agreeAPI = [[JKCQAPI alloc] init:self tag:@"AGREEAPI" NeedToken:@""]; + + [agreeAPI getUserAgreementPrivacy:nil]; +} + +// 跳转用户协议 +- (void)tap +{ + + ADJumpViewController * webVC= [[ADJumpViewController alloc] init]; + webVC.webTitle = @"用户注册协议"; + webVC.webUrl = [NSString stringWithFormat:@"%@%@",IntervenH5,self.protocolString]; + [self.navigationController pushViewController:webVC animated:YES]; +} + + +- (void)xmProtocol +{ + self.protocolBtn.selected = YES; + +} + +#pragma mark - 注册 + +- (void)regisOnClick +{ + if ([NSString stringWithFormat:@"%@",self.passwordTextField.text].length<6||[NSString stringWithFormat:@"%@",self.passwordTextField.text].length>20) + { + [EasyTextView showErrorText:@"密码的长度是6-20位"]; + return; + } + + if (!self.protocolBtn.selected ) + { + [EasyTextView showErrorText:@"请先阅读并同意协议"]; + return; + } + + [self showMBProgressHUDOnlyWithString:@"注册已提交,请等待审核通过后方可登录"]; +} + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + + + if ([tag isEqualToString:@"GetUserRegister"]) + { + [self showMBProgressHUDOnlyWithString:@"注册成功"]; + [self dismissViewControllerAnimated:YES completion:nil]; + } + if ([tag isEqualToString:@"AGREEAPI"]) { + + NSArray * array = response; + NSMutableArray * dataArray = [[NSMutableArray alloc] init]; + + for (NSDictionary * parmDic in array) { + + MineCenterUserModel * model = [MineCenterUserModel modelWithDictionary:parmDic]; + if ([model.value integerValue] == 1) { + self.protocolString = model.text; + } + [dataArray addObject:model]; + + } + + } +} + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [EasyTextView showErrorText:message]; + + NSLog(@"apiError=%@",message); + // [self showMessage:message]; + +} + +- (void)leftBtnClick +{ + [self dismissViewControllerAnimated:YES completion:nil]; +} +//实现UITextField代理方法 +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + + [textField resignFirstResponder];//取消第一响应者 + + return YES; +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + [self.view endEditing:YES]; +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +-(UITextField*)createTextFieldWithFrame:(CGRect)frame placeholder:(NSString*)placeholder passWord:(BOOL)YESorNO leftImageView:(UIView*)leftView rightImageView:(UIView*)rightView Font:(float)font +{ + UITextField*textField=[[UITextField alloc]initWithFrame:frame]; + //灰色提示框 + textField.placeholder=placeholder; + //文字对齐方式 + textField.textAlignment=NSTextAlignmentLeft; + textField.secureTextEntry=YESorNO; + + //边框 + //textField.borderStyle=UITextBorderStyleLine; + //键盘类型 + textField.returnKeyType=UIReturnKeyDone; + //关闭首字母大写 + textField.autocapitalizationType=NO; + //清除按钮 + textField.clearButtonMode=NO; + //左图片 + textField.leftView=leftView; + textField.leftViewMode=UITextFieldViewModeAlways; + //右图片 + textField.rightView=rightView; + //编辑状态下一直存在 + textField.rightViewMode=UITextFieldViewModeAlways; + //自定义键盘 + //textField.inputView + //字体 + textField.font=[UIFont systemFontOfSize:font]; + //字体颜色 + UIView * line2 = [[UIView alloc] initWithFrame:CGRectMake(0, frame.size.height-1, kScreenWidth, 1)]; + line2.backgroundColor = UIColorLine; + [textField addSubview:line2]; + return textField; + +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/AddContactViewController.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/AddContactViewController.h new file mode 100644 index 0000000..bea1f48 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/AddContactViewController.h @@ -0,0 +1,21 @@ +// +// AddContactViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import "HQBaseViewController.h" +#import "EmergencyContactModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface AddContactViewController : HQBaseViewController + +@property (nonatomic, copy) NSString * contact_id; + +@property (nonatomic, strong) EmergencyContactModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/AddContactViewController.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/AddContactViewController.m new file mode 100644 index 0000000..bf56c8f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/AddContactViewController.m @@ -0,0 +1,356 @@ +// +// AddContactViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import "AddContactViewController.h" +#import "LineTextField.h" +#import "FamilyMemberRelationModel.h" +#import "BRStringPickerView.h" +#import "AddContactViewController.h" + +@interface AddContactViewController () + +@property (nonatomic, strong) LineTextField * nameField; + +@property (nonatomic, strong) LineTextField * phoneField; + +@property (nonatomic, strong) LineTextField * cardNumberField; + +@property (nonatomic, strong) LineTextField * relationshipTextField; + +@property (nonatomic, strong) NSMutableArray * memberArray; + +@property (nonatomic, copy) NSString * familyInt; + + +@end + +@implementation AddContactViewController + + +- (NSMutableArray *)memberArray { + if (!_memberArray) { + + _memberArray = [[NSMutableArray alloc] init]; + } + + return _memberArray; + +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = false; + self.navigationItem.title = @"紧急联系人"; + self.view.backgroundColor = KWhiteColor; + [self createUI]; + [self getFamilyMembers]; + // Do any additional setup after loading the view. +} + + +- (void)createUI { + + //咨询人姓名 + self.nameField = [self createFieldWithLeftTitle:@"姓名" withRightString:@"" placeholderStr:@"请填写紧急联系人姓名" isShowRight:true]; + self.nameField.frame = CGRectMake(0, 1, kScreenWidth, 51); + [self.view addSubview:self.nameField]; + //手机号 + self.phoneField = [self createFieldWithLeftTitle:@"手机号" withRightString:@" " placeholderStr:@"请填写手机号" isShowRight:true]; + self.phoneField.frame = CGRectMake(0, self.nameField.bottom, kScreenWidth, 51); + [self.view addSubview:self.phoneField]; + //身份证号码, + self.cardNumberField = [self createFieldWithLeftTitle:@"身份证号" withRightString:@"" placeholderStr:@"请填写身份证号" isShowRight:true]; + self.cardNumberField.frame = CGRectMake(0, self.phoneField.bottom, kScreenWidth, 51); + [self.view addSubview:self.cardNumberField]; + + + //与本人关系 + self.relationshipTextField = [self createFieldWithLeftTitle:@"与咨询人关系" withRightString:@">" placeholderStr:@"请点击选择" isShowRight:true]; + self.relationshipTextField.frame = CGRectMake(0, self.cardNumberField.bottom, kScreenWidth, 51); + self.relationshipTextField.userInteractionEnabled = true; + [self.view addSubview:self.relationshipTextField]; + + UIButton * shipBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 51)]; + [shipBtn addTarget:self action:@selector(relastionShipOnclick) forControlEvents:UIControlEventTouchUpInside]; + [self.relationshipTextField addSubview:shipBtn]; + + + //保存按钮 + + if (self.model) { + + self.nameField.text = self.model.name; + self.phoneField.text = self.model.phone; + self.cardNumberField.text = self.model.idCard; + self.relationshipTextField.text = self.model.familyRelation_dictText; + + UIButton * delectBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth/2 - kRealValue(120) , kScreenHeight - kTopHeight - kTabBarHeight - 30 - 40, kRealValue(110), 33)]; + [delectBtn setTitle:@"删除" forState:UIControlStateNormal]; + delectBtn.titleLabel.font = SYSTEMFONT(14); + delectBtn.layer.cornerRadius = 17.0f; + delectBtn.layer.masksToBounds = true; + delectBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + delectBtn.layer.borderWidth = 1.0f; + delectBtn.backgroundColor = KWhiteColor; + [delectBtn addTarget:self action:@selector(delectedInfoAction) forControlEvents:UIControlEventTouchUpInside]; + [delectBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [self.view addSubview:delectBtn]; + + UIButton * saveBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth/2 + kRealValue(10), kScreenHeight - kTopHeight - kTabBarHeight - 30 - 40, kRealValue(110), 33)]; + [saveBtn setTitle:@"保存" forState:UIControlStateNormal]; + saveBtn.titleLabel.font = SYSTEMFONT(14); + saveBtn.layer.cornerRadius = 17; + saveBtn.layer.masksToBounds = true; + saveBtn.backgroundColor = UIColorHex(#21BEBD); + [saveBtn addTarget:self action:@selector(saveInfo) forControlEvents:UIControlEventTouchUpInside]; + [saveBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [self.view addSubview:saveBtn]; + }else + { + UIButton * saveBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(48), kScreenHeight - kTopHeight - kTabBarHeight - 30 - 40, kScreenWidth - kRealValue(96), 40)]; + [saveBtn setTitle:@"保存" forState:UIControlStateNormal]; + saveBtn.titleLabel.font = SYSTEMFONT(14); + saveBtn.layer.cornerRadius = 20.0f; + saveBtn.layer.masksToBounds = true; + saveBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + saveBtn.layer.borderWidth = 1.0f; + saveBtn.backgroundColor = KWhiteColor; + [saveBtn addTarget:self action:@selector(saveInfo) forControlEvents:UIControlEventTouchUpInside]; + [saveBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [self.view addSubview:saveBtn]; + } + +} + + +- (LineTextField *)createFieldWithLeftTitle:(NSString *)leftStr + withRightString:(NSString *)rightStr + placeholderStr:(NSString *)placeStr + isShowRight:(BOOL)isShowRight { + + LineTextField * field = [[LineTextField alloc] init]; + field.font = SYSTEMFONT(13); + field.placeholder = placeStr; + field.textAlignment = NSTextAlignmentRight; + field.backgroundColor = KWhiteColor; + UIView * leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 51)]; + + UILabel * leftlabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16), 0, 100, 51)]; + + leftlabel.text = leftStr; + + leftlabel.font = SYSTEMFONT(13); + + leftlabel.textAlignment = NSTextAlignmentLeft; + + leftlabel.textColor = UIColorHex(#666666); + + [leftView addSubview:leftlabel]; + + field.leftView = leftView; + + field.leftViewMode = UITextFieldViewModeAlways; + + if (isShowRight) { + + UIView * rightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 51)]; + + UILabel * rightlabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, 30, 51)]; + + rightlabel.text = rightStr; + + rightlabel.font = SYSTEMFONT(13); + + rightlabel.textColor = UIColorHex(#666666); + + field.rightView = rightView; + + rightlabel.textAlignment = NSTextAlignmentLeft; + + field.rightViewMode = UITextFieldViewModeAlways; + + [rightView addSubview:rightlabel]; + + } + + return field; +} + +- (void)delectedInfoAction { + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:self.model.contact_ID forKey:@"id"]; + + JKCQAPI * memberApi = [[JKCQAPI alloc] init:self tag:@"DelectedAPI" NeedToken:@""]; + [memberApi getDelectedEmergencyContact:parmDic]; + +} + + +- (void)getFamilyMembers { + + JKCQAPI * memberApi = [[JKCQAPI alloc] init:self tag:@"Family" NeedToken:@""]; + + [memberApi getCheckKeyResult:@{@"dictKey":@"family_member_relation"}]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"Family"]) { + + NSArray * array = response; + + for (NSDictionary * dic in array) { + + FamilyMemberRelationModel * model = [FamilyMemberRelationModel modelWithDictionary:dic] ; + + [self.memberArray addObject:model]; + } + } + if ([tag isEqualToString:@"ADDAPI"]) { + + [EasyTextView showSuccessText:@"操作成功"]; + [self.navigationController popViewControllerAnimated:YES]; + + } + if ([tag isEqualToString:@"DelectedAPI"]) { + + [EasyTextView showSuccessText:@"操作成功"]; + [self.navigationController popViewControllerAnimated:YES]; + } + +} + + + +- (void)relastionShipOnclick { + + /// 1.单列字符串选择器(传字符串数组) + BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init]; + stringPickerView.pickerMode = BRStringPickerComponentSingle; + stringPickerView.title = @"关系"; + + NSMutableArray * array = [[NSMutableArray alloc] init]; + for (FamilyMemberRelationModel * model in self.memberArray) { + + [array addObject:model.text]; + } + stringPickerView.dataSourceArr = array; + stringPickerView.selectIndex = 2; + stringPickerView.resultModelBlock = ^(BRResultModel *resultModel) { + NSLog(@"选择的值:%@", resultModel.value); + + for (FamilyMemberRelationModel * model in self.memberArray) { + + if ([model.text isEqualToString:resultModel.value]) { + + self.familyInt = model.value; + } + + } + self.relationshipTextField.text = resultModel.value; + }; + + [stringPickerView show]; + +} + + +- (void)saveInfo { + + [self.view endEditing:TRUE]; + + + if (ValidStr(self.nameField.text)) { + [EasyTextView showErrorText:@"请输入紧急联系人姓名"]; + return; + } + if (ValidStr(self.phoneField.text)) { + [EasyTextView showErrorText:@"请输入手机号"]; + return; + } + if (ValidStr(self.cardNumberField.text)) { + [EasyTextView showErrorText:@"请输入身份证号"]; + return; + } + + if (ValidStr(self.relationshipTextField.text)) { + [EasyTextView showErrorText:@"请选择与咨询人关系"]; + return; + } + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + if (self.model) { + [parmDic setObject:self.model.contact_ID forKey:@"id"]; + }else + { + [parmDic setObject:@"" forKey:@"id"]; + } + [parmDic setObject:self.nameField.text forKey:@"name"]; + [parmDic setObject:self.phoneField.text forKey:@"phone"]; + [parmDic setObject:self.cardNumberField.text forKey:@"idCard"]; + [parmDic setObject:self.familyInt forKey:@"familyRelation"]; + + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"ADDAPI" NeedToken:@""]; + + [api postAddEmergencyContact:parmDic]; + +} + +- (NSString *)getTimestampFromTime:(NSString *)CurrentTime{ + + + + + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + + [formatter setDateStyle:NSDateFormatterMediumStyle]; + + [formatter setTimeStyle:NSDateFormatterShortStyle]; + + [formatter setDateFormat:@"yyyy-MM-dd"]; //(@"YYYY-MM-dd hh:mm:ss") ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制 + + //设置时区选择北京时间 + + NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"]; + + [formatter setTimeZone:timeZone]; + + NSDate* date = [formatter dateFromString:CurrentTime]; //------------将字符串按formatter转成nsdate + + //时间转时间戳的方法: + + NSInteger timeSp = [[NSNumber numberWithDouble:[date timeIntervalSince1970]] integerValue] * 1000; + + + return [NSString stringWithFormat:@"%ld",(long)timeSp]; + + + +} + + + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/EditSystemViewController.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/EditSystemViewController.h new file mode 100644 index 0000000..f3a273b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/EditSystemViewController.h @@ -0,0 +1,16 @@ +// +// EditSystemViewController.h +// EscortProject +// +// Created by 仁康信息 on 2024/1/10. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface EditSystemViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/EditSystemViewController.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/EditSystemViewController.m new file mode 100644 index 0000000..1c49a4f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/EditSystemViewController.m @@ -0,0 +1,239 @@ +// +// EditSystemViewController.m +// EscortProject +// +// Created by 仁康信息 on 2024/1/10. +// + +#import "EditSystemViewController.h" +#import "LoginFoundPasswordViewController.h" +#import "MineCenterUserModel.h" +#import "ADJumpViewController.h" + +@interface EditSystemViewController () + +@property (nonatomic, strong) UITableView * homeTableView; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@end + +@implementation EditSystemViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = CViewBgColor; + self.navigationItem.title = @"设置"; + [self createUI]; + [self createData]; +} + +- (void)createUI +{ + self.homeTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - kTopHeight) style:UITableViewStyleGrouped]; + if (@available(iOS 11.0, *)) { + self.homeTableView.estimatedRowHeight = 0; + self.homeTableView.estimatedSectionFooterHeight = 0; + self.homeTableView.estimatedSectionHeaderHeight = 0; + self.homeTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.homeTableView.delegate = self; + self.homeTableView.backgroundColor = CViewBgColor; + self.homeTableView.dataSource = self; + self.homeTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; + self.homeTableView.showsVerticalScrollIndicator = NO; + [self.view addSubview:self.homeTableView]; +} + +- (void)createData { + + JKCQAPI * agreeAPI = [[JKCQAPI alloc] init:self tag:@"AGREEAPI" NeedToken:@""]; + + [agreeAPI getUserAgreementPrivacy:nil]; + +} + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + +} + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"AGREEAPI"]) { + + NSArray * array = response; + + for (NSDictionary * parmDic in array) { + + MineCenterUserModel * model = [MineCenterUserModel modelWithDictionary:parmDic]; + + [self.dataArray addObject:model]; + + } + + } +} + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if (section == 0) { + return 3; + } + return 1; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 2; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + if (indexPath.section == 0) { + + NSArray * sectionOne = @[@"账号与安全(修改密码)",@"用户协议",@"隐私政策"]; + + + static NSString * cellID = @"cellID"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.font = SYSTEMFONT(14); + cell.textLabel.text = sectionOne[indexPath.row]; + cell.textLabel.textColor = UIColorHex(#666666); + cell.textLabel.font = SYSTEMFONT(14); + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.backgroundColor = KWhiteColor; + return cell; + + + } + if (indexPath.section == 1) { + + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CONNETCELL"]; + + if (!cell) { + + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"CONNETCELL"]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.font = SYSTEMFONT(14); + cell.textLabel.text = @"版本号"; + cell.detailTextLabel.text = [[[NSBundle mainBundle]infoDictionary] objectForKey:@"CFBundleShortVersionString"]; + return cell; + + + } + + + return UITableViewCell.new; + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + + return 44; + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + + return CGFLOAT_MIN; +} + + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return kRealValue(5); +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + + return UIView.new; + +} + + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + + if (indexPath.section == 0) { + + if (indexPath.row == 0) { + + LoginFoundPasswordViewController * loginVC = [[LoginFoundPasswordViewController alloc] init]; + [self.navigationController pushViewController:loginVC animated:YES]; + } + if (indexPath.row == 1) { + + for (MineCenterUserModel * model in self.dataArray) { + + if ([model.value integerValue] == 1) { + + ADJumpViewController * webVC= [[ADJumpViewController alloc] init]; + webVC.webTitle = @"用户协议"; + webVC.webUrl = [NSString stringWithFormat:@"%@%@",IntervenH5,model.text]; + [self.navigationController pushViewController:webVC animated:YES]; + } + + } + } + if (indexPath.row == 2) { + + for (MineCenterUserModel * model in self.dataArray) { + + if ([model.value integerValue] == 2) { + + ADJumpViewController * webVC= [[ADJumpViewController alloc] init]; + webVC.webTitle = @"隐私政策"; + webVC.webUrl = [NSString stringWithFormat:@"%@%@",IntervenH5,model.text]; + [self.navigationController pushViewController:webVC animated:YES]; + } + + } + } + } + + + +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MinePictureRecordViewController.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MinePictureRecordViewController.h new file mode 100644 index 0000000..45dcf86 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MinePictureRecordViewController.h @@ -0,0 +1,18 @@ +// +// MinePictureRecordViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MinePictureRecordViewController : HQBaseViewController + +@property (nonatomic, assign) NSInteger selectOnes; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MinePictureRecordViewController.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MinePictureRecordViewController.m new file mode 100644 index 0000000..acd4d92 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MinePictureRecordViewController.m @@ -0,0 +1,561 @@ +// +// MinePictureRecordViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// +#import "MinePictureRecordViewController.h" + +#import "QuestionRecoredTable.h" +#import "QuestionRecordModel.h" +#import "RecordIMListDateModel.h" +#import "DoctorMainViewController.h" +@interface MinePictureRecordViewController () + +@property (nonatomic, strong) QuestionRecoredTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * buttonArray; +@property (nonatomic, strong) NSMutableArray * redCountArray; + +@property (nonatomic, assign) NSInteger pageNo; + +@property (nonatomic, copy) NSString * type; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, strong) NSMutableArray * groupIDArray; + +@property (nonatomic, strong) NSMutableArray * jingxingArray; + +@property (nonatomic, assign) NSInteger totalCount; + +@end + + +@implementation MinePictureRecordViewController + + +- (NSMutableArray *)groupIDArray { + + if (!_groupIDArray) { + + _groupIDArray = [[NSMutableArray alloc] init]; + + } + return _groupIDArray; + +} + +- (NSMutableArray *)redCountArray { + + if (!_redCountArray) { + + _redCountArray = [[NSMutableArray alloc] init]; + } + return _redCountArray; + +} +- (NSMutableArray *)jingxingArray { + + if (!_jingxingArray) { + + _jingxingArray = [[NSMutableArray alloc] init]; + + } + return _jingxingArray; + +} + + + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + + } + return _dataArray; + +} + +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + + _buttonArray = [[NSMutableArray alloc] init]; + + } + return _buttonArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.pageNo = 0; + + + [self createUI]; + + if ([ESCTUIManager TUIUserStatus] == false) { + + [self loginImAccount]; + } + + if ([self.type integerValue] == 3) + { + [self getChatList]; + } + else + { + [self createData]; + } + +} + +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + + [self.homeTable.mj_header beginRefreshing]; + + +} +- (void)createUI { + + NSArray * array = @[@"进行中",@"已评价",@"历史"]; + [self.buttonArray removeAllObjects]; + CGFloat w = kRealValue(80); + for (int index = 0; index < array.count; index ++) { + + UIButton * listBtn = [[UIButton alloc] init]; + + listBtn.frame = CGRectMake(kRealValue(15) + (w + kRealValue(13)) * index , kRealValue(15), w, 27); + [listBtn setTitle:array[index] forState:UIControlStateNormal]; + [listBtn setTitleColor:KWhiteColor forState:UIControlStateSelected]; + [listBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + [listBtn addTarget:self action:@selector(statusChange:) forControlEvents:UIControlEventTouchUpInside]; + listBtn.titleLabel.font = SYSTEMFONT(13); + listBtn.layer.cornerRadius = 14.0; + listBtn.layer.masksToBounds = true; + listBtn.tag = 1000 + index; + [self.view addSubview:listBtn]; + if (self.selectOnes == 3) { + if (index == 0 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + } + if (self.selectOnes == 4) { + if (index == 1 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + } + if (self.selectOnes == 5) { + if (index == 2 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + } + if (self.selectOnes == 6) { + if (index == 2 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + } + [self.buttonArray addObject:listBtn]; + + } + + + + self.homeTable = [[QuestionRecoredTable alloc] initWithFrame:CGRectMake(0, 50, kScreenWidth, kScreenHeight - kTopHeight - 50 - SafetyAreaHeight) style:UITableViewStyleGrouped]; + + self.homeTable.detailBlock = ^(NSString * _Nonnull recordID, NSString * _Nonnull imID, NSString * _Nonnull memberId, RecordIMListDateModel * _Nonnull model) { + +// DoctorMainViewController * doctorVC = [[DoctorMainViewController alloc] init]; +// doctorVC.yuyue_id = recordID; +// [self.navigationController pushViewController:doctorVC animated:YES]; + if ([TUILogin isUserLogined]) { + ChatViewController * chatVC = [[ChatViewController alloc] init]; + chatVC.isGroupID = YES; + chatVC.chatID = imID ; + chatVC.pictureEnd_id = recordID ; + chatVC.eableSendReport = true; + chatVC.eablehaveHelathData = false; + chatVC.navTitle = @"图文咨询"; + chatVC.isVideo = NO; + chatVC.questionType = 2; + chatVC.medicalRecordsId = memberId; + //是否评价 + if ([model.contentStatus integerValue] == 5 ) { + chatVC.isEveal = true; + }else + { + chatVC.isEveal = false; + } + + if ([model.contentStatus intValue] >= 4) + { + chatVC.endRecordType = 100; + } + [self.navigationController pushViewController:chatVC animated:YES]; + }else + { + [self loginImAccount]; + } + + }; + [self.view addSubview:self.homeTable]; + +// [self.homeTable mas_makeConstraints:^(MASConstraintMaker *make) { +// make.top.mas_equalTo(@50); +// make.bottom.left.right.mas_offset(0); +// }]; + + + __weak __typeof(self) weakSelf = self; + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 0; + if ([ESCTUIManager TUIUserStatus] == false) { + + [self loginImAccount]; + } + if ([self.type integerValue] == 3) + { + [self getChatList]; + } + else + { + [weakSelf createData]; + } + + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + if ([ESCTUIManager TUIUserStatus] == false) { + + [self loginImAccount]; + } + if ([self.type integerValue] == 3) + { + [self getChatList]; + } + else + { + [weakSelf createData]; + } + }]; + LYEmptyView *emptyView = [LYEmptyView emptyViewWithImageStr:@"noData" titleStr:@"暂无数据" detailStr:@""]; + //元素竖直方向的间距 + emptyView.subViewMargin = 20.f; + //标题颜色 + emptyView.titleLabTextColor = [UIColor blackColor]; + //描述字体 + emptyView.detailLabFont = [UIFont systemFontOfSize:17]; + //按钮背景色 + emptyView.actionBtnBackGroundColor = KWhiteColor; + emptyView.actionBtnWidth = CGFLOAT_MIN; + emptyView.actionBtnHeight = CGFLOAT_MIN; + + //设置空内容占位图 + self.homeTable.ly_emptyView = emptyView; + + +} +//获取腾讯im会话列表 + +- (void)getChatList { + + + V2TIMConversationListFilter *filter = [[V2TIMConversationListFilter alloc] init]; +// filter.type = V2TIM_C2C; //拉取单聊会话 + filter.type = V2TIM_GROUP; //拉取群聊会话 + [[V2TIMManager sharedInstance] getConversationListByFilter:filter nextSeq:self.pageNo count:50 succ:^(NSArray *list, uint64_t nextSeq, BOOL isFinished) { + // 获取会话列表成功,list 为会话列表 + if (self.pageNo == 0) { + [self.groupIDArray removeAllObjects]; + } + DLog(@"%@",list); + [self.redCountArray addObjectsFromArray:list]; + + for (V2TIMConversation * v2Model in list) { + [self.groupIDArray addObject: v2Model.groupID]; + + + } + [self postGroupArray:self.groupIDArray]; + } fail:^(int code, NSString *desc) { + // 获取会话列表失败 + }]; + +// //获取所以会话的未读总数 +// // filter.type = V2TIM_GROUP; //拉取群聊会话 +// +// [[V2TIMManager sharedInstance] getUnreadMessageCountByFilter:filter succ:^(UInt64 totalUnreadCount) { +// self.totalCount = totalUnreadCount; +// } fail:^(int code, NSString *desc) { +// +// }]; + +} + + +#pragma mark:上传id数组 +- (void)postGroupArray:(NSArray *)array { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:array forKey:@"imIds"]; + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:NO]; + JKCQAPI * recordApi = [[JKCQAPI alloc] init:self tag:@"GROUPID" NeedToken:@""]; + [recordApi PostGroupIDArray:parmDic]; +} + + +- (void)createData { + // type : 1 图文 2 音视频 + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + [parmDic setObject:self.type forKey:@"status"]; + [parmDic setObject:@"1" forKey:@"type"]; + //status 1 3 4 5 //4 代评价 + JKCQAPI * recordApi = [[JKCQAPI alloc] init:self tag:@"RECORD" NeedToken:@""]; + [recordApi getMineQuestionRecord:parmDic]; +} + +- (void)loginImAccount { + + + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"IMAPI" NeedToken:nil]; + [proctocolApi GetIMLoginAccount:nil]; + + + +} + + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + if ([tag isEqualToString:@"RECORD"]) { + [self hiddenAllMBProgressHUD]; + if (self.pageNo == 0) { + [self.dataArray removeAllObjects]; + } + NSArray * array = response ; + + for (NSDictionary * dic in array) { + + RecordIMListDateModel * model = [ RecordIMListDateModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; + + } + if ([tag isEqualToString:@"IMAPI"]) { + + + NSDictionary * pamrDic = response; + + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + + // 1. 从即时通信 IM 控制台获取应用 SDKAppID。 + // 2. 初始化 config 对象 + V2TIMSDKConfig *config = [[V2TIMSDKConfig alloc] init]; + // 3. 指定 log 输出级别。 + config.logLevel = V2TIM_LOG_INFO; + // 4. 添加 V2TIMSDKListener 的事件监听器,self 是 id 的实现类,如果您不需要监听 IM SDK 的事件,这个步骤可以忽略。 + [[V2TIMManager sharedInstance] addIMSDKListener:self]; + // 5. 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 + [[V2TIMManager sharedInstance] initSDK:[model.sdkAppId intValue] config:config]; + + // 1. 从即时通信 IM 控制台获取应用 SDKAppID。 + // 2. 初始化 config 对象 + + // 3. 指定 log 输出级别。 + config.logLevel = V2TIM_LOG_INFO; + // 4. 添加 V2TIMSDKListener 的事件监听器,self 是 id 的实现类,如果您不需要监听 IM SDK 的事件,这个步骤可以忽略。 + // 5. 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 + + [TUILogin login:[model.sdkAppId intValue] userID:model.userId userSig:model.userSig succ:^{ + + [self getChatList]; + + } fail:^(int code, NSString *msg) { + + [EasyTextView showErrorText:msg]; + + }]; + + + + + } + if ([tag isEqualToString:@"GROUPID"]) { + + NSArray * array = response; + [self.jingxingArray removeAllObjects]; + [self hiddenAllMBProgressHUD]; + for (NSDictionary * parmDic in array) { + + RecordIMListDateModel * model = [ RecordIMListDateModel modelWithDictionary:parmDic]; + + for (V2TIMConversation * v2Model in self.redCountArray) { + + if ([v2Model.groupID isEqualToString:model.imId]) + { + model.unredCount = v2Model.unreadCount; + } + } + + [self.jingxingArray addObject:model]; + } + self.homeTable.dataArray = self.jingxingArray; +// self.homeTable.totalCount + } +} + +- (void)statusChange:(UIButton *)statusBtn { + [self.dataArray removeAllObjects]; + if (statusBtn.tag == 1000) { + self.type = @"3"; //进行中 + [self getChatList]; + } + if (statusBtn.tag == 1001) { + self.type = @"5"; //已评价 + [self createData]; + } + if (statusBtn.tag == 1002) { + self.type = @""; //全部 历史 + [self createData]; + } + for (UIButton * titBtn in self.buttonArray) { + + if (titBtn == statusBtn) { + + titBtn.selected = YES; + titBtn.backgroundColor = UIColorHex(#21BEBD); + + }else + { + titBtn.selected = NO; + titBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + + +} + +- (void)setSelectOnes:(NSInteger)selectOnes { + + _selectOnes = selectOnes; + self.type = [NSString stringWithFormat:@"%ld",_selectOnes]; + switch (_selectOnes) { + case 3://进行中 + { + for (UIButton * seleBtn in self.buttonArray) { + if (seleBtn.tag == 1000) { + seleBtn.selected = YES; + seleBtn.backgroundColor = UIColorHex(#21BEBD); + }else + { + seleBtn.selected = NO; + seleBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + } + break; + case 5://已评价 + { + for (UIButton * seleBtn in self.buttonArray) { + if (seleBtn.tag == 1001) { + seleBtn.selected = YES; + seleBtn.backgroundColor = UIColorHex(#21BEBD); + }else + { + seleBtn.selected = NO; + seleBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + } + break; + case 6: + { + for (UIButton * seleBtn in self.buttonArray) { + if (seleBtn.tag == 1002) { + seleBtn.selected = YES; + seleBtn.backgroundColor = UIColorHex(#21BEBD); + }else + { + seleBtn.selected = NO; + seleBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + } + break; + + + default: + break; + } + +} + +//在线时票据过期:此时您需要生成新的 userSig,并再次重新调用初始化。 +- (void)onKickedOffline { + + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + [ESCTUIManager outLoginTUISDK]; + KPostNotification(KNotificationLoginStateChange, @NO); + +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineQuestionRecordViewController.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineQuestionRecordViewController.h new file mode 100644 index 0000000..c933613 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineQuestionRecordViewController.h @@ -0,0 +1,18 @@ +// +// MineQuestionRecordViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MineQuestionRecordViewController : HQBaseViewController + +@property (nonatomic, assign) NSInteger type; // 1 进行中 2 待评价 3 已评价 4 历史 +@property (nonatomic, assign) NSInteger titleSelected; // 10 图文 11 音视频 +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineQuestionRecordViewController.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineQuestionRecordViewController.m new file mode 100644 index 0000000..30369ec --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineQuestionRecordViewController.m @@ -0,0 +1,256 @@ +// +// MineQuestionRecordViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// + +#import "MineQuestionRecordViewController.h" +#import "MineVideoRecordViewController.h" +#import "MinePictureRecordViewController.h" + +@interface MineQuestionRecordViewController () + +/** 顶部控件*/ +@property (nonatomic, weak) UIScrollView *topView; +/** 下划线 */ +@property (nonatomic, weak) UIView *lineView; +/** 滚动视图 */ +@property (nonatomic, weak) UICollectionView *collectionView; +/** 当前选中的按钮 */ +@property (nonatomic, weak) UIButton *selectButton; +/** 按钮数组 */ +@property (nonatomic, strong) NSMutableArray *titleButtons; + +@end + +@implementation MineQuestionRecordViewController + +#pragma mark - 懒加载 +- (NSMutableArray *)titleButtons { + if (_titleButtons==nil) { + _titleButtons = [NSMutableArray array]; + } + return _titleButtons; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = NO; + self.title = @"我的咨询"; + self.view.backgroundColor = UIColorBackground; +// [self addNavigationItemWithImageNames:@[@"backIcon@2x"] isLeft:YES target:self action:@selector(popVc) tags:@[@"100"]]; + [self createUI]; + +} + +#pragma mark:返回 +- (void)popVc +{ + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)createUI +{ + [self setupNavgationBar]; + + // 添加底部内容view + [self setupBottomContentView]; + + // 添加所有子控制器 + [self setupAllChildViewController]; + + [self setupAllTitle:self.titleSelected]; + + // 不添加额外滚动区域 + self.automaticallyAdjustsScrollViewInsets = NO; +} + +#pragma mark - 添加所有的子控制器 +- (void)setupAllChildViewController { + + MinePictureRecordViewController * pictureVc = [[MinePictureRecordViewController alloc] init]; + pictureVc.navigationItem.title = @"图文咨询"; + pictureVc.selectOnes = self.type; + pictureVc.view.backgroundColor = CViewBgColor; + [self addChildViewController:pictureVc]; + + // + MineVideoRecordViewController * videoVc = [[MineVideoRecordViewController alloc] init]; + videoVc.navigationItem.title = @"视频咨询"; + videoVc.selectOnes = self.type; + videoVc.view.backgroundColor = CViewBgColor; + [self addChildViewController:videoVc]; + +} + +#pragma mark - 设置导航条内容 +- (void)setupNavgationBar { + UIScrollView *topView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 1, kScreenWidth, kRealValue(48))]; + topView.backgroundColor = [UIColor whiteColor]; + _topView = topView; + [self.view addSubview:topView]; +} + +#pragma mark - 按钮被点击 +- (void)titleClick:(UIButton *)titleButton{ + + NSInteger i = titleButton.tag; + // 重复点击标题按钮的时候,刷新当前界面 + if (titleButton == _selectButton) { + } + + [self selButton:titleButton]; + + //滚动collectionView 修改偏移量 + CGFloat offsetX = i * kScreenWidth; + _collectionView.contentOffset = CGPointMake(offsetX, 0); +} + +#pragma mark - 选中标题按钮 +- (void)selButton:(UIButton *)titleButton{ + + _selectButton.selected = NO; + titleButton.selected = YES; + _selectButton = titleButton; + + // 移动下划线的位置 + [UIView animateWithDuration:0.25 animations:^{ + _lineView.centerX = titleButton.centerX; + }]; +} + +#pragma mark - 添加标题 +- (void)setupAllTitle:(NSInteger)titleSelected{ + + NSUInteger count = self.childViewControllers.count; + CGFloat btnX = 0; + CGFloat btnW = kScreenWidth/count; + CGFloat btnH = _topView.height; + for (int i = 0; i < count; i++) { + UIButton *titleButton = [UIButton buttonWithType:UIButtonTypeCustom]; + titleButton.tag = i; + + UIViewController *vc = self.childViewControllers[i]; + [titleButton setTitle:vc.navigationItem.title forState:UIControlStateNormal]; + // 设置标题颜色 + [titleButton setTitleColor:RGBA(34, 34, 34, 1) forState:UIControlStateSelected]; + [titleButton setTitleColor:RGBA(102, 102, 102, 1) forState:UIControlStateNormal]; + + // 设置标题字体 + titleButton.titleLabel.font = MEDIUMFONT(14); + + btnX = i * btnW; + + titleButton.frame = CGRectMake(btnX, 0, btnW, btnH); + + // 监听按钮点击 + [titleButton addTarget:self action:@selector(titleClick:) forControlEvents:UIControlEventTouchUpInside]; + + [_topView addSubview:titleButton]; + + if (i == titleSelected - 10) { + // 添加下划线 + // 下划线宽度 = 按钮文字宽度 + // 下划线中心点x = 按钮中心点x + CGFloat h = 5; + CGFloat y = kRealValue(45) ; + UIView *lineView =[[UIView alloc] init]; + // 位置和尺寸 + lineView.height = h; + // 先计算文字尺寸,在给label去赋值 + [titleButton.titleLabel sizeToFit]; + lineView.width = kRealValue(28); + lineView.centerX = titleButton.centerX; + lineView.mj_y = y; + lineView.backgroundColor = UIColorHex(#21BEBD); + _lineView = lineView; + [_topView addSubview:lineView]; + + [self titleClick:titleButton]; + } + [self.titleButtons addObject:titleButton]; + } +} + +#pragma mark - 添加底部内容view +- (void)setupBottomContentView +{ + // 创建一个流水布局 + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.itemSize = CGSizeMake(kScreenWidth, kScreenHeight-44); + + // 设置水平滚动方向 + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.minimumInteritemSpacing = 0; + layout.minimumLineSpacing = 0; + + // 创建UICollectionView + UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0,kRealValue(48), kScreenWidth, kScreenHeight - kRealValue(48) ) collectionViewLayout:layout]; + collectionView.backgroundColor = [UIColor whiteColor]; + [self.view addSubview:collectionView]; + _collectionView = collectionView; + collectionView.scrollsToTop = NO; + collectionView.scrollEnabled = YES; + // 开启分页 + collectionView.pagingEnabled = YES; + collectionView.showsHorizontalScrollIndicator = NO; + collectionView.bounces = YES; + + // 展示cell + collectionView.dataSource = self; + collectionView.delegate = self; + + // 注册cell + [collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"COUPCELLID"]; +} + +#pragma mark - UICollectionViewDelegate +// 滚动完成的时候就会调用 +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ + // 获取角标 + NSInteger i = scrollView.contentOffset.x / kScreenWidth; + + // 获取选中标题 + UIButton *selButton = self.titleButtons[i]; + + // 选中标题 + [self selButton:selButton]; +} + +#pragma mark - UICollectionViewDataSource +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ + + return self.childViewControllers.count; +} + +// 只要有新的cell出现的时候才会调用 +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ + + UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"COUPCELLID" forIndexPath:indexPath]; + + // 移除之前子控制器view + [cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + + // 取出对应的子控制器添加到对应cell上 + UIViewController *vc = self.childViewControllers[indexPath.row]; + + [cell.contentView addSubview:vc.view]; + + return cell; +} + + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineUserInfoViewController.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineUserInfoViewController.h new file mode 100644 index 0000000..897b290 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineUserInfoViewController.h @@ -0,0 +1,16 @@ +// +// MineUserInfoViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/26. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MineUserInfoViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineUserInfoViewController.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineUserInfoViewController.m new file mode 100644 index 0000000..fde6c31 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineUserInfoViewController.m @@ -0,0 +1,141 @@ +// +// MineUserInfoViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/26. +// + +#import "MineUserInfoViewController.h" +#import "MineUserInfoTable.h" +#import "EmergencyContactModel.h" +#import "AddContactViewController.h" +@interface MineUserInfoViewController () + +@property (nonatomic, strong) MineUserInfoTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + + +@end + +@implementation MineUserInfoViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + + return _dataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.navigationItem.title = @"个人信息"; + self.isHidenNaviBar = false; + self.view.backgroundColor = KWhiteColor; + [self createUI]; + [self createData]; + +} + +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated] ; + [self.dataArray removeAllObjects]; + [self getEmergencyContact]; + + + +} +- (void)createUI { + + MJWeakSelf + self.homeTable = [[MineUserInfoTable alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - kTopHeight) style:UITableViewStyleGrouped]; + self.homeTable.addBlcok = ^{ + //新增紧急联系人 + [weakSelf addEmergencyContact]; + }; + self.homeTable.editBlcok = ^(EmergencyContactModel * _Nonnull model) { + + AddContactViewController * addVC = [[AddContactViewController alloc] init]; + addVC.model = model; + [weakSelf.navigationController pushViewController:addVC animated:YES]; + }; + [self.view addSubview:self.homeTable]; + +} + +- (void)createData { + + JKCQAPI * infoApi = [[JKCQAPI alloc] init:self tag:@"USERINFO" NeedToken:@""]; + [infoApi getMineCenterUserInfo:nil]; + + +} + + + +- (void)getEmergencyContact { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + + JKCQAPI * numbeApi = [[JKCQAPI alloc] init:self tag:@"ContactAPI" NeedToken:@""]; + + [numbeApi getEmergencyContact:dic]; +} + + +#pragma mark -网络请求处理 +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self hiddenAllMBProgressHUD]; + + if ([tag isEqualToString:@"USERINFO"]) { + NSDictionary * dic = response; + MineCenterUserModel * userModel = [MineCenterUserModel modelWithDictionary:dic]; + self.homeTable.model = userModel; + + } + if ([tag isEqualToString:@"ContactAPI"]) { + + NSArray * array = response; + + for (NSDictionary * parmDic in array) { + + EmergencyContactModel * model = [EmergencyContactModel modelWithDictionary:parmDic]; + + [self.dataArray addObject:model]; + + } + self.homeTable.dataArray = self.dataArray; + } +} +#pragma mark:新增联系人 +- (void)addEmergencyContact { + + AddContactViewController * addVC = [[AddContactViewController alloc] init]; + + [self.navigationController pushViewController:addVC animated:YES]; + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineVideoRecordViewController.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineVideoRecordViewController.h new file mode 100644 index 0000000..0ad5a9c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineVideoRecordViewController.h @@ -0,0 +1,19 @@ +// +// MineVideoRecordViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MineVideoRecordViewController : HQBaseViewController + +@property (nonatomic, assign) NSInteger selectOnes; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineVideoRecordViewController.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineVideoRecordViewController.m new file mode 100644 index 0000000..af15445 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MineVideoRecordViewController.m @@ -0,0 +1,374 @@ +// +// MineVideoRecordViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// + +#import "MineVideoRecordViewController.h" +#import "QuestionRecoredTable.h" +#import "QuestionRecordModel.h" +#import "RecordIMListDateModel.h" +#import "DoctorMainViewController.h" +@interface MineVideoRecordViewController () + +@property (nonatomic, strong) QuestionRecoredTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * buttonArray; + +@property (nonatomic, assign) NSInteger pageNo; + +@property (nonatomic, copy) NSString * type; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, strong) NSMutableArray * groupIDArray; + +@property (nonatomic, strong) NSMutableArray * jingxingArray; + +@end + + +@implementation MineVideoRecordViewController + + +- (NSMutableArray *)groupIDArray { + + if (!_groupIDArray) { + + _groupIDArray = [[NSMutableArray alloc] init]; + + } + return _groupIDArray; + +} + +- (NSMutableArray *)jingxingArray { + + if (!_jingxingArray) { + + _jingxingArray = [[NSMutableArray alloc] init]; + + } + return _jingxingArray; + +} + + + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + + } + return _dataArray; + +} + +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + + _buttonArray = [[NSMutableArray alloc] init]; + + } + return _buttonArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.pageNo = 0; + self.type = [NSString stringWithFormat:@"%ld",_selectOnes]; + [self createUI]; + [self createData]; +} + +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + + [self.homeTable.mj_header beginRefreshing]; + +} + +- (void)createUI { + + NSArray * array = @[@"进行中",@"待评价",@"已评价",@"历史"]; + [self.buttonArray removeAllObjects]; + CGFloat w = kRealValue(70); + for (int index = 0; index < array.count; index ++) { + + UIButton * listBtn = [[UIButton alloc] init]; + + listBtn.frame = CGRectMake(kRealValue(17) + (w + kRealValue(13)) * index , kRealValue(15), w, 27); + [listBtn setTitle:array[index] forState:UIControlStateNormal]; + [listBtn setTitleColor:KWhiteColor forState:UIControlStateSelected]; + [listBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + [listBtn addTarget:self action:@selector(statusChange:) forControlEvents:UIControlEventTouchUpInside]; + listBtn.titleLabel.font = SYSTEMFONT(13); + listBtn.layer.cornerRadius = 14.0; + listBtn.layer.masksToBounds = true; + listBtn.tag = 1000 + index; + [self.view addSubview:listBtn]; +// if (index == 0 ) { +// listBtn.selected = YES; +// listBtn.backgroundColor = UIColorHex(#21BEBD); +// }else{ +// listBtn.backgroundColor = UIColorHex(#DDDDDD); +// } + if (self.selectOnes == 3) { + if (index == 0 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + } + if (self.selectOnes == 4) { + if (index == 1 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + } + if (self.selectOnes == 5) { + if (index == 2 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + } + if (self.selectOnes == 6) { + if (index == 3 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + } + [self.buttonArray addObject:listBtn]; + + } + + + + self.homeTable = [[QuestionRecoredTable alloc] initWithFrame:CGRectMake(0, 50, kScreenWidth, kScreenHeight - kTopHeight - 45 - 60) style:UITableViewStyleGrouped]; + MJWeakSelf; + self.homeTable.detailBlock = ^(NSString * _Nonnull recordID, NSString * _Nonnull imID, NSString * _Nonnull memberId, RecordIMListDateModel * _Nonnull model) { + + DoctorMainViewController * doctorVC = [[DoctorMainViewController alloc] init]; + doctorVC.yuyue_id = recordID; + doctorVC.popType = 1; + [weakSelf.navigationController pushViewController:doctorVC animated:YES]; + }; + [self.view addSubview:self.homeTable]; + + + + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 0; + [weakSelf createData]; + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + [weakSelf createData]; + }]; + LYEmptyView *emptyView = [LYEmptyView emptyViewWithImageStr:@"noData" titleStr:@"暂无数据" detailStr:@""]; + //元素竖直方向的间距 + emptyView.subViewMargin = 20.f; + //标题颜色 + emptyView.titleLabTextColor = [UIColor blackColor]; + //描述字体 + emptyView.detailLabFont = [UIFont systemFontOfSize:17]; + //按钮背景色 + emptyView.actionBtnBackGroundColor = KWhiteColor; + emptyView.actionBtnWidth = CGFLOAT_MIN; + emptyView.actionBtnHeight = CGFLOAT_MIN; + + //设置空内容占位图 + self.homeTable.ly_emptyView = emptyView; +} + + +- (void)createData { + // type : 1 图文 2 音视频 + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + [parmDic setObject:self.type forKey:@"status"]; + [parmDic setObject:@"2" forKey:@"type"]; + //status 1 3 4 5 //4 代评价 + JKCQAPI * recordApi = [[JKCQAPI alloc] init:self tag:@"RECORD" NeedToken:@""]; + [recordApi getMineQuestionRecord:parmDic]; +} + + + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + + if ([tag isEqualToString:@"RECORD"]) { + + [self hiddenAllMBProgressHUD]; + if (self.pageNo == 1) { + [self.dataArray removeAllObjects]; + } + NSArray * array = response ; + if (self.pageNo == 0) { + [self.dataArray removeAllObjects]; + } + for (NSDictionary * dic in array) { + + RecordIMListDateModel * model = [ RecordIMListDateModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + + self.homeTable.dataArray = self.dataArray; + + } + + +} + +- (void)statusChange:(UIButton *)statusBtn { + + + if (statusBtn.tag == 1000) { //进行中 + self.type = @"3"; + } + if (statusBtn.tag == 1001) { //待评价 + self.type = @"4"; + } + if (statusBtn.tag == 1002) { //已评价 + self.type = @"5"; + } + if (statusBtn.tag == 1003) { //全部 + self.type = @"6"; + } + for (UIButton * titBtn in self.buttonArray) { + + if (titBtn == statusBtn) { + + titBtn.selected = YES; + titBtn.backgroundColor = UIColorHex(#21BEBD); + + }else + { + titBtn.selected = NO; + titBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + + [self.homeTable.mj_header beginRefreshing]; +} + +- (void)setSelectOnes:(NSInteger)selectOnes { + + _selectOnes = selectOnes; + + switch (_selectOnes) { + case 3: //进行中 + { + for (UIButton * seleBtn in self.buttonArray) { + if (seleBtn.tag == 1000) { + seleBtn.selected = YES; + seleBtn.backgroundColor = UIColorHex(#21BEBD); + }else + { + seleBtn.selected = NO; + seleBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + } + break; + case 4: //待评价 + { + for (UIButton * seleBtn in self.buttonArray) { + if (seleBtn.tag == 1001) { + seleBtn.selected = YES; + seleBtn.backgroundColor = UIColorHex(#21BEBD); + }else + { + seleBtn.selected = NO; + seleBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + } + break; + case 5://已经评价 + { + for (UIButton * seleBtn in self.buttonArray) { + if (seleBtn.tag == 1002) { + seleBtn.selected = YES; + seleBtn.backgroundColor = UIColorHex(#21BEBD); + }else + { + seleBtn.selected = NO; + seleBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + } + break; + case 6:// 全部历史 + { + for (UIButton * seleBtn in self.buttonArray) { + if (seleBtn.tag == 1002) { + seleBtn.selected = YES; + seleBtn.backgroundColor = UIColorHex(#21BEBD); + }else + { + seleBtn.selected = NO; + seleBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + } + break; + + default: + break; + } + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MyCenterViewController.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MyCenterViewController.h new file mode 100644 index 0000000..2989426 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MyCenterViewController.h @@ -0,0 +1,16 @@ +// +// MyCenterViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MyCenterViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MyCenterViewController.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MyCenterViewController.m new file mode 100644 index 0000000..8689744 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Controller/MyCenterViewController.m @@ -0,0 +1,345 @@ +// +// MyCenterViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "MyCenterViewController.h" +#import "SliderView.h" +#import "UILabel+Extension.h" +#import "SliderView.h" +#import "MyCenterTableView.h" +#import "QuestionPeopleMangerVC.h" +#import "MineQuestionRecordViewController.h" +#import "MineUserInfoViewController.h" +#import "MineCenterUserModel.h" +#import "EditSystemViewController.h" +#import "LoginFoundPasswordViewController.h" +#import "ADJumpViewController.h" +#import "LoginSetPasswordViewController.h" +#import "LoginFoundPasswordViewController.h" +@interface MyCenterViewController () + +@property (nonatomic, strong) MyCenterTableView * homeTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + + +@end + +@implementation MyCenterViewController + + + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = false; + self.navigationItem.title = @"个人中心"; + self.view.backgroundColor = UIColorHex(#EEEEEE); +// [self createTopAndNav]; + [self addNavigationItemWithImageNames:@[@"setting_icon"] isLeft:false target:self action:@selector(settingAction) tags:@[ @"100"]]; + [self createUI]; + + [self createData]; + +} + +-(void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + + if ([HQCommonUtils isLogin]) { + [self createUserInfo]; + [self questionNumber]; + } +} + + +- (void)settingAction { + + EditSystemViewController * infoVC = [[EditSystemViewController alloc] init]; + + [self.navigationController pushViewController:infoVC animated:YES]; + +} + +#pragma mark - numberFormat +- (NSString *)numberFormat:(float)num { + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + [formatter setPositiveFormat:@"0"]; + return [formatter stringFromNumber:[NSNumber numberWithFloat:num]]; +} + + + +- (void)createUI { + + UIView * topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(120))]; + topView.backgroundColor = UIColorHex(#21BEBD); + [self.view addSubview:topView]; + + + + self.homeTable = [[MyCenterTableView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(25), kScreenWidth - kRealValue(30), kScreenHeight - kRealValue(25) - kTopHeight - kTabBarHeight) style:UITableViewStyleGrouped]; + self.homeTable.heardDelegate =self; + self.homeTable.cellDelegate = self; + self.homeTable.contentInset = UIEdgeInsetsMake(20, 0, 0, 0); + [self.homeTable scrollRectToVisible:CGRectMake(0, 29,1, 1) animated:YES]; + [self.view addSubview:self.homeTable]; + + UIButton * outLoginBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(48), kScreenHeight - kTabBarHeight - kTopHeight -kRealValue(100) , kScreenWidth - kRealValue(96), kRealValue(40))]; + outLoginBtn.backgroundColor = KWhiteColor; + if ([HQCommonUtils isLogin]) { + [outLoginBtn setTitle:@"退出登录" forState:UIControlStateNormal]; + [outLoginBtn addTarget:self action:@selector(outLoginUserinfo) forControlEvents:UIControlEventTouchUpInside]; + }else + { + [outLoginBtn setTitle:@"去登录" forState:UIControlStateNormal]; + [outLoginBtn addTarget:self action:@selector(gotoLoginUserinfo) forControlEvents:UIControlEventTouchUpInside]; + } + [outLoginBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + outLoginBtn.layer.cornerRadius = 20; + outLoginBtn.layer.masksToBounds = YES; + outLoginBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + outLoginBtn.titleLabel.font = SYSTEMFONT(14); + outLoginBtn.layer.borderWidth = 1.0f; + [self.view addSubview:outLoginBtn]; +} + +- (void)createUserInfo { + + JKCQAPI * infoApi = [[JKCQAPI alloc] init:self tag:@"USERINFO" NeedToken:@""]; + [infoApi getMineCenterUserInfo:nil]; +} + +- (void)createData { + + JKCQAPI * agreeAPI = [[JKCQAPI alloc] init:self tag:@"AGREEAPI" NeedToken:@""]; + + [agreeAPI getUserAgreementPrivacy:nil]; + +} + + +- (void)outLoginUserinfo { + + + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"是否确定退出登录?" preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + [ESCTUIManager outLoginTUISDK]; + KPostNotification(KNotificationLoginStateChange, @NO); + }]; + [alertController addAction:cancelAction]; + [alertController addAction:sureAction]; + + [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil]; +} + +#pragma mark:进行中 +- (void)myCenterInProgress { + + + if (![HQCommonUtils isLogin]) { + + [EasyTextView showErrorText:@"请登录"]; + return; + } + MineQuestionRecordViewController * recordVC = [[MineQuestionRecordViewController alloc] init]; + recordVC.titleSelected = 10;//图文视频 + recordVC.type = 3; + [self.navigationController pushViewController:recordVC animated:YES]; +} + +#pragma mark:待评价 +- (void)waitEvaluation { + if (![HQCommonUtils isLogin]) { + + [EasyTextView showErrorText:@"请登录"]; + return; + } + MineQuestionRecordViewController * recordVC = [[MineQuestionRecordViewController alloc] init]; + recordVC.titleSelected = 11;//音视频 + recordVC.type = 4; + [self.navigationController pushViewController:recordVC animated:YES]; +} + +#pragma mark:已评价 +- (void)completeEvaluation { + if (![HQCommonUtils isLogin]) { + + [EasyTextView showErrorText:@"请登录"]; + return; + } + MineQuestionRecordViewController * recordVC = [[MineQuestionRecordViewController alloc] init]; + recordVC.titleSelected = 10;//图文视频 + recordVC.type = 4; + [self.navigationController pushViewController:recordVC animated:YES]; + +} +#pragma mark:历史 +- (void)myHistoryAction { + if (![HQCommonUtils isLogin]) { + + [EasyTextView showErrorText:@"请登录"]; + return; + } + MineQuestionRecordViewController * recordVC = [[MineQuestionRecordViewController alloc] init]; + recordVC.titleSelected = 10;//图文视频 + recordVC.type = 6; + [self.navigationController pushViewController:recordVC animated:YES]; + +} +#pragma mark:查看全部 +- (void)lookAllQuestion { + if (![HQCommonUtils isLogin]) { + + [EasyTextView showErrorText:@"请登录"]; + return; + } + MineQuestionRecordViewController * recordVC = [[MineQuestionRecordViewController alloc] init]; + recordVC.titleSelected = 10;//图文视频 + recordVC.type = 6; + [self.navigationController pushViewController:recordVC animated:YES]; +} + +- (void)cellListClick:(NSInteger)cellIndex { + + if (![HQCommonUtils isLogin]) { + + [EasyTextView showErrorText:@"请登录"]; + return; + } + + if (cellIndex == 0) { + + LoginFoundPasswordViewController * loginVC = [[LoginFoundPasswordViewController alloc] init]; + [self.navigationController pushViewController:loginVC animated:YES]; + } + if (cellIndex == 1) { + + if (self.dataArray.count <= 0) { + [EasyTextView showErrorText:@"暂无用户协议"]; + return; + } + for (MineCenterUserModel * model in self.dataArray) { + + if ([model.value integerValue] == 1) { + + ADJumpViewController * webVC= [[ADJumpViewController alloc] init]; + webVC.webTitle = @"用户协议"; + webVC.webUrl = [NSString stringWithFormat:@"%@%@",IntervenH5,model.text]; + [self.navigationController pushViewController:webVC animated:YES]; + } + + } + } + if (cellIndex == 2) { + if (self.dataArray.count <= 0) { + [EasyTextView showErrorText:@"暂无隐私政策"]; + return; + } + for (MineCenterUserModel * model in self.dataArray) { + + if ([model.value integerValue] == 2) { + + ADJumpViewController * webVC= [[ADJumpViewController alloc] init]; + webVC.webTitle = @"隐私政策"; + webVC.webUrl = [NSString stringWithFormat:@"%@%@",IntervenH5,model.text]; + [self.navigationController pushViewController:webVC animated:YES]; + } + + } + } + +} + +- (void)questionNumber { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + + JKCQAPI * numbeApi = [[JKCQAPI alloc] init:self tag:@"NUMBERAPI" NeedToken:@""]; + + [numbeApi getMineCenterNumber:dic]; + +} + +- (void)heardImageOnClick { + + + MineUserInfoViewController * infoVC = [[MineUserInfoViewController alloc] init]; + + [self.navigationController pushViewController:infoVC animated:YES]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + + if ([tag isEqualToString:@"NUMBERAPI"]) { + + NSString * number = response; + + self.homeTable.number = [number integerValue]; + + } + + if ([tag isEqualToString:@"USERINFO"]) { + NSDictionary * dic = response; + MineCenterUserModel * userModel = [MineCenterUserModel modelWithDictionary:dic]; + self.homeTable.userModel = userModel; + + } + if ([tag isEqualToString:@"AGREEAPI"]) { + + NSArray * array = response; + [self.dataArray removeAllObjects]; + for (NSDictionary * parmDic in array) { + + MineCenterUserModel * model = [MineCenterUserModel modelWithDictionary:parmDic]; + + [self.dataArray addObject:model]; + + } + + } +} + +- (void)gotoLoginUserinfo { + + KPostNotification(KNotificationLoginStateChange, @NO); + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessDetailModel.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessDetailModel.h new file mode 100644 index 0000000..e7aab30 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessDetailModel.h @@ -0,0 +1,38 @@ +// +// BigillessDetailModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/21. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BigillessDetailModel : NSObject + +@property (nonatomic, copy) NSString * detail_id; +@property (nonatomic, copy) NSString * hospitalId; +@property (nonatomic, copy) NSString * hospitalName; +@property (nonatomic, copy) NSString * medicalCardNo; +@property (nonatomic, copy) NSString * registerCategory; +@property (nonatomic, copy) NSString * registerCategory_dictText; +@property (nonatomic, copy) NSString * yiyuan_id; +@property (nonatomic, copy) NSString * state; +@property (nonatomic, copy) NSString * desireTime; +@property (nonatomic, copy) NSString * reservationOffice; +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * reservationDoctor; +@property (nonatomic, copy) NSString * diseaseDescribe; +@property (nonatomic, copy) NSString * rejectionReason; +@property (nonatomic, copy) NSString * realname; +@property (nonatomic, copy) NSString * idNo; +@property (nonatomic, copy) NSString * telPhone; +@property (nonatomic, copy) NSString * reservationNo; +@property (nonatomic, copy) NSString * topState; +@property (nonatomic, copy) NSString * rejectionTime; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessDetailModel.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessDetailModel.m new file mode 100644 index 0000000..fe0b92e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessDetailModel.m @@ -0,0 +1,17 @@ +// +// BigillessDetailModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/21. +// + +#import "BigillessDetailModel.h" + +@implementation BigillessDetailModel ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"topState" :@"newState"}; + return dic; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessHospitalModel.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessHospitalModel.h new file mode 100644 index 0000000..a89cefe --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessHospitalModel.h @@ -0,0 +1,19 @@ +// +// BigillessHospitalModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/21. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BigillessHospitalModel : NSObject + +@property (nonatomic, copy) NSString * yiyuan_id; +@property (nonatomic, copy) NSString * name; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessHospitalModel.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessHospitalModel.m new file mode 100644 index 0000000..4307561 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillessHospitalModel.m @@ -0,0 +1,18 @@ +// +// BigillessHospitalModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/21. +// + +#import "BigillessHospitalModel.h" + +@implementation BigillessHospitalModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"yiyuan_id" :@"id"}; + return dic; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillnessModel.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillnessModel.h new file mode 100644 index 0000000..5845d81 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillnessModel.h @@ -0,0 +1,24 @@ +// +// BigillnessModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/21. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BigillnessModel : NSObject + +@property (nonatomic, copy) NSString * zixun_id; +@property (nonatomic, copy) NSString * hospitalName; +@property (nonatomic, copy) NSString * reservationOffice; +@property (nonatomic, copy) NSString * reservationDoctor; +@property (nonatomic, copy) NSString * realname; +@property (nonatomic, copy) NSString * state ;// 状态 1未派单 2已派单 3已接单 4已预约 5已完成 6操作人员驳回 7驻场人员驳回 8 超时未接单 6,7,8红色 其余都是绿色 +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * desireTime; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillnessModel.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillnessModel.m new file mode 100644 index 0000000..d333661 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/BigillnessModel.m @@ -0,0 +1,19 @@ +// +// BigillnessModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/21. +// + +#import "BigillnessModel.h" + +@implementation BigillnessModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"zixun_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/EmergencyContactModel.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/EmergencyContactModel.h new file mode 100644 index 0000000..cfd9531 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/EmergencyContactModel.h @@ -0,0 +1,23 @@ +// +// EmergencyContactModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface EmergencyContactModel : NSObject + +@property (nonatomic, copy) NSString * contact_ID; +@property (nonatomic, copy) NSString * phone; +@property (nonatomic, copy) NSString * familyRelation_dictText; +@property (nonatomic, copy) NSString * name; +@property (nonatomic, copy) NSString * idCard; +@property (nonatomic, copy) NSString * familyRelation; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/EmergencyContactModel.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/EmergencyContactModel.m new file mode 100644 index 0000000..7f041d1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/EmergencyContactModel.m @@ -0,0 +1,19 @@ +// +// EmergencyContactModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import "EmergencyContactModel.h" + +@implementation EmergencyContactModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"contact_ID" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/MineCenterUserModel.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/MineCenterUserModel.h new file mode 100644 index 0000000..7994ae1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/MineCenterUserModel.h @@ -0,0 +1,30 @@ +// +// MineCenterUserModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/26. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface MineCenterUserModel : NSObject + +@property (nonatomic, copy) NSString * realname; +@property (nonatomic, copy) NSString * workNo; +@property (nonatomic, copy) NSString * phone; +@property (nonatomic, copy) NSString * idCard; +@property (nonatomic, copy) NSString * sex; +@property (nonatomic, copy) NSString * sex_dictText; +@property (nonatomic, copy) NSString * personType; +@property (nonatomic, copy) NSString * personType_dictText; +@property (nonatomic, copy) NSString * orgCode; +@property (nonatomic, copy) NSString * avatar; +@property (nonatomic, copy) NSString * value; +@property (nonatomic, copy) NSString * text; +@property (nonatomic, copy) NSString * title; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/MineCenterUserModel.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/MineCenterUserModel.m new file mode 100644 index 0000000..6746c54 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/MineCenterUserModel.m @@ -0,0 +1,12 @@ +// +// MineCenterUserModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/26. +// + +#import "MineCenterUserModel.h" + +@implementation MineCenterUserModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorDetailInfoModel.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorDetailInfoModel.h new file mode 100644 index 0000000..8537bfd --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorDetailInfoModel.h @@ -0,0 +1,107 @@ +// +// SOSDoctorDetailInfoModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/23. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SOSDoctorDetailHistory : NSObject + +@property (nonatomic, copy) NSString * status; +@property (nonatomic, copy) NSString * stationUserId; +@property (nonatomic, copy) NSString * stationUserName; +@property (nonatomic, copy) NSString * stationUserSex; +@property (nonatomic, copy) NSString * accept_dictText; +@property (nonatomic, copy) NSString * updateTime; +@property (nonatomic, copy) NSString * stationBusiness_dictText; +@property (nonatomic, copy) NSString * sendOrderHospital; +@property (nonatomic, copy) NSString * orderId; +@property (nonatomic, copy) NSString * stationBusiness; +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * createBy; +@property (nonatomic, copy) NSString * history_id; +@property (nonatomic, copy) NSString * transferOrderTime; + + +@end + +@interface SOSDoctorDetailInfoModel : NSObject + +@property (nonatomic, copy) NSString * createTimeEnd; +@property (nonatomic, copy) NSString * majorSalvageOpinion; +@property (nonatomic, copy) NSString * infoDesc; +@property (nonatomic, copy) NSString * delFlag; +@property (nonatomic, copy) NSString * detail_id; +@property (nonatomic, copy) NSString * initiatorUserDepart; +@property (nonatomic, copy) NSString * stationUserMobile; +@property (nonatomic, copy) NSString * memo; +@property (nonatomic, copy) NSString * orderDetail; +@property (nonatomic, copy) NSString * stationUserAvatar; + +@property (nonatomic, copy) NSString * updateBy; +@property (nonatomic, copy) NSString * sessionNow; +@property (nonatomic, copy) NSString * stationUserSex; +@property (nonatomic, copy) NSString * stationUserId; +@property (nonatomic, copy) NSString * isDispatch_dictText; +@property (nonatomic, copy) NSString * createBy; +@property (nonatomic, copy) NSString * stationRejectionTime; +@property (nonatomic, copy) NSString * initiatorUserName; +@property (nonatomic, copy) NSString * salvageUserAge; +@property (nonatomic, copy) NSString * createTime; + +@property (nonatomic, copy) NSString * resourceId; +@property (nonatomic, copy) NSString * operationUserSex; +@property (nonatomic, copy) NSString * stationBusiness; +@property (nonatomic, copy) NSString * majorUserSex; +@property (nonatomic, copy) NSString * status; +@property (nonatomic, copy) NSString * operationUserName; +@property (nonatomic, copy) NSString * stationUserDepart; +@property (nonatomic, copy) NSString * salvageUserSecondDepart; +@property (nonatomic, copy) NSString * majorUserId; +@property (nonatomic, copy) NSString * initiatorUserSex; + +@property (nonatomic, strong) NSArray * orderSendRecordList; + +@property (nonatomic, copy) NSString * stationBusiness_dictText; +@property (nonatomic, copy) NSString * majorResponseTime; +@property (nonatomic, copy) NSString * salvageUserMobile; +@property (nonatomic, copy) NSString * initiatorUserId; +@property (nonatomic, copy) NSString * orderStatus; +@property (nonatomic, copy) NSString * salvageUserAvatar; +@property (nonatomic, copy) NSString * initiatorType; +@property (nonatomic, copy) NSString * initiatorUserAge; +@property (nonatomic, copy) NSString * sessionId; + +@property (nonatomic, copy) NSString * salvageUserName; +@property (nonatomic, copy) NSString * initiatorUserMobile; +@property (nonatomic, copy) NSString * stationUserName; +@property (nonatomic, copy) NSString * updateTime; +@property (nonatomic, copy) NSString * operationUserMobile; +@property (nonatomic, copy) NSString * majorUserName; +@property (nonatomic, copy) NSString * isDispatch; +@property (nonatomic, copy) NSString * orderStatus_dictText; +@property (nonatomic, copy) NSString * resourceName; + +@property (nonatomic, copy) NSString * initiatorUserSecondDepart; +@property (nonatomic, copy) NSString * salvageUserDepart; +@property (nonatomic, copy) NSString * orderOverTime; +@property (nonatomic, copy) NSString * initiatorUserIdCard; +@property (nonatomic, copy) NSString * initiatorUserAvatar; +@property (nonatomic, copy) NSString * salvageUserId; +@property (nonatomic, copy) NSString * operationUserId; +@property (nonatomic, copy) NSString * operationResponseTime; +@property (nonatomic, copy) NSString * stationResponseTime; + +@property (nonatomic, copy) NSString * operationSendOrderTime; +@property (nonatomic, assign) BOOL isFill; +@property (nonatomic, copy) NSString * sendOrderHospital; +@property (nonatomic, copy) NSString * salvageUserIdCard; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorDetailInfoModel.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorDetailInfoModel.m new file mode 100644 index 0000000..935dd1c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorDetailInfoModel.m @@ -0,0 +1,40 @@ +// +// SOSDoctorDetailInfoModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/23. +// + +#import "SOSDoctorDetailInfoModel.h" + + + +@implementation SOSDoctorDetailHistory + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"history_id" :@"id"}; + return dic; +} + + +@end + +@implementation SOSDoctorDetailInfoModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"orderSendRecordList":[SOSDoctorDetailHistory class] + }; +} + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"detail_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorModel.h b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorModel.h new file mode 100644 index 0000000..95f0230 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorModel.h @@ -0,0 +1,38 @@ +// +// SOSDoctorModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/22. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + + +@interface SOSDoctorRecordListModel : NSObject + +@property (nonatomic, copy) NSString * sos_id; +@property (nonatomic, copy) NSString * sessionId; +@property (nonatomic, copy) NSString * initiatorUserId; +@property (nonatomic, copy) NSString * initiatorUserName; +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * initiatorUserSex; +@property (nonatomic, copy) NSString * orderStatus_dictText; +@property (nonatomic, copy) NSString * sendOrderHospital; +@property (nonatomic, copy) NSString * stationBusiness; +@property (nonatomic, copy) NSString * orderStatus; +@property (nonatomic, copy) NSString * stationBusiness_dictText; + +@end + + +@interface SOSDoctorModel : NSObject + +@property (nonatomic, strong) NSArray * records; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorModel.m b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorModel.m new file mode 100644 index 0000000..02c35a4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/Model/SOSDoctorModel.m @@ -0,0 +1,37 @@ +// +// SOSDoctorModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/22. +// + +#import "SOSDoctorModel.h" + + + +@implementation SOSDoctorRecordListModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"sos_id" :@"id"}; + return dic; +} + + +@end + + + +@implementation SOSDoctorModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"records":[SOSDoctorRecordListModel class] + }; +} + + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigilessTopStatusView.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigilessTopStatusView.h new file mode 100644 index 0000000..8c7c8fb --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigilessTopStatusView.h @@ -0,0 +1,25 @@ +// +// BigilessTopStatusView.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/21. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BigilessTopStatusView : UIView + +@property (nonatomic, assign) BOOL isSelected; + +@property (nonatomic, assign) BOOL isLast; + +@property (nonatomic, assign) NSInteger lastType; + +@property (nonatomic, copy) NSString * statusString; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigilessTopStatusView.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigilessTopStatusView.m new file mode 100644 index 0000000..8235576 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigilessTopStatusView.m @@ -0,0 +1,120 @@ +// +// BigilessTopStatusView.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/21. +// + +#import "BigilessTopStatusView.h" + + +@interface BigilessTopStatusView () + +@property (nonatomic, strong) UIButton * statusBtn; + +@property (nonatomic, strong) UILabel * statusLabel; + +@property (nonatomic, strong) UILabel * numberLabel; + + +@property (nonatomic, strong) UIImageView * statusView; + +@property (nonatomic, strong) UIView * lineView; + +@end + + +@implementation BigilessTopStatusView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.statusBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(5), 0, kRealValue(38), kRealValue(38))]; + [self.statusBtn setImage:[UIImage imageNamed:@"statusTop_nomal"] forState:UIControlStateNormal]; + [self.statusBtn setImage:[UIImage imageNamed:@"statusTop_selected"] forState:UIControlStateSelected]; + [self addSubview:self.statusBtn]; + + + self.numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(5), 0, kRealValue(38), kRealValue(38))]; + self.numberLabel.textAlignment = NSTextAlignmentCenter; + self.numberLabel.font = SYSTEMFONT(13); + self.numberLabel.text = @"1"; + self.numberLabel.textColor = UIColorHex(#21BEBD); + [self addSubview:self.numberLabel]; + + + self.statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, self.statusBtn.bottom + 8, 60, 13)]; + self.statusLabel.textAlignment = NSTextAlignmentLeft; + self.statusLabel.font = SYSTEMFONT(13); + self.statusLabel.text = @"在线咨询"; + self.statusLabel.textColor = KWhiteColor; + [self addSubview:self.statusLabel]; + + self.statusView = [[UIImageView alloc] initWithFrame:CGRectMake(self.statusBtn.right + kRealValue(13) , kRealValue(13), 20, 7)]; + self.statusView.image = [UIImage imageNamed:@"line_selected"]; + self.statusView.hidden = true; + [self addSubview:self.statusView]; + + self.lineView = [[UIImageView alloc] initWithFrame:CGRectMake(self.statusBtn.right , kRealValue(19), kRealValue(24), 2)]; + self.lineView.backgroundColor = KWhiteColor; + self.lineView.hidden = true; + [self addSubview:self.lineView]; + +} + +- (void)setIsSelected:(BOOL)isSelected { + + _isSelected = isSelected; + + if (_isSelected) { + self.statusBtn.selected = true; + self.statusView.hidden = false; + self.lineView.hidden = true; + self.statusLabel.textColor = KWhiteColor; + } + else { + self.statusBtn.selected = false; + self.statusView.hidden = true; + self.lineView.hidden = false; + self.statusLabel.textColor = UIColorHex(#FBFBFB); + } +} + + +- (void)setLastType:(NSInteger)lastType { + + _lastType = lastType; + + if (_lastType == 3) { + self.lineView.hidden = YES; + self.statusView.hidden = YES; + } + self.numberLabel.text = [NSString stringWithFormat:@"%ld",_lastType + 1]; + +} + +- (void)setStatusString:(NSString *)statusString { + + _statusString = statusString; + + self.statusLabel.text = _statusString; + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessListTable.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessListTable.h new file mode 100644 index 0000000..d833c57 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessListTable.h @@ -0,0 +1,22 @@ +// +// BigillessListTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^lookDetailBlock)(NSString * card_id); + +@interface BigillessListTable : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, copy) lookDetailBlock detailBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessListTable.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessListTable.m new file mode 100644 index 0000000..536ea9e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessListTable.m @@ -0,0 +1,137 @@ +// +// BigillessListTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/19. +// + +#import "BigillessListTable.h" +#import "BigillessTableViewCell.h" + + +@interface BigillessListTable () + + +@end + + +@implementation BigillessListTable + + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { + + if (self = [super initWithFrame:frame style:style]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.backgroundColor = UIColor.clearColor; + self.showsVerticalScrollIndicator = false; + self.showsHorizontalScrollIndicator = false; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; + +} + +- (void)setDataArray:(NSArray *)dataArray { + + _dataArray = dataArray; + + [self reloadData]; +} + +#pragma mark - tableview的代理方法 +//组数 +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; +} +//每组多少行 +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return 1; +} +//注册cell +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + BigillessTableViewCell * cell = [self dequeueReusableCellWithIdentifier:@"STATUSCELL"]; + if (!cell) { + + cell = [[BigillessTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"STATUSCELL"]; + } + cell.model= self.dataArray[indexPath.section]; + cell.backgroundColor = KWhiteColor; + cell.layer.cornerRadius = 10; + cell.layer.masksToBounds = YES; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + + + +} +//每行高度 +//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +//{ +// return kRealValue(77); +//} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + + return kRealValue(10); +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { + + return CGFLOAT_MIN; +} + +//组头 --- 组尾 + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + + return [UIView new]; + +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + + + UIView * footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(10))]; + + + return footerView; + +} +////cell点击事件 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + BigillnessModel * model= self.dataArray[indexPath.section]; + + if (self.detailBlock) { + self.detailBlock(model.zixun_id); + } +} + + +@end + + + diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessTableViewCell.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessTableViewCell.h new file mode 100644 index 0000000..8c84106 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessTableViewCell.h @@ -0,0 +1,18 @@ +// +// BigillessTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/19. +// + +#import +#import "BigillnessModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface BigillessTableViewCell : UITableViewCell + +@property (nonatomic, strong) BigillnessModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessTableViewCell.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessTableViewCell.m new file mode 100644 index 0000000..e7f4ee7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/BigillessTableViewCell.m @@ -0,0 +1,193 @@ +// +// BigillessTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/19. +// + +#import "BigillessTableViewCell.h" + +@interface BigillessTableViewCell() + +@property (nonatomic, strong) UILabel * hospitalLabel; + +@property (nonatomic, strong) UILabel * roomLabel; + +@property (nonatomic, strong) UILabel * doctorLabel; + +@property (nonatomic, strong) UILabel * peopleLabel; + +@property (nonatomic, strong) UILabel * timeLabel; + +@property (nonatomic, strong) UILabel * statusLabel; + +@end + +@implementation BigillessTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; + +} + +- (void)createUI { + + self.hospitalLabel = [[UILabel alloc] init]; + self.hospitalLabel.textColor = UIColorHex(#333333); + self.hospitalLabel.font = BOLDSYSTEMFONT(14); + self.hospitalLabel.textAlignment = NSTextAlignmentLeft; + self.hospitalLabel.text = @"预约医院:"; + [self.contentView addSubview:self.hospitalLabel]; + + [self.hospitalLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(14); + make.top.mas_offset(16); + make.height.mas_offset(14); + }]; + [self.hospitalLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + self.roomLabel = [[UILabel alloc] init]; + self.roomLabel.textColor = UIColorHex(#333333); + self.roomLabel.font = SYSTEMFONT(13); + self.roomLabel.textAlignment = NSTextAlignmentLeft; + self.roomLabel.text = @"预约科室:"; + [self.contentView addSubview:self.roomLabel]; + + + [self.roomLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(14); + make.top.mas_equalTo(self.hospitalLabel.mas_bottom).offset(14); + make.height.mas_offset(14); + make.right.mas_offset (0); + }]; + + + self.doctorLabel = [[UILabel alloc] init]; + self.doctorLabel.textColor = UIColorHex(#333333); + self.doctorLabel.font = SYSTEMFONT(14); + self.doctorLabel.textAlignment = NSTextAlignmentLeft; + self.doctorLabel.text = @"预约医生:"; + [self.contentView addSubview:self.doctorLabel]; + + [self.doctorLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(14); + make.top.mas_equalTo(self.roomLabel.mas_bottom).offset(14); + make.height.mas_offset(14); + make.right.mas_offset (0); + }]; + + self.peopleLabel = [[UILabel alloc] init]; + self.peopleLabel.textColor = UIColorHex(#333333); + self.peopleLabel.font = SYSTEMFONT(14); + self.peopleLabel.text = @"预约人:"; + self.peopleLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.peopleLabel]; + + [self.peopleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(14); + make.top.mas_equalTo(self.doctorLabel.mas_bottom).offset(14); + make.height.mas_offset(14); + make.right.mas_offset (0); + make.bottom.mas_offset(-15); + }]; + + self.timeLabel = [[UILabel alloc] init]; + self.timeLabel.textColor = UIColorHex(#999999); + self.timeLabel.font = SYSTEMFONT(13); + self.timeLabel.textAlignment = NSTextAlignmentRight; + [self.contentView addSubview:self.timeLabel]; + + [self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(@17); + make.height.mas_offset(12); + make.right.mas_offset (-17); + }]; + + self.statusLabel = [[UILabel alloc] init]; + self.statusLabel.textColor = UIColorHex(#16C716); + self.statusLabel.font = SYSTEMFONT(14); + self.statusLabel.textAlignment = NSTextAlignmentRight; + self.statusLabel.text = @"待派单"; + [self.contentView addSubview:self.statusLabel]; + + [self.statusLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(self.timeLabel.mas_right); + make.top.mas_equalTo(self.timeLabel.mas_bottom).offset(28); + make.height.mas_offset(12); + make.right.mas_offset (-17); + }]; +} +- (void)setModel:(BigillnessModel *)model { + + _model = model; + + self.hospitalLabel.text = [NSString stringWithFormat:@"预约医院:%@",model.hospitalName] ; + self.roomLabel.text = [NSString stringWithFormat:@"预约科室:%@",model.reservationOffice]; + self.doctorLabel.text = [NSString stringWithFormat:@"预约医生:%@",model.reservationDoctor]; + self.peopleLabel.text = [NSString stringWithFormat:@"预约人:%@",model.realname]; + self.timeLabel.text = model.createTime; + //状态 1未派单 2已派单 3已接单 4已预约 5已完成 6操作人员驳回 7驻场人员驳回 8 超时未接单 6,7,8红色 其余都是绿色 + if ([_model.state integerValue] == 1 ) { + + self.statusLabel.text =@"待派单"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.state integerValue] == 2 ) { + + self.statusLabel.text =@"已派单"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.state integerValue] == 3 ) { + + self.statusLabel.text =@"已接单"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.state integerValue] == 4 ) { + + self.statusLabel.text =@"已预约"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.state integerValue] == 5 ) { + + self.statusLabel.text =@"已完成"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.state integerValue] == 6 ) { + + self.statusLabel.text =@"被驳回"; + self.statusLabel.textColor = KRedColor; + + + } + if ([_model.state integerValue] == 7 ) { + + self.statusLabel.text =@"被驳回"; + self.statusLabel.textColor = KRedColor; + + + } + if ([_model.state integerValue] == 8 ) { + + self.statusLabel.text =@"未响应"; + self.statusLabel.textColor = KRedColor; + } +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/HistoryOrderTableViewCell.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/HistoryOrderTableViewCell.h new file mode 100644 index 0000000..d365bec --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/HistoryOrderTableViewCell.h @@ -0,0 +1,18 @@ +// +// HistoryOrderTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/23. +// + +#import +#import "SOSDoctorDetailInfoModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface HistoryOrderTableViewCell : UITableViewCell + +@property (nonatomic, strong) SOSDoctorDetailHistory * historyModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/HistoryOrderTableViewCell.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/HistoryOrderTableViewCell.m new file mode 100644 index 0000000..e9d6b00 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/HistoryOrderTableViewCell.m @@ -0,0 +1,101 @@ +// +// HistoryOrderTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/23. +// + +#import "HistoryOrderTableViewCell.h" + +@implementation HistoryOrderTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + + NSArray * leftInfoArray = @[@"派单时间",@"当前状态",@"派单业务",@"派单医院",@"驻场人员",@"转单时间"]; + UIView * linTwoView; + for (int j = 0; j < leftInfoArray.count; j ++) { + + UIView * orderView = [self orderInfoLabelViewWithFrame:CGRectMake(0, kRealValue(5) + kRealValue(25) * j, kScreenWidth - kRealValue(22), kRealValue(25)) withLeftText:leftInfoArray[j] withRightLabTag:300 + j]; + [self addSubview:orderView]; + if (j == leftInfoArray.count - 1) { + linTwoView = [[UIView alloc] initWithFrame:CGRectMake(0, orderView.bottom + kRealValue(8), kScreenWidth - kRealValue(22), 1)]; + linTwoView.backgroundColor = UIColorHex(#E0E0E0); + } + [self addSubview:linTwoView]; + } + +} + +- (UIView *)orderInfoLabelViewWithFrame:(CGRect)frame + withLeftText:(NSString *)leftText + withRightLabTag:(NSInteger)rightTag { + + UIView * labeView = [[UIView alloc] initWithFrame:frame]; + + UILabel * leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(14), 0, 80, kRealValue(25))]; + leftLabel.textColor = UIColorHex(#666666); + leftLabel.font = SYSTEMFONT(13); + leftLabel.textAlignment = NSTextAlignmentLeft; + leftLabel.text = leftText; + [labeView addSubview:leftLabel]; + + + UILabel * rightLabel = [[UILabel alloc] initWithFrame:CGRectMake(kScreenWidth - kRealValue(22) - 200 - kRealValue(14), 0, 200, kRealValue(25))]; + rightLabel.textColor = UIColorHex(#333333); + rightLabel.font = SYSTEMFONT(13); + rightLabel.textAlignment = NSTextAlignmentRight; + rightLabel.text = leftText; + rightLabel.tag = rightTag; + [labeView addSubview:rightLabel]; + + return labeView; + +} + +- (void)setHistoryModel:(SOSDoctorDetailHistory *)historyModel { + + _historyModel = historyModel; + + UILabel * timeLabel = [self viewWithTag:300]; + timeLabel.text = _historyModel.createTime; + + UILabel * currentStatusLabel = [self viewWithTag:301]; + currentStatusLabel.text = _historyModel.accept_dictText; + + UILabel * yewuLabel = [self viewWithTag:302]; + yewuLabel.text = _historyModel.stationBusiness_dictText; + + UILabel * hospitalLabel = [self viewWithTag:303]; + hospitalLabel.text = _historyModel.sendOrderHospital; + + UILabel * zhuchangLabel = [self viewWithTag:304]; + zhuchangLabel.text = _historyModel.stationUserName; + + UILabel * zhuangTimeLabel = [self viewWithTag:305]; + zhuangTimeLabel.text = _historyModel.transferOrderTime; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineHeardTableViewCell.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineHeardTableViewCell.h new file mode 100644 index 0000000..0649c0c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineHeardTableViewCell.h @@ -0,0 +1,18 @@ +// +// MineHeardTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/26. +// + +#import +#import "MineCenterUserModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface MineHeardTableViewCell : UITableViewCell + +@property (nonatomic, strong) MineCenterUserModel * heardModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineHeardTableViewCell.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineHeardTableViewCell.m new file mode 100644 index 0000000..7272941 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineHeardTableViewCell.m @@ -0,0 +1,77 @@ +// +// MineHeardTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/26. +// + +#import "MineHeardTableViewCell.h" + +@interface MineHeardTableViewCell () + +@property (nonatomic, strong) UILabel * headLabel; + +@property (nonatomic, strong) UIImageView * heardImage ; + +@end + +@implementation MineHeardTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + self.headLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 24, 100, 14)]; + self.headLabel.textColor = UIColorHex(#666666); + self.headLabel.text = @"头像"; + self.headLabel.font = MEDIUMFONT(14); + self.headLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.headLabel]; + + self.heardImage = [[UIImageView alloc] initWithFrame:CGRectMake(kScreenWidth - 33 - 45, 8, 45, 45)]; + self.heardImage.layer.cornerRadius = 22.0; + self.heardImage.layer.masksToBounds = YES; + [self.contentView addSubview:self.heardImage]; +} + +- (void)setHeardModel:(MineCenterUserModel *)heardModel { + + _heardModel = heardModel; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_heardModel.avatar]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + if ([_heardModel.sex integerValue] == 1) { //女[] + [self.heardImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"heard_woman"]]; + + }else + { + [self.heardImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"heard_man"]]; + + } +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineUserInfoTable.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineUserInfoTable.h new file mode 100644 index 0000000..0bb2732 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineUserInfoTable.h @@ -0,0 +1,29 @@ +// +// MineUserInfoTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/26. +// + +#import +#import "MineCenterUserModel.h" +#import "EmergencyContactModel.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^addContactBlock)(); + +typedef void(^editContactMode)(EmergencyContactModel * model); + +@interface MineUserInfoTable : UITableView + +@property (nonatomic, strong) MineCenterUserModel * model; + +@property (nonatomic, copy) addContactBlock addBlcok; +@property (nonatomic, copy) editContactMode editBlcok; + +@property (nonatomic, strong) NSArray * dataArray; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineUserInfoTable.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineUserInfoTable.m new file mode 100644 index 0000000..457af56 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MineUserInfoTable.m @@ -0,0 +1,265 @@ +// +// MineUserInfoTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/26. +// + +#import "MineUserInfoTable.h" +#import "MineHeardTableViewCell.h" +#import "EmergencyContactModel.h" + +@interface MineUserInfoTable () + + +@end + +@implementation MineUserInfoTable + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if ([[UIDevice currentDevice].systemVersion floatValue] >= 11) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.backgroundColor = CViewBgColor; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleSingleLine; + self.showsVerticalScrollIndicator = NO; +} + +- (void)setModel:(MineCenterUserModel *)model { + + _model = model; + + [self reloadData]; + +} + +- (void)setDataArray:(NSArray *)dataArray { + + _dataArray = dataArray; + [self reloadData]; + +} + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if (section == 0) { + return 8; + } + return self.dataArray.count; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 2; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + if (indexPath.section == 0) { + //头像 + if (indexPath.row == 0) { + + MineHeardTableViewCell * heardCell = [tableView dequeueReusableCellWithIdentifier:@"HEARDCELL"]; + + if (!heardCell) { + heardCell = [[MineHeardTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"HEARDCELL"]; + } + heardCell.backgroundColor = KWhiteColor; + heardCell.heardModel = self.model; + heardCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + return heardCell; + + }else + { + NSArray * sectionOne = @[@"姓名",@"性别",@"工号",@"手机号",@"身份证号",@"人员类型",@"所属部门"]; + NSArray * sectionTwo ; + NSString * workNo = @"--"; + NSString * sex_dictText = @"--"; + NSString * realname = @"--"; + NSString * phone = @"--"; + NSString * idCard = @"--"; + NSString * personType_dictText = @"--"; + NSString * orgCode = @"--"; + + if (!ValidStr(self.model.workNo)) { + workNo = [NSString stringWithFormat:@"%@",self.model.workNo]; + + } + if (!ValidStr(self.model.realname)) { + realname = [NSString stringWithFormat:@"%@",self.model.realname]; + + } + if (!ValidStr(self.model.sex_dictText)) { + sex_dictText = [NSString stringWithFormat:@"%@",self.model.sex_dictText]; + + } + if (!ValidStr(self.model.phone)) { + phone = [NSString stringWithFormat:@"%@",self.model.phone]; + + } + if (!ValidStr(self.model.idCard)) { + idCard = [NSString stringWithFormat:@"%@",self.model.idCard]; + + } + if (!ValidStr(self.model.personType_dictText)) { + personType_dictText = [NSString stringWithFormat:@"%@",self.model.personType_dictText]; + + } + if (!ValidStr(self.model.orgCode)) { + orgCode = [NSString stringWithFormat:@"%@",self.model.orgCode]; + + } + sectionTwo = @[realname,sex_dictText,workNo,phone,idCard,personType_dictText,orgCode]; + + static NSString * cellID = @"cellID"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellID]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.font = SYSTEMFONT(14); + if (self.model) { + cell.detailTextLabel.text = sectionTwo[indexPath.row - 1]; + } + cell.textLabel.text = sectionOne[indexPath.row - 1]; + cell.textLabel.textColor = UIColorHex(#666666); + cell.textLabel.font = SYSTEMFONT(14); + cell.detailTextLabel.font = SYSTEMFONT(14); + cell.detailTextLabel.textColor = UIColorHex(#333333); + cell.backgroundColor = KWhiteColor; + return cell; + + } + } + if (indexPath.section == 1) { + + EmergencyContactModel * model = self.dataArray[indexPath.row]; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CONNETCELL"]; + + if (!cell) { + + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CONNETCELL"]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.textLabel.font = SYSTEMFONT(14); + cell.textLabel.text = [NSString stringWithFormat:@"%@-%@",model.name,model.phone]; + return cell; + + + } + + + return UITableViewCell.new; + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + if (indexPath.section == 0) { + if (indexPath.row == 0) { + return 62; + }else + { + return 45; + } + } + return 46; + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + if (section == 1) { + return 50; + } + return CGFLOAT_MIN; +} + + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + if (section == 1) { + + UIView * sectionHeardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 50)]; + sectionHeardView.backgroundColor = CViewBgColor; + + UIView * labView = [[UIView alloc] initWithFrame:CGRectMake(0, 10, kScreenWidth, 40)]; + labView.backgroundColor = KWhiteColor; + [sectionHeardView addSubview:labView]; + + UILabel * heardLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 0, 200, 40)]; + heardLabel.text = @"紧急联系人"; + heardLabel.textColor = UIColorHex(#666666); + heardLabel.font = SYSTEMFONT(14); + + heardLabel.textAlignment = NSTextAlignmentLeft; + [labView addSubview:heardLabel]; + + UIButton * addBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth - 18 - 40, 12, 40, 13)]; + [addBtn setTitle:@"新增" forState:UIControlStateNormal]; + addBtn.titleLabel.textAlignment = NSTextAlignmentRight; + [addBtn setTitleColor:UIColorHex(#3390FF) forState:UIControlStateNormal]; + addBtn.titleLabel.font = SYSTEMFONT(13); + [addBtn addTarget:self action:@selector(addEmergencyContact) forControlEvents:UIControlEventTouchUpInside]; + [labView addSubview:addBtn]; + + return sectionHeardView; + } + + return UIView.new; + +} + +- (void)addEmergencyContact { + + if (self.addBlcok) { + self.addBlcok(); + } +} + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + + if (indexPath.section == 1) { + + EmergencyContactModel * model = self.dataArray[indexPath.row]; + + self.editBlcok(model); + } + + + +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterHeardView.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterHeardView.h new file mode 100644 index 0000000..0ea6e6d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterHeardView.h @@ -0,0 +1,50 @@ +// +// MyCenterHeardView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/23. +// + +#import +#import "MineCenterUserModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol myCenterHeardToolsDelegate + +/* + 进行中 + */ +- (void)myCenterInProgress; +/* + 待评价 + */ +- (void)waitEvaluation; +/* + 已评价 + */ +- (void)completeEvaluation; +/* + 历史 + */ +- (void)myHistoryAction; + +//查看全部 +- (void)lookAllQuestion; + +- (void)heardImageOnClick; + +@end + + +@interface MyCenterHeardView : UIView + +@property (nonatomic, weak)id heardDelegate; + +@property (nonatomic, assign) NSInteger number; + +@property (nonatomic, strong) MineCenterUserModel * heardModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterHeardView.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterHeardView.m new file mode 100644 index 0000000..2a25b9f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterHeardView.m @@ -0,0 +1,203 @@ +// +// MyCenterHeardView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/23. +// + +#import "MyCenterHeardView.h" + +@interface MyCenterHeardView () + +@property (nonatomic, strong) UIImageView * heardImage; + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) UILabel * numberLabel; + +@property (nonatomic, strong) YYLabel * lookMoreLabel; + +@end + + + +@implementation MyCenterHeardView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + UIImageView * heardImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(26), - kRealValue(16) , 52, 52)]; + self.heardImage = heardImg; + heardImg.layer.cornerRadius = 26; + heardImg.layer.masksToBounds = true; + heardImg.userInteractionEnabled = true; + heardImg.image = [UIImage imageNamed:@"heard_woman"] ; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(heardImageAction)]; + [heardImg addGestureRecognizer:tap]; + [self addSubview:heardImg]; + + self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.heardImage.right + kRealValue(8), kRealValue(10), self.width - self.heardImage.right - kRealValue(10), 15)]; + self.nameLabel.textColor = CFontColor1; + self.nameLabel.font = SYSTEMFONT(15); + self.nameLabel.textAlignment = NSTextAlignmentLeft; + self.nameLabel.text = @"未登录"; + [self addSubview:self.nameLabel]; + + self.lookMoreLabel = [[YYLabel alloc] initWithFrame:CGRectMake(kScreenWidth - kRealValue(100), kRealValue(10), kRealValue(60), 15)]; + self.lookMoreLabel.textColor = CFontColor1; + self.lookMoreLabel.font = SYSTEMFONT(13); + self.lookMoreLabel.textAlignment = NSTextAlignmentRight; + self.lookMoreLabel.text = @"查看更多>"; + MJWeakSelf + [self.lookMoreLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + if ([weakSelf.heardDelegate respondsToSelector:@selector(lookAllQuestion)]) { + [weakSelf.heardDelegate lookAllQuestion]; + } + }]; + [self addSubview:self.lookMoreLabel]; + + + NSArray * array = @[@[@"进行中",@"HeardProgress_icon"],@[@"待评价",@"waitEveal_icon"],@[@"已评价",@"alreadyEveal"],@[@"历史",@"HeardHistory_icon"]]; + + CGFloat w = 58 ; + + for (int i = 0 ; i < 4; i++) { + + UIView * heardView = [[UIView alloc] initWithFrame:CGRectMake(i * (kScreenWidth - kRealValue(30))/4, self.heardImage.bottom + kRealValue(18),(kScreenWidth - kRealValue(30))/4, self.height - self.heardImage.bottom - kRealValue(18))]; + [self addSubview:heardView]; + + UIImageView * toolsImg = [[UIImageView alloc] initWithFrame:CGRectMake((heardView.width / 2 - 29 ) , kRealValue(18), w, w)]; + toolsImg.image = [UIImage imageNamed:array[i][1]]; + toolsImg.userInteractionEnabled = true; + + if (i == 0) + { + UILabel * numLabel = [[UILabel alloc] initWithFrame:CGRectMake(toolsImg.width - 16, -2, 18, 18)]; + numLabel.text = @"1"; + numLabel.textColor = KWhiteColor; + numLabel.font = SYSTEMFONT(13); + numLabel.textAlignment = NSTextAlignmentCenter; + numLabel.backgroundColor = KRedColor; + numLabel.layer.borderColor = UIColor.whiteColor.CGColor; + numLabel.layer.borderWidth = 1.0f; + numLabel.layer.cornerRadius = 9.0; + numLabel.layer.masksToBounds = YES; + self.numberLabel = numLabel; + numLabel.hidden = YES; + [toolsImg addSubview:numLabel]; + } + [heardView addSubview:toolsImg]; + + UILabel * toolsLabel = [[UILabel alloc] initWithFrame:CGRectMake(0 ,toolsImg.bottom + kRealValue(5), heardView.width, 15)]; + toolsLabel.textColor = CFontColor1; + toolsLabel.font = SYSTEMFONT(13); + toolsLabel.text = array[i][0]; + toolsLabel.textAlignment = NSTextAlignmentCenter; + [heardView addSubview:toolsLabel]; + + UIButton * heardBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, heardView.width, 80)]; + [heardBtn addTarget:self action:@selector(heardToolsAction:) forControlEvents:UIControlEventTouchUpInside]; + heardBtn.tag = 100 + i; + [heardView addSubview:heardBtn]; + + + } + + +} + +- (void)heardToolsAction:(UIButton *)toolsBtn { + + + + if (toolsBtn.tag == 100) { + + if ([self.heardDelegate respondsToSelector:@selector(myCenterInProgress)]) { + [self.heardDelegate myCenterInProgress]; + } + } + if (toolsBtn.tag == 101) { + + if ([self.heardDelegate respondsToSelector:@selector(waitEvaluation)]) { + [self.heardDelegate waitEvaluation]; + } + } + if (toolsBtn.tag == 102) { + + if ([self.heardDelegate respondsToSelector:@selector(completeEvaluation)]) { + [self.heardDelegate completeEvaluation]; + } + } + if (toolsBtn.tag == 103) { + + if ([self.heardDelegate respondsToSelector:@selector(myHistoryAction)]) { + [self.heardDelegate myHistoryAction]; + } + } + + +} + +- (void)setNumber:(NSInteger )number { + _number = number; + + if (number == 0) { + self.numberLabel.hidden = YES; + }else + { + self.numberLabel.hidden = false; + self.numberLabel.text = [NSString stringWithFormat:@"%ld",number]; + } + +} + +- (void)setHeardModel:(MineCenterUserModel *)heardModel { + + _heardModel = heardModel; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_heardModel.avatar]; + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + self.nameLabel.text = _heardModel.realname; + + if ([_heardModel.sex integerValue] == 1) { //女[] + [self.heardImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"heard_woman"]]; + + }else + { + [self.heardImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"heard_man"]]; + + } + + +} + +- (void)heardImageAction { + + if ([self.heardDelegate respondsToSelector:@selector(heardImageOnClick)]) { + [self.heardDelegate heardImageOnClick]; + } + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterTableView.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterTableView.h new file mode 100644 index 0000000..9b79775 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterTableView.h @@ -0,0 +1,33 @@ +// +// MyCenterTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/23. +// + +#import +#import "MyCenterHeardView.h" +#import "MineCenterUserModel.h" + +NS_ASSUME_NONNULL_BEGIN +@protocol cenerCellListDelegate + +- (void)cellListClick:(NSInteger)cellIndex; + +@end + +@interface MyCenterTableView : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, weak)id heardDelegate; + +@property (nonatomic, weak)id cellDelegate; + +@property (nonatomic, assign) NSInteger number; + +@property (nonatomic, strong) MineCenterUserModel * userModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterTableView.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterTableView.m new file mode 100644 index 0000000..ac2b594 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/MyCenterTableView.m @@ -0,0 +1,253 @@ +// +// MyCenterTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/23. +// + +#import "MyCenterTableView.h" +#import "MyCenterHeardView.h" + +@interface MyCenterTableView () + +@property (nonatomic, strong) MyCenterHeardView * heardV; + +@end + +@implementation MyCenterTableView + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.backgroundColor = KClearColor; + self.dataSource = self; + self.tableHeaderView = [self createHeardView]; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; +} + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + +- (void)setHeardDelegate:(id)heardDelegate { + + _heardDelegate = heardDelegate; + + self.heardV.heardDelegate = _heardDelegate; +} + +- (void)setUserModel:(MineCenterUserModel *)userModel { + + _userModel = userModel; + + self.heardV.heardModel = _userModel; + +} + + +- (void)setNumber:(NSInteger)number { + _number = number; + + self.heardV.number = _number; +} + +- (UIView *)createHeardView +{ + MyCenterHeardView * heardV = [[MyCenterHeardView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(150))]; + heardV.layer.cornerRadius = 10; + heardV.backgroundColor = KWhiteColor; + heardV.heardDelegate = self.heardDelegate; + [HQCommonUtils addShadowToView:heardV]; + self.heardV = heardV; + return heardV; +} + + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if (section == 0) { + return 3; + } + return 3; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + //,@[@"我的关注",@"myLove_icon"] + NSArray * sectionOne = @[@[@"账户与安全(修改密码)",@"relati"],@[@"用户协议",@"myRen"],@[@"隐私政策",@"medi"]]; + + static NSString * cellID = @"cellID"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.textLabel.font = SYSTEMFONT(14); + cell.textLabel.text = sectionOne[indexPath.row][0]; +// cell.imageView.image = [UIImage imageNamed: sectionOne[indexPath.row][1]]; + + return cell; + +} + + + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return kRealValue(10); +} + + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + return kRealValue(52); +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * sectionHeardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(10))]; + sectionHeardView.backgroundColor = KClearColor; + return sectionHeardView; + +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + + + + if ([self.cellDelegate respondsToSelector:@selector(cellListClick:)] ) { + + [self.cellDelegate cellListClick:indexPath.row]; + } + + + +} + +- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath + +{ + + if([cell respondsToSelector:@selector(tintColor)]) { + + if(tableView ==self) { + + CGFloat cornerRadius =5.f; + + cell.backgroundColor=UIColor.clearColor; + + CAShapeLayer * layer = [[CAShapeLayer alloc]init]; + + CGMutablePathRef pathRef = CGPathCreateMutable(); + + CGRect bounds = CGRectInset(cell.bounds,0,0); + + BOOL addLine =NO; + + if(indexPath.row==0&& indexPath.row== [tableView numberOfRowsInSection:indexPath.section]-1) { + + CGPathAddRoundedRect(pathRef,nil, bounds, cornerRadius, cornerRadius); + + }else if(indexPath.row==0) { + + CGPathMoveToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMaxY(bounds)); + + CGPathAddArcToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMinY(bounds),CGRectGetMidX(bounds),CGRectGetMinY(bounds), cornerRadius); + + CGPathAddArcToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMinY(bounds),CGRectGetMaxX(bounds),CGRectGetMidY(bounds), cornerRadius); + + CGPathAddLineToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMaxY(bounds)); + + addLine =YES; + + }else if(indexPath.row== [tableView numberOfRowsInSection:indexPath.section]-1) { + + CGPathMoveToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMinY(bounds)); + + CGPathAddArcToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMaxY(bounds),CGRectGetMidX(bounds),CGRectGetMaxY(bounds), cornerRadius); + + CGPathAddArcToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMaxY(bounds),CGRectGetMaxX(bounds),CGRectGetMidY(bounds), cornerRadius); + + CGPathAddLineToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMinY(bounds)); + + }else{ + + CGPathAddRect(pathRef,nil, bounds); + + addLine =YES; + + } + + layer.path= pathRef; + + CFRelease(pathRef); + + layer.fillColor= [UIColor colorWithWhite:1.f alpha:0.8f].CGColor; + + if(addLine ==YES) { + + CALayer* lineLayer = [[CALayer alloc]init]; + + CGFloat lineHeight = (1.f/ [UIScreen mainScreen].scale); + + lineLayer.frame=CGRectMake(CGRectGetMinX(bounds)+10, bounds.size.height-lineHeight, bounds.size.width-10, lineHeight); + + lineLayer.backgroundColor= tableView.separatorColor.CGColor; + + [layer addSublayer:lineLayer]; + + } + + UIView*testView = [[UIView alloc]initWithFrame:bounds]; + + [testView.layer insertSublayer:layer atIndex:0]; + + testView.backgroundColor=UIColor.clearColor; + + cell.backgroundView= testView; + + } + + } + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDetailTableHeardView.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDetailTableHeardView.h new file mode 100644 index 0000000..28e98a5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDetailTableHeardView.h @@ -0,0 +1,22 @@ +// +// SOSDetailTableHeardView.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/22. +// + +#import +#import "SOSDoctorDetailInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SOSDetailTableHeardView : UIView + +@property (nonatomic, assign) CGFloat heradHeight; + +@property (nonatomic, strong) SOSDoctorDetailInfoModel * heardModel; +@property (nonatomic, strong) SOSDoctorDetailHistory * historyModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDetailTableHeardView.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDetailTableHeardView.m new file mode 100644 index 0000000..ef242d3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDetailTableHeardView.m @@ -0,0 +1,207 @@ +// +// SOSDetailTableHeardView.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/22. +// + +#import "SOSDetailTableHeardView.h" + + +@interface SOSDetailTableHeardView () + +@property (nonatomic, strong) UILabel * orderStatusLabel; +@property (nonatomic, strong) UILabel * sendLabel; +@property (nonatomic, strong) UILabel * helpLabel; +@property (nonatomic, strong) UILabel * orderNumberLabel; +@property (nonatomic, strong) UILabel * helpTimeLabel; +@property (nonatomic, strong) UILabel * sosTimeLabel; +@property (nonatomic, strong) UILabel * peopleLabel; +@property (nonatomic, strong) UILabel * orderTimeLabel; +@property (nonatomic, strong) UILabel * statusLabel; +@property (nonatomic, strong) UILabel * yewuLabel; +@property (nonatomic, strong) UILabel * hospitalLabel; +@property (nonatomic, strong) UILabel * zhuchangLabel; +@property (nonatomic, strong) UILabel * jiedanLabel; +@property (nonatomic, strong) UILabel * infoLabel; +@property (nonatomic, strong) UIView * lineView; +@property (nonatomic, strong) UIView * lineTwoView; + +@end + +@implementation SOSDetailTableHeardView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + self.backgroundColor = KWhiteColor; + [self createUI]; + } + return self; +} + +- (void)createUI { + + + UILabel * titLabel= [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(14), kRealValue(24), 100, 14)]; + titLabel.text = @"工单信息"; + titLabel.textAlignment = NSTextAlignmentLeft; + titLabel.font =BOLDSYSTEMFONT(14); + titLabel.textColor = UIColorHex(#333333); + [self addSubview:titLabel]; + NSArray * leftArray = @[@"工单状态",@"发起人",@"求助人",@"工单号",@"求助时间",@"就助时间"]; + UIView * linView; + for (int i = 0; i < leftArray.count; i ++) { + + UIView * infoView = [self orderInfoLabelViewWithFrame:CGRectMake(0, titLabel.bottom + kRealValue(10)+ kRealValue(27) * i, self.width, kRealValue(27)) withLeftText:leftArray[i] withRightLabTag:100 + i]; + [self addSubview:infoView]; + if (i == leftArray.count - 1) { + linView = [[UIView alloc] initWithFrame:CGRectMake(0, infoView.bottom + kRealValue(8), self.width, 1)]; + linView.backgroundColor = UIColorHex(#E0E0E0); + self.lineView = linView; + } + [self addSubview:linView]; + } + + UILabel * infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(14), linView.bottom + kRealValue(21), 100, 14)]; + infoLabel.text = @"派单信息"; + infoLabel.textAlignment = NSTextAlignmentLeft; + infoLabel.font =BOLDSYSTEMFONT(14); + infoLabel.textColor = UIColorHex(#333333); + self.infoLabel = infoLabel; + [self addSubview:infoLabel]; + + NSArray * leftInfoArray = @[@"操作人员",@"派单时间",@"当前状态",@"派单业务",@"派单医院",@"驻场人员",@"接单时间"]; + UIView * linTwoView; + for (int j = 0; j < leftInfoArray.count; j ++) { + + UIView * orderView = [self orderInfoLabelViewWithFrame:CGRectMake(0, infoLabel.bottom + kRealValue(10) + kRealValue(25) * j, self.width, kRealValue(25)) withLeftText:leftInfoArray[j] withRightLabTag:200 + j]; + orderView.tag = 500 + j; + [self addSubview:orderView]; + + if (j == leftInfoArray.count - 1) { + linTwoView = [[UIView alloc] initWithFrame:CGRectMake(0, orderView.bottom + kRealValue(8), self.width, 1)]; + linTwoView.backgroundColor = UIColorHex(#E0E0E0); + self.lineTwoView = linTwoView; + } + + [self addSubview:linTwoView]; + } + +} + + +- (UIView *)orderInfoLabelViewWithFrame:(CGRect)frame + withLeftText:(NSString *)leftText + withRightLabTag:(NSInteger)rightTag { + + UIView * labeView = [[UIView alloc] initWithFrame:frame]; + + UILabel * leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(14), 0, 80, kRealValue(25))]; + leftLabel.textColor = UIColorHex(#666666); + leftLabel.font = SYSTEMFONT(13); + leftLabel.textAlignment = NSTextAlignmentLeft; + leftLabel.text = leftText; + [labeView addSubview:leftLabel]; + + + UILabel * rightLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.width - 200 - kRealValue(14), 0, 200, kRealValue(25))]; + rightLabel.textColor = UIColorHex(#333333); + rightLabel.font = SYSTEMFONT(13); + rightLabel.textAlignment = NSTextAlignmentRight; + rightLabel.text = leftText; + rightLabel.tag = rightTag; + [labeView addSubview:rightLabel]; + + return labeView; + +} + +- (void)setHeardModel:(SOSDoctorDetailInfoModel *)heardModel { + + _heardModel = heardModel; + + self.statusLabel = [self viewWithTag:100]; + self.statusLabel.text = _heardModel.orderStatus_dictText; + + self.sendLabel = [self viewWithTag:101]; + self.sendLabel.text = _heardModel.initiatorUserName; + + self.helpLabel = [self viewWithTag:102]; + self.helpLabel.text = _heardModel.salvageUserName; + + self.orderNumberLabel = [self viewWithTag:103]; + self.orderNumberLabel.text = _heardModel.detail_id; + + self.helpTimeLabel = [self viewWithTag:104]; + self.helpTimeLabel.text = _heardModel.createTime; + + self.sosTimeLabel = [self viewWithTag:105]; + self.sosTimeLabel.text = _heardModel.majorResponseTime; +// + + self.peopleLabel = [self viewWithTag:200]; + self.peopleLabel.text = _heardModel.operationUserName; + + +} + +- (void)setHistoryModel:(SOSDoctorDetailHistory *)historyModel { + + _historyModel = historyModel; + + UIView * oneView = [self viewWithTag:500]; + UIView * twoView = [self viewWithTag:501]; + UIView * threeView = [self viewWithTag:502]; + UIView * fourView = [self viewWithTag:503]; + UIView * fiveView = [self viewWithTag:504]; + UIView * sixView = [self viewWithTag:505]; + UIView * sevView = [self viewWithTag:506]; + + self.orderTimeLabel = [self viewWithTag:201]; + self.statusLabel = [self viewWithTag:202]; + self.yewuLabel = [self viewWithTag:203]; + self.hospitalLabel = [self viewWithTag:204]; + self.zhuchangLabel = [self viewWithTag:205]; + self.jiedanLabel = [self viewWithTag:206]; + + + + if (_historyModel) { + self.orderTimeLabel.text = _historyModel.createTime; + self.statusLabel.text = _historyModel.accept_dictText; + self.yewuLabel.text = _historyModel.stationBusiness_dictText; + self.hospitalLabel.text = _historyModel.sendOrderHospital; + self.zhuchangLabel.text = _historyModel.stationUserName; + self.jiedanLabel.text = _historyModel.transferOrderTime; + self.lineTwoView.hidden = false; + self.heradHeight = sevView.bottom; + }else + { + [oneView removeFromSuperview]; + [twoView removeFromSuperview]; + [threeView removeFromSuperview]; + [fourView removeFromSuperview]; + [fiveView removeFromSuperview]; + [sixView removeFromSuperview]; + [sevView removeFromSuperview]; + + self.infoLabel.hidden = true; + self.orderTimeLabel.hidden = true; + self.statusLabel.hidden = true; + self.yewuLabel.hidden = true; + self.hospitalLabel.hidden = true; + self.zhuchangLabel.hidden = true; + self.lineTwoView.hidden = true; + self.heradHeight = self.lineView.bottom; + } + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorDetailTable.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorDetailTable.h new file mode 100644 index 0000000..5d22477 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorDetailTable.h @@ -0,0 +1,18 @@ +// +// SOSDoctorDetailTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/23. +// + +#import +#import "SOSDoctorDetailInfoModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface SOSDoctorDetailTable : UITableView + +@property (nonatomic, strong) SOSDoctorDetailInfoModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorDetailTable.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorDetailTable.m new file mode 100644 index 0000000..4031750 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorDetailTable.m @@ -0,0 +1,182 @@ +// +// SOSDoctorDetailTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/23. +// + +#import "SOSDoctorDetailTable.h" +#import "SOSDetailTableHeardView.h" +#import "SOSDoctorTableViewCell.h" +#import "HistoryOrderTableViewCell.h" + +@interface SOSDoctorDetailTable () + +@property (nonatomic, strong) SOSDetailTableHeardView * heardView; + +@end + + +@implementation SOSDoctorDetailTable + +- (SOSDetailTableHeardView *)heardView { + + if (!_heardView) { + + _heardView = [[SOSDetailTableHeardView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth - kRealValue(22), 190)]; + + _heardView.backgroundColor = KClearColor; + + } + return _heardView; +} + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { + + if (self = [super initWithFrame:frame style:style]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.backgroundColor = UIColor.clearColor; + self.showsVerticalScrollIndicator = false; + self.showsHorizontalScrollIndicator = false; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; + self.tableHeaderView = self.heardView; + self.tableHeaderView.height = self.heardView.heradHeight; + +} + + +- (void)setModel:(SOSDoctorDetailInfoModel *)model { + + _model = model; + if (_model.orderSendRecordList.count >= 1) { + + self.heardView.historyModel = self.model.orderSendRecordList[0]; + }else + { + self.heardView.historyModel = nil; + } + self.heardView.heardModel = self.model; + self.heardView.height = self.heardView.heradHeight; + [self reloadData]; + +} +#pragma mark - tableview的代理方法 +//组数 +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + if (_model.orderSendRecordList.count >= 1) { + + return 1; + }else + { + return 0; + } +} +//每组多少行 +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if (_model.orderSendRecordList.count >= 1) { + + return self.model.orderSendRecordList.count - 1; + }else + { + return 0; + } + +} +//注册cell +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSMutableArray * dataArray = [[NSMutableArray alloc] initWithArray:self.model.orderSendRecordList]; + [dataArray removeFirstObject]; + + SOSDoctorDetailHistory * hisModel = dataArray[indexPath.row]; + HistoryOrderTableViewCell * cell = [self dequeueReusableCellWithIdentifier:@"STATUSCELL"]; + if (!cell) { + + cell = [[HistoryOrderTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"STATUSCELL"]; + } + cell.historyModel= hisModel; + cell.backgroundColor = KWhiteColor; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + + + +} +//每行高度 +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return kRealValue(180); +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + + return kRealValue(46); +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { + + return CGFLOAT_MIN; +} + +//组头 --- 组尾 + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + + return [UIView new]; + +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + + if (_model.orderSendRecordList.count >= 2) { + + + + UIView * heardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(46))]; + heardView.backgroundColor = KWhiteColor; + UILabel * historyLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(14), kRealValue(23), 100, 14)]; + historyLabel.text = @"历史派单"; + historyLabel.textAlignment = NSTextAlignmentLeft; + historyLabel.font =BOLDSYSTEMFONT(14); + historyLabel.textColor = UIColorHex(#333333); + [heardView addSubview:historyLabel]; + return heardView; + } + return UIView.new; + + +} +////cell点击事件 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + +} + + +@end + + + diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableView.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableView.h new file mode 100644 index 0000000..70f5bbf --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableView.h @@ -0,0 +1,21 @@ +// +// SOSDoctorTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/22. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +typedef void(^sosDoctorListActionBlock)(NSString * sessionId , NSString * hospitalId); + +@interface SOSDoctorTableView : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, copy) sosDoctorListActionBlock recordBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableView.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableView.m new file mode 100644 index 0000000..75ac8d6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableView.m @@ -0,0 +1,137 @@ +// +// SOSDoctorTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/22. +// + +#import "SOSDoctorTableView.h" +#import "SOSDoctorTableViewCell.h" + +@interface SOSDoctorTableView () + + +@end + + +@implementation SOSDoctorTableView + + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { + + if (self = [super initWithFrame:frame style:style]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.backgroundColor = UIColor.clearColor; + self.showsVerticalScrollIndicator = false; + self.showsHorizontalScrollIndicator = false; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; + +} + + +- (void)setDataArray:(NSArray *)dataArray { + + _dataArray = dataArray; + + [self reloadData]; +} + +#pragma mark - tableview的代理方法 +//组数 +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; +} +//每组多少行 +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return 1; +} +//注册cell +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + SOSDoctorTableViewCell * cell = [self dequeueReusableCellWithIdentifier:@"STATUSCELL"]; + if (!cell) { + + cell = [[SOSDoctorTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"STATUSCELL"]; + } + cell.model= self.dataArray[indexPath.section]; + cell.backgroundColor = KWhiteColor; + cell.layer.cornerRadius = 10; + cell.layer.masksToBounds = YES; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + + + +} +//每行高度 +//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +//{ +// return kRealValue(77); +//} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + + return kRealValue(10); +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { + + return CGFLOAT_MIN; +} + +//组头 --- 组尾 + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + + return [UIView new]; + +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + + + UIView * footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(10))]; + + + return footerView; + +} +////cell点击事件 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + SOSDoctorRecordListModel * model= self.dataArray[indexPath.section]; + + if (self.recordBlock) { + self.recordBlock(model.sos_id,model.sos_id); + } +} + + +@end + + + diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableViewCell.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableViewCell.h new file mode 100644 index 0000000..7e6f9fc --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableViewCell.h @@ -0,0 +1,18 @@ +// +// SOSDoctorTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/22. +// + +#import +#import "SOSDoctorModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface SOSDoctorTableViewCell : UITableViewCell + +@property (nonatomic, strong) SOSDoctorRecordListModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableViewCell.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableViewCell.m new file mode 100644 index 0000000..61c87cf --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SOSDoctorTableViewCell.m @@ -0,0 +1,149 @@ +// +// SOSDoctorTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/22. +// + +#import "SOSDoctorTableViewCell.h" + +@interface SOSDoctorTableViewCell () + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) UILabel * timeLabel; + +@property (nonatomic, strong) YYLabel * lookDetail; + +@property (nonatomic, strong) UILabel * statusLabel; + +@property (nonatomic, strong) UILabel * hospitalLabel; + + + +@end + + +@implementation SOSDoctorTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + self.nameLabel = [[UILabel alloc] init]; + self.nameLabel.textColor = CFontColor1; + self.nameLabel.font = BOLDSYSTEMFONT(14); + self.nameLabel.textAlignment = NSTextAlignmentLeft; + self.nameLabel.text = @"求助人:张三"; + [self.contentView addSubview:self.nameLabel]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_offset(16); + make.height.mas_offset(14); + }]; + [self.nameLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + self.timeLabel = [[UILabel alloc] init]; + self.timeLabel.textColor = UIColorHex(#333333); + self.timeLabel.font = MEDIUMFONT(14); + self.timeLabel.text = @"求救时间:202-01-01 13:12"; + self.timeLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.timeLabel]; + + [self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(14); + make.height.mas_offset(14); + }]; + [self.timeLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.hospitalLabel = [[UILabel alloc] init]; + self.hospitalLabel.textColor = UIColorHex(#333333); + self.hospitalLabel.font = MEDIUMFONT(14); + self.hospitalLabel.textAlignment = NSTextAlignmentLeft; + self.hospitalLabel.text = @"应急医院:西京医院-协助检查"; + [self.contentView addSubview:self.hospitalLabel]; + + [self.hospitalLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_equalTo(self.timeLabel.mas_bottom).offset(14); + make.height.mas_offset(13); + make.bottom.mas_offset(-18); + }]; + [self.hospitalLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + UIImageView * accowImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"garyRight"]]; + [self.contentView addSubview:accowImg]; + + + [accowImg mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-15); + make.top.mas_offset(16); + make.height.mas_offset(14); + make.width.mas_offset(8); + }]; + + self.lookDetail = [[YYLabel alloc] init]; + self.lookDetail.textColor = UIColorHex(#999999); + self.lookDetail.font = MEDIUMFONT(13); + self.lookDetail.text = @"查看详情"; + self.lookDetail.textAlignment = NSTextAlignmentRight; + [self.contentView addSubview:self.lookDetail]; + + [self.lookDetail mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(accowImg.mas_left).offset(-6); + make.top.mas_offset(16); + make.height.mas_offset(14); + make.width.mas_offset(100); + }]; + + self.statusLabel = [[UILabel alloc] init]; + self.statusLabel.textColor = UIColorHex(#16C716); + self.statusLabel.font = MEDIUMFONT(14); + self.statusLabel.text = @"已完成"; + self.statusLabel.textAlignment = NSTextAlignmentRight; + [self.contentView addSubview:self.statusLabel]; + + [self.statusLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-15); + make.top.mas_equalTo(self.lookDetail.mas_bottom).offset(26); + make.height.mas_offset(13); + }]; + + +} + +- (void)setModel:(SOSDoctorRecordListModel *)model { + _model = model; + self.nameLabel.text = [NSString stringWithFormat:@"求助人:%@",_model.initiatorUserName]; + self.timeLabel.text = [NSString stringWithFormat:@"求救时间:%@",_model.createTime]; + if ( ValidStr(_model.sendOrderHospital) ) { + self.hospitalLabel.text = @"应急医院:"; + }else + { + self.hospitalLabel.text =[NSString stringWithFormat:@"应急医院:%@-%@",_model.sendOrderHospital,_model.stationBusiness_dictText]; + } + self.statusLabel.text = model.orderStatus_dictText; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SliderView.h b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SliderView.h new file mode 100644 index 0000000..0271235 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SliderView.h @@ -0,0 +1,21 @@ +// +// SliderView.h +// WDYAdjustFontSize +// +// Created by wdyzmx on 2022/1/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void (^SliderValueCallBack)(UISlider *); + +@interface SliderView : UIView +/// 初始化方法 +/// @param frame frame +/// @param callBack 回调block +- (instancetype)initWithFrame:(CGRect)frame callBack:(SliderValueCallBack)callBack; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/MainCenter/View/SliderView.m b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SliderView.m new file mode 100644 index 0000000..6ef71a6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/MainCenter/View/SliderView.m @@ -0,0 +1,157 @@ +// +// SliderView.m +// WDYAdjustFontSize +// +// Created by wdyzmx on 2022/1/19. +// + +#import "SliderView.h" + +#define kScreenWidth UIScreen.mainScreen.bounds.size.width +#define kScreenHeight UIScreen.mainScreen.bounds.size.height +#define SliderRate 1.0 +#define DefaultFontSize 16 +#define SliderHeight 10 +#define SliderBGWidth 300 +#define SliderWidth 330 + +@interface SliderView () +/// slider +@property (nonatomic, strong) UISlider *slider; +/// tap手势 +@property (nonatomic, strong) UITapGestureRecognizer *tapGesture; +/// slider控件value回调 +@property (nonatomic, copy) SliderValueCallBack callBack; +/// @{@"字体size": @"slider value"} 字体size对应slider value +@property (nonatomic, strong) NSDictionary *unitDict; +@property (nonatomic, strong) NSArray *unitArr; +@end + +@implementation SliderView + +#pragma mark - initWithFrame +- (instancetype)initWithFrame:(CGRect)frame callBack:(SliderValueCallBack)callBack { + self = [super initWithFrame:frame]; + if (self) { + self.callBack = callBack; + + UIImageView *sliderBgImgView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"icon_detail_sliderBgImg"]]; + [self addSubview:sliderBgImgView]; + sliderBgImgView.frame = CGRectMake(frame.size.width / 2 - SliderBGWidth / 2, 5, SliderBGWidth, SliderHeight); + + self.slider = [[UISlider alloc] init]; + self.slider.minimumValue = 1; + self.slider.maximumValue = 4; + self.slider.minimumTrackTintColor = [UIColor clearColor]; + self.slider.maximumTrackTintColor = [UIColor clearColor]; + self.slider.multipleTouchEnabled = NO; + [self.slider setThumbImage:[UIImage imageNamed:@"icon_detail_slider_thum"] forState:UIControlStateNormal]; + [self addSubview:self.slider]; + self.slider.frame = CGRectMake(0, 0, SliderWidth, SliderHeight); + self.slider.center = sliderBgImgView.center; + [self.slider addTarget:self + action:@selector(valueChanged:) + forControlEvents:UIControlEventValueChanged]; + [self.slider addTarget:self + action:@selector(sliderTouchDown:) + forControlEvents:UIControlEventTouchDown]; + [self.slider addTarget:self + action:@selector(sliderTouchUp:) + forControlEvents:UIControlEventTouchUpInside]; + // 字体size值为该字典key slider value值为该字典value + self.unitDict = @{ + @"16": @"1", + @"18": @"2", + @"20": @"3", + @"22": @"4" + }; + + self.unitArr = @[ + @"16", + @"18", + @"20", + @"22" + ]; + + [self.slider setValue:[self sliderInitialValue]]; + + for (int i = 0; i < self.unitArr.count; i++) { + CGFloat ptx = (kScreenWidth - SliderBGWidth) / 2 + (SliderBGWidth / 3) * i; + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 20)]; + label.center = CGPointMake(ptx, self.slider.center.y + 25); + label.font = [UIFont systemFontOfSize:14]; + label.textAlignment = NSTextAlignmentCenter; + label.text = self.unitArr[i]; +// label.backgroundColor = UIColor.redColor; + [self addSubview:label]; + } +// self.backgroundColor = UIColor.orangeColor; + self.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)]; + [self addGestureRecognizer:self.tapGesture]; + } + return self; +} + +- (CGFloat)sliderInitialValue { + NSMutableDictionary *mdict = [NSMutableDictionary dictionaryWithDictionary:[[NSUserDefaults standardUserDefaults] objectForKey:@"fontSizeDict"]]; + __block NSString *value = nil; + if (mdict) { + [mdict enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) { + if ([obj isEqualToString:@"1"]) { + value = self.unitDict[key]; + } + }]; + } + return value ? value.floatValue : 1; +} + +#pragma mark - 滑动slider修改 +- (void)valueChanged:(UISlider *)sender { + // 只取整数值,固定间距 + NSString *tempStr = [self numberFormat:sender.value]; + if (tempStr.floatValue == sender.value) { + return; + } + [sender setValue:tempStr.integerValue]; + // 调用block + self.callBack(self.slider); +} + +#pragma mark - Slider Action +- (void)sliderTouchDown:(UISlider *)sender { + self.tapGesture.enabled = NO; +} + +- (void)sliderTouchUp:(UISlider *)sender { + self.tapGesture.enabled = YES; +} + +#pragma mark - 手势点击事件 +- (void)tapAction:(UITapGestureRecognizer *)tap { + CGPoint point = [tap locationInView:self]; + CGFloat margin = kScreenWidth / 2 - SliderBGWidth / 2; + CGFloat unitWidth = SliderWidth / 3; + CGFloat res = (point.x - margin) / unitWidth; + [self.slider setValue:[self numberFormat:res].floatValue + 1]; + // 调用block + self.callBack(self.slider); +// CGFloat rate = res - [self numberFormat:res].floatValue; +} + +#pragma mark - numberFormat +- (NSString *)numberFormat:(float)num { + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + [formatter setPositiveFormat:@"0"]; + return [formatter stringFromNumber:[NSNumber numberWithFloat:num]]; +} + + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/HeartBadViewController.h b/XinjiangProject/XinjiangProject/Project/Monitoring/HeartBadViewController.h new file mode 100644 index 0000000..1d4d335 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/HeartBadViewController.h @@ -0,0 +1,16 @@ +// +// HeartBadViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HeartBadViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/HeartBadViewController.m b/XinjiangProject/XinjiangProject/Project/Monitoring/HeartBadViewController.m new file mode 100644 index 0000000..b4b2cdb --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/HeartBadViewController.m @@ -0,0 +1,223 @@ +// +// HeartBadViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import "HeartBadViewController.h" +#import "HeardBadTableView.h" +#import "ADJumpViewController.h" +#import "SDGETHealthTokenManager.h" +#import "SDHttpRequest.h" +#import "MonitoringDataModel.h" + +@interface HeartBadViewController () + +@property (nonatomic, strong) UIScrollView * mainScrollView; + + +@property (nonatomic, strong) HeardBadTableView * homeTable; + +@property (nonatomic, strong) UIView * warnView; + +@property (nonatomic, strong) UIImageView * noQustionImg; + +@end + +@implementation HeartBadViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = CViewBgColor; + [self createUI]; + [self createDetail]; + //请求问券 + [self createData]; +// [self showNowImage:YES]; +} + +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + [self createData]; + [self createDetail]; + [self hiddenAllMBProgressHUD]; +} + +- (void)createUI { + + self.mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - kTopHeight -kTabBarHeight)]; + self.mainScrollView.backgroundColor = CViewBgColor; + [self.view addSubview:self.mainScrollView]; + + + self.homeTable = [[HeardBadTableView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(135) * 5 + kRealValue(195) + kRealValue(165)) style:UITableViewStyleGrouped]; + [self.mainScrollView addSubview:self.homeTable]; + + + UIView * warnView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), self.homeTable.bottom + kRealValue(15), kScreenWidth - kRealValue(30), kRealValue(325))]; + warnView.layer.cornerRadius = 10; + warnView.backgroundColor = KWhiteColor; + warnView.layer.masksToBounds = true; + self.warnView = warnView; + [self.mainScrollView addSubview:warnView]; + + UILabel * warnTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(17), kRealValue(24), warnView.width, 16)]; + warnTitleLabel.font = BOLDSYSTEMFONT(16); + warnTitleLabel.numberOfLines = 0; + warnTitleLabel.textColor = UIColorHex(#252535); + warnTitleLabel.textAlignment = NSTextAlignmentLeft; + warnTitleLabel.text = @"疾病预警"; + [warnView addSubview:warnTitleLabel]; + + self.noQustionImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(11), kRealValue(34), warnView.width - kRealValue(22), 176)]; + self.noQustionImg.image = [UIImage imageNamed:@"noQuestionImg"]; + [warnView addSubview:self.noQustionImg]; + + UILabel * infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,self.noQustionImg.bottom + 5, warnView.width, 16)]; + infoLabel.font = MEDIUMFONT(14); + infoLabel.textColor = UIColorHex(#77849E); + infoLabel.textAlignment = NSTextAlignmentCenter; + infoLabel.text = @"请先完成基本信息问卷"; + [warnView addSubview:infoLabel]; + + UIButton * inputBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.warnView.width/2 - kRealValue(60),infoLabel.bottom + kRealValue(21), kRealValue(120), kRealValue(36))]; + [inputBtn setTitle:@"填写" forState:UIControlStateNormal]; + [inputBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + inputBtn.titleLabel.font = MEDIUMFONT(14); + inputBtn.layer.cornerRadius = 17; + inputBtn.layer.masksToBounds = true; + [inputBtn addTarget:self action:@selector(inputQuestionClick) forControlEvents:UIControlEventTouchUpInside]; + inputBtn.backgroundColor = UIColorHex(#21BEBD); + [warnView addSubview:inputBtn]; + + + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth, warnView.bottom + kRealValue(64)); + + + UIView * bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, kScreenHeight - kTopHeight - kRealValue(56) - kTabBarHeight, kScreenWidth, kRealValue(56))]; + bottomView.backgroundColor = KWhiteColor; + [self.view addSubview:bottomView]; + + UIButton * helpBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(45), kRealValue(6), kScreenWidth - kRealValue(90), kRealValue(44))]; + [helpBtn setTitle:@"一键帮助" forState:UIControlStateNormal]; + [helpBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + helpBtn.titleLabel.font = BOLDSYSTEMFONT(18); + helpBtn.layer.cornerRadius = 22.0; + helpBtn.layer.masksToBounds = true; + helpBtn.backgroundColor = UIColorHex(#F24439); + [bottomView addSubview:helpBtn]; + + //初始化一个emptyView + LYEmptyView *emptyView = [LYEmptyView emptyViewWithImageStr:@"boxNoData" titleStr:@"正在开发中..." detailStr:@""]; + + //元素竖直方向的间距 + emptyView.subViewMargin = 20.f; + //标题颜色 + emptyView.titleLabTextColor = [UIColor blackColor]; + //描述字体 + emptyView.detailLabFont = [UIFont systemFontOfSize:17]; + //按钮背景色 + //设置空内容占位图 + self.homeTable.ly_emptyView = emptyView; +// +} + + + +- (void)createData { + // type 1 防心梗。 2脑卒 + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@"2" forKey:@"type"]; + + JKCQAPI * sosApi = [[JKCQAPI alloc] init:self tag:@"QUSTIONAPI" NeedToken:@""]; + [sosApi getMinitringFillQusetion:parmDic]; + +} + +- (void)createDetail { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:User_ID forKey:@"userId"]; + + JKCQAPI * sosApi = [[JKCQAPI alloc] init:self tag:@"DETAILAPI" NeedToken:@""]; + [sosApi getMinitringWatchData:parmDic]; + +} + +#pragma mark:网络请求 +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [EasyTextView showErrorText:message]; + [self hiddenAllMBProgressHUD]; + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"QUSTIONAPI"]) + { + + BOOL isQuestion = [response boolValue]; + + //没有问卷 + if (isQuestion == false) { + + } + + + } + if ([tag isEqualToString:@"DETAILAPI"]) + { + + + + } + + +} + +- (void)inputQuestionClick { + + HQUserInfo * user = [HQCommonUtils keyedUnarchiverWithKey:LoginUserInfo]; + + + ADJumpViewController * webVC = [[ADJumpViewController alloc] init]; + + webVC.webUrl = [NSString stringWithFormat:@"%@/static/mobile/heart-attack?scheme=%@&host=%@&tokenF=%@&heartType=2",IntervenH5,SCHEME,H5DevHost,user.token]; + + [self.navigationController pushViewController:webVC animated:YES]; + + + +} +//- (void)showNowImage:(BOOL)isShow { +// // LYEmptyView *emptyView = [LYEmptyView emptyViewWithImageStr:@"boxNoData" titleStr:@"暂无数据" detailStr:@""]; +// +// UIImageView * noImageView = [[UIImageView alloc] initWithFrame: CGRectMake(0, self.view.centerY - kRealValue(150), kRealValue(200), kRealValue(200))]; +// noImageView.image = IMAGE_NAMED(@"boxNoData"); +// noImageView.hidden = !isShow; +// noImageView.centerX = self.view.centerX; +// [self.view addSubview:noImageView]; +// +// UILabel * resultLabe = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15),noImageView.bottom + kRealValue(10), kScreenWidth, 20)]; +// resultLabe.font = MEDIUMFONT(15); +// resultLabe.textColor = UIColorHex(#333333); +// resultLabe.textAlignment = NSTextAlignmentCenter; +// resultLabe.text = @"功能待开发"; +// resultLabe.hidden = !isShow; +// [self.view addSubview:resultLabe]; +//} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/Model/MonitoringDataModel.h b/XinjiangProject/XinjiangProject/Project/Monitoring/Model/MonitoringDataModel.h new file mode 100644 index 0000000..cd37294 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/Model/MonitoringDataModel.h @@ -0,0 +1,25 @@ +// +// MonitoringDataModel.h +// XinjiangProject +// +// Created by Apple on 2025/6/25. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface MonitoringDataModel : NSObject + +@property (nonatomic, copy) NSString * dataValue; +@property (nonatomic, copy) NSString * wdTypeName; +@property (nonatomic, copy) NSString * warnMin; +@property (nonatomic, copy) NSString * warnMax; +@property (nonatomic, copy) NSString * wdType; +@property (nonatomic, copy) NSString * dataDate; +@property (nonatomic, copy) NSString * imageName; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/Model/MonitoringDataModel.m b/XinjiangProject/XinjiangProject/Project/Monitoring/Model/MonitoringDataModel.m new file mode 100644 index 0000000..df664fa --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/Model/MonitoringDataModel.m @@ -0,0 +1,12 @@ +// +// MonitoringDataModel.m +// XinjiangProject +// +// Created by Apple on 2025/6/25. +// + +#import "MonitoringDataModel.h" + +@implementation MonitoringDataModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadHeardView.h b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadHeardView.h new file mode 100644 index 0000000..60af7cc --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadHeardView.h @@ -0,0 +1,16 @@ +// +// HeardBadHeardView.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HeardBadHeardView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadHeardView.m b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadHeardView.m new file mode 100644 index 0000000..39f2388 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadHeardView.m @@ -0,0 +1,214 @@ +// +// HeardBadHeardView.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import "HeardBadHeardView.h" + +@interface HeardBadHeardView () + +@property (nonatomic, strong) UILabel * stepLabel; + +@property (nonatomic, strong) UILabel * timeLabel; + +@property (nonatomic, strong) UILabel * numberLabel; + +@property (nonatomic, strong) UILabel * allNumberLabel; + +@property (nonatomic, strong) UILabel * sleepTimeLabel; + +@property (nonatomic, strong) UILabel * subTimeLabel; + +@property (nonatomic, strong) UILabel * avgTimeLabel; + +@end + +@implementation HeardBadHeardView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + self.backgroundColor = CViewBgColor; + [self createUI]; + } + return self; +} + +- (void)createUI { + + UIImageView * StepView = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(15), ( kScreenWidth - kRealValue(45))/2, kRealValue(165))]; + StepView.layer.cornerRadius = 15.0; + StepView.layer.masksToBounds = YES; + StepView.image = [UIImage imageNamed:@"stepNumerIcon"]; + StepView.userInteractionEnabled = true; + StepView.backgroundColor = KWhiteColor; + [self addSubview:StepView]; + + + UIImageView * stepImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(12), kRealValue(16), kRealValue(32), kRealValue(32))]; + stepImg.image = [UIImage imageNamed:@"stepNumberIcon"]; + [StepView addSubview:stepImg]; + + self.stepLabel = [[UILabel alloc] initWithFrame:CGRectMake(stepImg.right + kRealValue(12), kRealValue(14), StepView.width - kRealValue(46), 16)]; + self.stepLabel.text = @"步数"; + self.stepLabel.textColor = CFontColor1; + self.stepLabel.font = BOLDSYSTEMFONT(16); + self.stepLabel.textAlignment = NSTextAlignmentLeft; + [StepView addSubview:self.stepLabel]; + + self.timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(stepImg.right + kRealValue(12),self.stepLabel.bottom + kRealValue(9), StepView.width - kRealValue(46), 16)]; + self.timeLabel.text = @"--/--/--"; + self.timeLabel.textColor = UIColorHex(#77849E); + self.timeLabel.font = SYSTEMFONT(13); + self.timeLabel.textAlignment = NSTextAlignmentLeft; + [StepView addSubview:self.timeLabel]; + + UIButton * stepIconBtn = [[UIButton alloc] initWithFrame:CGRectMake(StepView.width - kRealValue(9) - 20, kRealValue(16), 20, 20)]; + [stepIconBtn setImage:[UIImage imageNamed:@"garyRight"] forState:UIControlStateNormal]; + [StepView addSubview:stepIconBtn]; + + UIImageView * stepBackImg =[[UIImageView alloc] initWithFrame:CGRectMake(0, stepImg.bottom + kRealValue(4), StepView.width, kRealValue(114))]; + stepBackImg.image = [UIImage imageNamed:@"steoBackImage"]; + [StepView addSubview:stepBackImg]; + + + self.allNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), StepView.height - 12 - kRealValue(8), StepView.width - kRealValue(30), 12)]; + self.allNumberLabel.text = @"累计约步行--公里"; + self.allNumberLabel.textColor = UIColorHex(#77849E); + self.allNumberLabel.font = MEDIUMFONT(12); + self.allNumberLabel.textAlignment = NSTextAlignmentLeft; + [StepView addSubview:self.allNumberLabel]; + + self.numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), self.allNumberLabel.top - 28 - kRealValue(12), StepView.width - kRealValue(30), 28)]; + self.numberLabel.text = @"--步"; + self.numberLabel.textColor = UIColorHex(#77849E); + self.numberLabel.font = BOLDSYSTEMFONT(28); + self.numberLabel.textAlignment = NSTextAlignmentLeft; + [StepView addSubview:self.numberLabel]; + + + + + //睡眠 + UIView * sleepView = [[UIView alloc] initWithFrame:CGRectMake(StepView.right + kRealValue(15), kRealValue(15), ( kScreenWidth - kRealValue(45))/2, kRealValue(165))]; + sleepView.layer.cornerRadius = 15.0; + sleepView.layer.masksToBounds = YES; + sleepView.backgroundColor = KWhiteColor; + [self addSubview:sleepView]; + + UIImageView * sleepImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(12), kRealValue(16), kRealValue(32), kRealValue(32))]; + sleepImg.image = [UIImage imageNamed:@"sleepIcon"]; + [sleepView addSubview:sleepImg]; + + + UILabel * sleepLab = [[UILabel alloc] initWithFrame:CGRectMake(sleepImg.right + kRealValue(12), kRealValue(14), StepView.width - kRealValue(46), 16)]; + sleepLab.text = @"睡眠"; + sleepLab.textColor = CFontColor1; + sleepLab.font = BOLDSYSTEMFONT(16); + sleepLab.textAlignment = NSTextAlignmentLeft; + [sleepView addSubview:sleepLab]; + + self.sleepTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(sleepImg.right + kRealValue(12),sleepLab.bottom + kRealValue(9), sleepView.width - kRealValue(46), 16)]; + self.sleepTimeLabel.text = @"--/--/--"; + self.sleepTimeLabel.textColor = UIColorHex(#77849E); + self.sleepTimeLabel.font = SYSTEMFONT(13); + self.sleepTimeLabel.textAlignment = NSTextAlignmentLeft; + [sleepView addSubview:self.sleepTimeLabel]; + + UIButton * sleepIconBtn = [[UIButton alloc] initWithFrame:CGRectMake(sleepView.width - kRealValue(9) - 20, kRealValue(16), 20, 20)]; + [sleepIconBtn setImage:[UIImage imageNamed:@"garyRight"] forState:UIControlStateNormal]; + [sleepView addSubview:sleepIconBtn]; + + UIView * blueView = [[UIView alloc] initWithFrame:CGRectMake(sleepView.width - kRealValue(29) , self.sleepTimeLabel.bottom + kRealValue(11), kRealValue(17), kRealValue(34))]; + CAGradientLayer *gradientLayer = [CAGradientLayer layer]; + gradientLayer.frame = blueView.bounds; + gradientLayer.colors = @[(__bridge id)RGBA(1, 142, 253, 0.5).CGColor, (__bridge id)UIColorHex(#FFFFFF).CGColor]; + gradientLayer.startPoint = CGPointMake(0, 0); + gradientLayer.endPoint = CGPointMake(0, 1); + gradientLayer.transform = CATransform3DMakeRotation(0, 0, 0, 1); + [blueView.layer addSublayer:gradientLayer]; + [sleepView addSubview:blueView]; + UIView * blueLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, blueView.width, 2)]; + blueLine.backgroundColor = UIColorHex(#018EFD); + [blueView addSubview:blueLine]; + + UIView * orangeView = [[UIView alloc] initWithFrame:CGRectMake(blueView.left - kRealValue(5) , self.sleepTimeLabel.bottom + kRealValue(11), kRealValue(4), kRealValue(34))]; + CAGradientLayer * orangegradientLayer = [CAGradientLayer layer]; + orangegradientLayer.frame = orangeView.bounds; + orangegradientLayer.colors = @[(__bridge id)RGBA(253, 193, 32, 0.5).CGColor, (__bridge id)UIColorHex(#FFFFFF).CGColor]; + orangegradientLayer.startPoint = CGPointMake(0, 0); + orangegradientLayer.endPoint = CGPointMake(0, 1); + orangegradientLayer.transform = CATransform3DMakeRotation(0, 0, 0, 1); + [orangeView.layer addSublayer:orangegradientLayer]; + [sleepView addSubview:orangeView]; + UIView * orangeLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, orangeView.width, 2)]; + orangeLine.backgroundColor = RGBA(253, 193, 32, 1); + [orangeView addSubview:orangeLine]; + + UIView * pickView = [[UIView alloc] initWithFrame:CGRectMake(orangeView.left - kRealValue(35) , self.sleepTimeLabel.bottom + kRealValue(11), kRealValue(34), kRealValue(34))]; + CAGradientLayer * pickViewgradientLayer = [CAGradientLayer layer]; + pickViewgradientLayer.frame = pickView.bounds; + pickViewgradientLayer.colors = @[(__bridge id)RGBA(252, 120, 117, 0.5).CGColor, (__bridge id)UIColorHex(#FFFFFF).CGColor]; + pickViewgradientLayer.startPoint = CGPointMake(0, 0); + pickViewgradientLayer.endPoint = CGPointMake(0, 1); + pickViewgradientLayer.transform = CATransform3DMakeRotation(0, 0, 0, 1); + [pickView.layer addSublayer:pickViewgradientLayer]; + [sleepView addSubview:pickView]; + UIView * pickLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, pickView.width, 2)]; + pickLine.backgroundColor = RGBA(252, 120, 117, 1); + [pickView addSubview:pickLine]; + + UIView * purpleView = [[UIView alloc] initWithFrame:CGRectMake(pickView.left - kRealValue(45) , self.sleepTimeLabel.bottom + kRealValue(11), kRealValue(44), kRealValue(34))]; + CAGradientLayer * pupleViewgradientLayer = [CAGradientLayer layer]; + pupleViewgradientLayer.frame = purpleView.bounds; + pupleViewgradientLayer.colors = @[(__bridge id)RGBA(203, 45, 218, 0.5).CGColor, (__bridge id)UIColorHex(#FFFFFF).CGColor]; + pupleViewgradientLayer.startPoint = CGPointMake(0, 0); + pupleViewgradientLayer.endPoint = CGPointMake(0, 1); + pupleViewgradientLayer.transform = CATransform3DMakeRotation(0, 0, 0, 1); + [purpleView.layer addSublayer:pupleViewgradientLayer]; + [sleepView addSubview:purpleView]; + UIView * purpleLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, purpleView.width, 2)]; + purpleLine.backgroundColor = RGBA(203, 45, 218, 1); + [purpleView addSubview:purpleLine]; + + UIView * blackPurple = [[UIView alloc] initWithFrame:CGRectMake(purpleView.left - kRealValue(39) , self.sleepTimeLabel.bottom + kRealValue(11), kRealValue(38), kRealValue(34))]; + CAGradientLayer * blackPurplegradientLayer = [CAGradientLayer layer]; + blackPurplegradientLayer.frame = blackPurple.bounds; + blackPurplegradientLayer.colors = @[(__bridge id)RGBA(155, 70, 225, 0.5).CGColor, (__bridge id)UIColorHex(#FFFFFF).CGColor]; + blackPurplegradientLayer.startPoint = CGPointMake(0, 0); + blackPurplegradientLayer.endPoint = CGPointMake(0, 1); + blackPurplegradientLayer.transform = CATransform3DMakeRotation(0, 0, 0, 1); + [blackPurple.layer addSublayer:blackPurplegradientLayer]; + [sleepView addSubview:blackPurple]; + UIView * blackPurpleLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, blackPurple.width, 2)]; + blackPurpleLine.backgroundColor = RGBA(155, 70, 225, 1); + [blackPurple addSubview:blackPurpleLine]; + + + self.avgTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), sleepView.height - 12 - kRealValue(8), StepView.width - kRealValue(30), 12)]; + self.avgTimeLabel.text = @"平均睡眠--小时"; + self.avgTimeLabel.textColor = UIColorHex(#77849E); + self.avgTimeLabel.font = MEDIUMFONT(12); + self.avgTimeLabel.textAlignment = NSTextAlignmentLeft; + [sleepView addSubview:self.avgTimeLabel]; + + self.subTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15),self.avgTimeLabel.top - 28 - kRealValue(12), StepView.width - kRealValue(30), 28)]; + self.subTimeLabel.text = @"--小时--分"; + self.subTimeLabel.textColor = UIColorHex(#77849E); + self.subTimeLabel.font = BOLDSYSTEMFONT(28); + self.subTimeLabel.textAlignment = NSTextAlignmentLeft; + [sleepView addSubview:self.subTimeLabel]; + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTabFooterView.h b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTabFooterView.h new file mode 100644 index 0000000..77e0afd --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTabFooterView.h @@ -0,0 +1,16 @@ +// +// HeardBadTabFooterView.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HeardBadTabFooterView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTabFooterView.m b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTabFooterView.m new file mode 100644 index 0000000..ea92b01 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTabFooterView.m @@ -0,0 +1,88 @@ +// +// HeardBadTabFooterView.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import "HeardBadTabFooterView.h" + +@interface HeardBadTabFooterView () + +@property (nonatomic, strong) UIView * warnView ; + +@end + +@implementation HeardBadTabFooterView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + + UIView * watchView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(16), kScreenWidth - kRealValue(30), kRealValue(143))]; + watchView.layer.cornerRadius = 15; + watchView.backgroundColor = KWhiteColor; + watchView.layer.masksToBounds = true; + [self addSubview:watchView]; + CGFloat footWidth = (watchView.width - kRealValue(60))/3; + + for (int i = 0; i < 3; i ++) { + + UIView * footView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15) + (footWidth + kRealValue(15) )* i, kRealValue(11), footWidth, kRealValue(123))]; + footView.layer.cornerRadius = 15; + footView.backgroundColor = KWhiteColor; + footView.layer.masksToBounds = true; + + UILabel * titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, kRealValue(19), footWidth, 16)]; + titleLabel.font = BOLDSYSTEMFONT(16); + titleLabel.textAlignment = NSTextAlignmentCenter; + + UILabel * contLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, titleLabel.bottom + kRealValue(12), footWidth, footView.height - kRealValue(56))]; + contLabel.font = MEDIUMFONT(12); + contLabel.numberOfLines = 0; + contLabel.textColor = UIColorHex(#77849E); + contLabel.textAlignment = NSTextAlignmentCenter; + + if (i == 0) { + footView.backgroundColor = UIColorHex(#E3F2F9); + titleLabel.text = @"穿戴设备"; + titleLabel.textColor = UIColorHex(#0789C0); + contLabel.text = @"佩戴90天23小时\n充电284次"; + + } + if (i == 1) { + footView.backgroundColor = UIColorHex(#FFF3EB); + titleLabel.text = @"预警研究"; + titleLabel.textColor = UIColorHex(#E7AE84); + contLabel.text = @"心率失常权重 \n 心率失常权重 \n 心率失常权重"; + } + if (i == 2) { + footView.backgroundColor = UIColorHex(#FFEFF2); + titleLabel.text = @"心脏体检"; + titleLabel.textColor = UIColorHex(#D16685); + contLabel.text = @"心电图正常 \n 心脏CTA正常 \n 检验指标正常"; + } + [watchView addSubview:footView]; + [footView addSubview:titleLabel]; + [footView addSubview:contLabel]; + } + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableView.h b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableView.h new file mode 100644 index 0000000..17175c1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableView.h @@ -0,0 +1,20 @@ +// +// HeardBadTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HeardBadTableView : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, assign) BOOL isHaveQustion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableView.m b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableView.m new file mode 100644 index 0000000..d2fa011 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableView.m @@ -0,0 +1,136 @@ +// +// HeardBadTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import "HeardBadTableView.h" +#import "HeardBadHeardView.h" +#import "HeardBadTableViewCell.h" +#import "HeardBadTabFooterView.h" + +@interface HeardBadTableView () + +@property (nonatomic, strong) HeardBadHeardView * badHeardView; + +@property (nonatomic, strong) HeardBadTabFooterView * badfooterView; + + +@end + +@implementation HeardBadTableView + + +- (HeardBadHeardView *)badHeardView { + + if (!_badHeardView) { + + _badHeardView = [[HeardBadHeardView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(195))]; + } + return _badHeardView; +} + +- (HeardBadTabFooterView *)badfooterView { + + if (!_badfooterView) { + + _badfooterView = [[HeardBadTabFooterView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(165))]; + } + return _badfooterView; + +} + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if ([[UIDevice currentDevice].systemVersion floatValue] >= 11) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.backgroundColor = KClearColor; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.tableHeaderView = self.badHeardView; + self.tableFooterView = self.badfooterView; +} + +//- (void)setDataArray:(NSArray *)dataArray { +// +// _dataArray = dataArray; +// +// [self reloadData]; +// +//} +// + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return 1; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 5; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + HeardBadTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"CELLID"]; + + if (!cell) { + + cell = [[HeardBadTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELLID"]; + } + cell.backgroundColor = CViewBgColor; + cell.selectionStyle = UITableViewCellSelectionStyleDefault; + return cell; +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return kRealValue(15); +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + return kRealValue(120); +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + + return [UIView new]; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableViewCell.h new file mode 100644 index 0000000..3e94c09 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableViewCell.h @@ -0,0 +1,16 @@ +// +// HeardBadTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HeardBadTableViewCell : UITableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableViewCell.m new file mode 100644 index 0000000..7b7b9e9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Monitoring/View/HeardBadTableViewCell.m @@ -0,0 +1,104 @@ +// +// HeardBadTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/14. +// + +#import "HeardBadTableViewCell.h" + +@interface HeardBadTableViewCell () + +@property (nonatomic, strong) UIImageView * projectImage; + +@property (nonatomic, strong) UILabel * projectName; + +@property (nonatomic, strong) UILabel * timeLabel; + +@property (nonatomic, strong) UILabel * dataLabel; + +@end + +@implementation HeardBadTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + UIView * backView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, kScreenWidth - kRealValue(30), kRealValue(120))]; + backView.backgroundColor = KWhiteColor; + backView.layer.cornerRadius = 15.0; + backView.layer.masksToBounds = true; + [self addSubview:backView]; + + self.projectImage = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(12), kRealValue(22), kRealValue(32), kRealValue(32))]; + [backView addSubview:self.projectImage]; + + self.projectName = [[UILabel alloc] initWithFrame:CGRectMake(self.projectImage.right + kRealValue(12), kRealValue(20), backView.width - kRealValue(90), 15)]; + self.projectName.text = @"--"; + self.projectName.textColor = CFontColor1; + self.projectName.textAlignment = NSTextAlignmentLeft; + self.projectName.font = BOLDSYSTEMFONT(16); + [backView addSubview:self.projectName]; + + self.timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.projectImage.right + kRealValue(12),self.projectName.bottom + kRealValue(10), backView.width - kRealValue(90), 15)]; + self.timeLabel.text = @"--"; + self.timeLabel.textColor = CFontColor1; + self.timeLabel.textAlignment = NSTextAlignmentLeft; + self.timeLabel.font = BOLDSYSTEMFONT(16); + [backView addSubview:self.timeLabel]; + + UIButton * accowBtn = [[UIButton alloc] initWithFrame:CGRectMake(backView.width - kRealValue(12) - 20, kRealValue(23), 20, 20)]; + [accowBtn setImage:[UIImage imageNamed:@"garyRight"] forState:UIControlStateNormal]; + [backView addSubview:accowBtn]; + + self.dataLabel = [[UILabel alloc] initWithFrame:CGRectMake(accowBtn.left - kRealValue(12) - 200, kRealValue(26), 200, 22)]; + self.dataLabel.text = @"--"; + self.dataLabel.textColor = CFontColor1; + self.dataLabel.textAlignment = NSTextAlignmentRight; + self.dataLabel.font = BOLDSYSTEMFONT(16); + [backView addSubview:self.dataLabel]; + + UIView * lineView = [[UIView alloc] initWithFrame:CGRectMake(0, backView.bottom - kRealValue(44), backView.width, 1)]; + lineView.backgroundColor = UIColorHex(#EAECF1); + [backView addSubview:lineView]; + + UIButton * historyBtn = [[UIButton alloc] initWithFrame:CGRectMake(backView.width - kRealValue(82) ,backView.bottom - kRealValue(10) - kRealValue(24) , kRealValue(70), kRealValue(24))]; + [historyBtn setTitle:@"预警历史" forState:UIControlStateNormal]; + [historyBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + historyBtn.layer.cornerRadius = 4.0; + historyBtn.layer.masksToBounds = true; + historyBtn.titleLabel.font = BOLDSYSTEMFONT(13); + historyBtn.backgroundColor = UIColorHex(#21BEBD); + [backView addSubview:historyBtn]; + + + UIButton * thresholdBtn = [[UIButton alloc] initWithFrame:CGRectMake(historyBtn.left - kRealValue(82) ,backView.bottom - kRealValue(10) - kRealValue(24) , kRealValue(70), kRealValue(24))]; + [thresholdBtn setTitle:@"阈值设置" forState:UIControlStateNormal]; + [thresholdBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + thresholdBtn.layer.cornerRadius = 4.0; + thresholdBtn.layer.masksToBounds = true; + thresholdBtn.titleLabel.font = BOLDSYSTEMFONT(13); + thresholdBtn.backgroundColor = UIColorHex(#F1B101); + [backView addSubview:thresholdBtn]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/AddQuestionViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/AddQuestionViewController.h new file mode 100644 index 0000000..093bc0b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/AddQuestionViewController.h @@ -0,0 +1,19 @@ +// +// AddQuestionViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import "HQBaseViewController.h" +#import "QuestionPeopleModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface AddQuestionViewController : HQBaseViewController + +@property (nonatomic, strong) QuestionPeopleModel * questionModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/AddQuestionViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/AddQuestionViewController.m new file mode 100644 index 0000000..36ee271 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/AddQuestionViewController.m @@ -0,0 +1,598 @@ +// +// AddQuestionViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import "AddQuestionViewController.h" +#import "LineTextField.h" +#import "BRPickerView.h" +#import "FamilyMemberRelationModel.h" +#import "UserInfoHealthPopView.h" +#import "BasicHealthInfoViewController.h" +#import "BasicHealthInfoViewController.h" + + +@interface AddQuestionViewController () + +@property (nonatomic, strong) LineTextField * questionNameField; + +@property (nonatomic, strong) UIButton * sexBtn; + +@property (nonatomic, strong) UILabel * birthdayLabel; + +@property (nonatomic, strong) LineTextField * birthdayTextField; + +@property (nonatomic, strong) UIButton * womanBtn ; + +@property (nonatomic, strong) UIButton * manBtn ; + +@property (nonatomic, strong) NSMutableArray * memberArray; + +@property (nonatomic, strong) LineTextField * heiTextField; + +@property (nonatomic, strong) LineTextField * weightTextField; + +@property (nonatomic, strong) LineTextField * relationshipTextField; + +@property (nonatomic, copy) NSString * familyInt; + +@property (nonatomic, strong) UserInfoHealthPopView * popView; + +@property (nonatomic, strong) LineTextField * baseHelathInfoField; + + +@property (nonatomic, copy) NSString * memberId; + +@property (nonatomic, assign) bool isJump; + +@end + +@implementation AddQuestionViewController + + +- (NSMutableArray *)memberArray { + + if (!_memberArray) { + + _memberArray = [[NSMutableArray alloc] init]; + } + return _memberArray; +} + +- (UserInfoHealthPopView *)popView { + + if (!_popView) { + + _popView = [[UserInfoHealthPopView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]; + _popView.popDelegate = self; + } + + return _popView; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.view.backgroundColor = UIColorHex(#EFEFEF); + self.navigationItem.title = @"添加咨询人信息"; + + [self createUI]; + [self getFamilyMembers]; +} + +- (void)createUI { + + //咨询人姓名 + self.questionNameField = [self createFieldWithLeftTitle:@"咨询人姓名" withRightString:@"" placeholderStr:@"请填写咨询人姓名" isShowRight:true]; + self.questionNameField.frame = CGRectMake(0, 1, kScreenWidth, 51); + [self.view addSubview:self.questionNameField]; + + //性别选择 + UIView * sexView = [[UIView alloc] initWithFrame:CGRectMake(0, self.questionNameField.bottom, kScreenWidth, 51)]; + sexView.backgroundColor = KWhiteColor; + [self.view addSubview:sexView]; + + UILabel * sexlabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16), 0, 100, 51)]; + sexlabel.text = @"性别"; + sexlabel.font = SYSTEMFONT(13); + sexlabel.textAlignment = NSTextAlignmentLeft; + sexlabel.textColor = UIColorHex(#666666); + [sexView addSubview:sexlabel]; + + UIButton * womanBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth - kRealValue(16) - 60, 0, 50, 51)]; + [womanBtn setImage:[UIImage imageNamed:@"choose_nomal"] forState:UIControlStateNormal]; + [womanBtn setImage:[UIImage imageNamed:@"choose_Selected"] forState:UIControlStateSelected]; + [womanBtn addTarget:self action:@selector(womanAction) forControlEvents:UIControlEventTouchUpInside]; + [womanBtn setTitle:@" 女" forState:UIControlStateNormal]; + womanBtn.titleLabel.font = SYSTEMFONT(13); + self.womanBtn = womanBtn; + [womanBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + [sexView addSubview:womanBtn]; + + UIButton * manBtn = [[UIButton alloc] initWithFrame:CGRectMake(womanBtn.left - 60, 0, 50, 51)]; + [manBtn setImage:[UIImage imageNamed:@"choose_nomal"] forState:UIControlStateNormal]; + [manBtn setImage:[UIImage imageNamed:@"choose_Selected"] forState:UIControlStateSelected]; + [manBtn setTitle:@" 男" forState:UIControlStateNormal]; + [manBtn addTarget:self action:@selector(manAction) forControlEvents:UIControlEventTouchUpInside]; + manBtn.titleLabel.font = SYSTEMFONT(13); + [manBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + self.manBtn = manBtn; + [sexView addSubview:manBtn]; + + UIView * sexLineView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(14), sexView.bottom, kScreenWidth - kRealValue(28), 0.5)]; + sexLineView.backgroundColor = UIColorHex(#E0E0E0); + [self.view addSubview:sexLineView]; + + //出生日期 + + self.birthdayTextField = [self createFieldWithLeftTitle:@"出生日期" withRightString:@">" placeholderStr:@"请选择出生日期" isShowRight:true]; + + self.birthdayTextField.frame = CGRectMake(0, sexLineView.bottom, kScreenWidth, 51); + self.birthdayTextField.userInteractionEnabled = true; + [self.view addSubview:self.birthdayTextField]; + + UIButton * birBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 51)]; + [birBtn addTarget:self action:@selector(selectBirthdayOnclick) forControlEvents:UIControlEventTouchUpInside]; + [self.birthdayTextField addSubview:birBtn]; + + self.heiTextField = [self createFieldWithLeftTitle:@"身高" withRightString:@"cm" placeholderStr:@"请填写咨询人身高" isShowRight:true]; + self.heiTextField.keyboardType = UIKeyboardTypeNumberPad; + self.heiTextField.frame = CGRectMake(0, self.birthdayTextField.bottom, kScreenWidth, 51); + + [self.view addSubview:self.heiTextField]; + + + self.weightTextField = [self createFieldWithLeftTitle:@"体重" withRightString:@"kg" placeholderStr:@"请填写咨询人体重" isShowRight:true]; + self.weightTextField.keyboardType = UIKeyboardTypeDecimalPad; + self.weightTextField.frame = CGRectMake(0, self.heiTextField.bottom, kScreenWidth, 51); + + [self.view addSubview:self.weightTextField]; + + //与本人关系 + self.relationshipTextField = [self createFieldWithLeftTitle:@"与咨询人关系" withRightString:@">" placeholderStr:@"请点击选择" isShowRight:true]; + + self.relationshipTextField.frame = CGRectMake(0, self.weightTextField.bottom, kScreenWidth, 51); + self.relationshipTextField.userInteractionEnabled = true; + [self.view addSubview:self.relationshipTextField]; + + UIButton * shipBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 51)]; + [shipBtn addTarget:self action:@selector(relastionShipOnclick) forControlEvents:UIControlEventTouchUpInside]; + [self.relationshipTextField addSubview:shipBtn]; + + self.baseHelathInfoField = [self createFieldWithLeftTitle:@"基本健康信息" withRightString:@">" placeholderStr:@"" isShowRight:true]; + self.baseHelathInfoField.frame = CGRectMake(0, self.relationshipTextField.bottom + 5, kScreenWidth, 51); + self.baseHelathInfoField.userInteractionEnabled = true; + UIButton * baseBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 51)]; + [baseBtn addTarget:self action:@selector(healthInfoAction) forControlEvents:UIControlEventTouchUpInside]; + [self.baseHelathInfoField addSubview:baseBtn]; + [self.view addSubview:self.baseHelathInfoField]; + + + UILabel * tishiLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), self.relationshipTextField.bottom + kRealValue(10) , kScreenWidth - kRealValue(30), 30)]; + + + tishiLabel.text = @"温馨提示:咨询人姓名、证件信息用于平台审核,不会外传。请输入正确的咨询人姓名和证件号码。"; + tishiLabel.numberOfLines = 0; + tishiLabel.font = SYSTEMFONT(12); + tishiLabel.textColor = UIColorHex(#999999); + CGFloat h = [HQCommonUtils getSpaceLabelHeight:tishiLabel withStr:tishiLabel.text withFont: SYSTEMFONT(12) withWidth:kScreenWidth withLineSpacing:2]; + tishiLabel.height = h ; + [self.view addSubview:tishiLabel]; + //保存按钮 + + UIButton * saveBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(48), kScreenHeight - kTopHeight - kTabBarHeight - 30 - 40, kScreenWidth - kRealValue(96), 40)]; + [saveBtn setTitle:@"保存" forState:UIControlStateNormal]; + saveBtn.titleLabel.font = SYSTEMFONT(14); + saveBtn.layer.cornerRadius = 20.0f; + saveBtn.layer.masksToBounds = true; + saveBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + saveBtn.layer.borderWidth = 1.0f; + saveBtn.backgroundColor = KWhiteColor; + [saveBtn addTarget:self action:@selector(saveInfo) forControlEvents:UIControlEventTouchUpInside]; + [saveBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [self.view addSubview:saveBtn]; + + if (self.questionModel) { + self.baseHelathInfoField.hidden = false; + baseBtn.hidden = false; + tishiLabel.top = self.baseHelathInfoField.bottom + kRealValue(10); + self.questionNameField.text = self.questionModel.name; + self.relationshipTextField.text = self.questionModel.familyRelation; + self.weightTextField.text = [NSString stringWithFormat:@"%@",self.questionModel.weight]; + self.heiTextField.text = [NSString stringWithFormat:@"%@",self.questionModel.height]; + if ( [self.questionModel.gender integerValue] == 1 ) { + self.womanBtn.selected = true; + self.manBtn.selected = false; + }else + { + self.womanBtn.selected = false; + self.manBtn.selected = true; + } + self.birthdayTextField.text = [NSString stringWithFormat:@"%@",self.questionModel.birthday]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + //需要设置为和字符串相同的格式 + [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; + NSDate *localDate = [dateFormatter dateFromString:self.questionModel.birthday]; + NSString * str = [NSDate br_stringFromDate:localDate dateFormat:@"yyyy-MM-dd"]; + self.birthdayTextField.text = str; + + }else { + self.baseHelathInfoField.hidden = true; + baseBtn.hidden = true; + tishiLabel.top = self.relationshipTextField.bottom + kRealValue(10); + } +// [kAppWindow addSubview:self.popView]; + +} + + +- (LineTextField *)createFieldWithLeftTitle:(NSString *)leftStr + withRightString:(NSString *)rightStr + placeholderStr:(NSString *)placeStr + isShowRight:(BOOL)isShowRight { + + LineTextField * field = [[LineTextField alloc] init]; + field.font = SYSTEMFONT(13); + field.placeholder = placeStr; + field.textAlignment = NSTextAlignmentRight; + field.backgroundColor = KWhiteColor; + UIView * leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 51)]; + + UILabel * leftlabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16), 0, 100, 51)]; + + leftlabel.text = leftStr; + + leftlabel.font = SYSTEMFONT(13); + + leftlabel.textAlignment = NSTextAlignmentLeft; + + leftlabel.textColor = UIColorHex(#666666); + + [leftView addSubview:leftlabel]; + + field.leftView = leftView; + + field.leftViewMode = UITextFieldViewModeAlways; + + if (isShowRight) { + + UIView * rightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 51)]; + + UILabel * rightlabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, 30, 51)]; + + rightlabel.text = rightStr; + + rightlabel.font = SYSTEMFONT(13); + + rightlabel.textColor = UIColorHex(#666666); + + field.rightView = rightView; + + rightlabel.textAlignment = NSTextAlignmentLeft; + + field.rightViewMode = UITextFieldViewModeAlways; + + [rightView addSubview:rightlabel]; + + } + + return field; +} + +- (void)getFamilyMembers { + + JKCQAPI * memberApi = [[JKCQAPI alloc] init:self tag:@"Family" NeedToken:@""]; + + [memberApi getCheckKeyResult:@{@"dictKey":@"family_member_relation"}]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [EasyTextView showErrorText:message]; + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"Family"]) { + + NSArray * array = response; + + for (NSDictionary * dic in array) { + + FamilyMemberRelationModel * model = [FamilyMemberRelationModel modelWithDictionary:dic] ; + + [self.memberArray addObject:model]; + } + } + if ([tag isEqualToString:@"ADDAPI"]) { + + self.memberId = response; + [self hiddenAllMBProgressHUD]; + if (self.isJump == true) { + [self.navigationController popViewControllerAnimated:YES]; + } + if (self.isJump == false) { + BasicHealthInfoViewController * basicVC = [[BasicHealthInfoViewController alloc] init]; + basicVC.memberId = self.memberId; + if (self.questionModel) { + basicVC.isAddQuetsion = false; + }else + { + basicVC.isAddQuetsion = true; + } + [self.navigationController pushViewController:basicVC animated:YES]; + } + + } + if ([tag isEqualToString:@"updataAPI"]) { + [self hiddenAllMBProgressHUD]; + [EasyTextView showSuccessText:@"保存成功"]; + [self.navigationController popViewControllerAnimated:YES]; + } +} + +- (void)selectBirthdayOnclick { + [self.view endEditing:TRUE]; + + // 1.创建日期选择器 + BRDatePickerView *datePickerView = [[BRDatePickerView alloc]init]; + // 2.设置属性 + datePickerView.pickerMode = BRDatePickerModeYMD; + datePickerView.title = @"选择出生日期"; + // datePickerView.selectValue = @"2019-10-30"; + datePickerView.minDate = [NSDate br_setYear:1949 month:3 day:12]; + datePickerView.maxDate = [NSDate date]; + datePickerView.isAutoSelect = YES; + datePickerView.showUnitType = BRShowUnitTypeOnlyCenter; + datePickerView.resultBlock = ^(NSDate *selectDate, NSString *selectValue) { + NSLog(@"选择的值:%@", selectValue); + self.birthdayTextField.text = selectValue; + }; + + datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithThemeColor:UIColorHex(#21BEBD)]; + // 3.显示 + [datePickerView show]; +} + +- (void)relastionShipOnclick { + + /// 1.单列字符串选择器(传字符串数组) + BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init]; + stringPickerView.pickerMode = BRStringPickerComponentSingle; + stringPickerView.title = @"关系"; + + NSMutableArray * array = [[NSMutableArray alloc] init]; + for (FamilyMemberRelationModel * model in self.memberArray) { + + [array addObject:model.text]; + } + stringPickerView.dataSourceArr = array; + stringPickerView.selectIndex = 2; + stringPickerView.resultModelBlock = ^(BRResultModel *resultModel) { + NSLog(@"选择的值:%@", resultModel.value); + + + for (FamilyMemberRelationModel * model in self.memberArray) { + + if ([model.text isEqualToString:resultModel.value]) { + + self.familyInt = model.value; + } + + } + self.relationshipTextField.text = resultModel.value; + }; + + [stringPickerView show]; + +} + +- (void)womanAction { + + [self.view endEditing:TRUE]; + self.womanBtn.selected = true; + self.manBtn.selected = false; + +} + +- (void)manAction { + [self.view endEditing:TRUE]; + self.womanBtn.selected = false; + self.manBtn.selected = true; + +} + +- (void)saveInfo { + + [self.view endEditing:TRUE]; + + NSInteger sexInter; + + sexInter = self.womanBtn.selected == true ?1:2; + + if (ValidStr(self.questionNameField.text)) { + [EasyTextView showErrorText:@"请输入咨询人姓名"]; + return; + } + if (self.womanBtn.selected == false && self.manBtn.selected == false ) { + [EasyTextView showErrorText:@"请选择咨询人性别"]; + return; + } + if (ValidStr(self.birthdayTextField.text)) { + [EasyTextView showErrorText:@"请选择咨询人出生日期"]; + return; + } + if (ValidStr(self.heiTextField.text)) { + [EasyTextView showErrorText:@"请输入咨询人身高"]; + return; + } + if (ValidStr(self.weightTextField.text)) { + [EasyTextView showErrorText:@"请输入咨询人体重"]; + return; + } + if (ValidStr(self.relationshipTextField.text)) { + [EasyTextView showErrorText:@"请选择与咨询人关系"]; + return; + } + + if (self.questionModel) { + [self updateQuestionInfo]; + }else + { + + [kAppWindow addSubview:self.popView]; + } + + + + +} + +- (NSString *)getTimestampFromTime:(NSString *)CurrentTime{ + + + + + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + + [formatter setDateStyle:NSDateFormatterMediumStyle]; + + [formatter setTimeStyle:NSDateFormatterShortStyle]; + + [formatter setDateFormat:@"yyyy-MM-dd"]; //(@"YYYY-MM-dd hh:mm:ss") ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制 + + //设置时区选择北京时间 + + NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"]; + + [formatter setTimeZone:timeZone]; + + NSDate* date = [formatter dateFromString:CurrentTime]; //------------将字符串按formatter转成nsdate + + //时间转时间戳的方法: + + NSInteger timeSp = [[NSNumber numberWithDouble:[date timeIntervalSince1970]] integerValue] * 1000; + + + return [NSString stringWithFormat:@"%ld",(long)timeSp]; + + + +} + +- (void)jumpOnclick { + + self.isJump = true; + [self.popView removeFromSuperview]; + [self addQuestionInfo]; + + +} + + +- (void)updateQuestionInfo { + + NSInteger sexInter; + + sexInter = self.womanBtn.selected == true ?1:2; + [self showMBProgressHUDWithString:@"更新中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + NSString * time = [self getTimestampFromTime:self.birthdayTextField.text]; + [parmDic setObject:self.questionNameField.text forKey:@"name"]; + [parmDic setObject:@(sexInter) forKey:@"gender"]; + [parmDic setObject:time forKey:@"birthdayLong"]; + [parmDic setObject:self.heiTextField.text forKey:@"height"]; + [parmDic setObject:self.weightTextField.text forKey:@"weight"]; + if (ValidStr(self.familyInt)) { + self.familyInt = self.questionModel.familyRelation; + } + [parmDic setObject:self.familyInt forKey:@"familyRelation"]; + [parmDic setObject:self.questionModel.people_id forKey:@"id"]; + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"updataAPI" NeedToken:@""]; + + [api postUpdateQuestionFailyMembers:parmDic]; + +} + + +- (void)wanshanOnclick { + self.isJump = false; + [self.popView removeFromSuperview]; + [self addQuestionInfo]; + +} + + +- (void)addQuestionInfo { + + [self.view endEditing:TRUE]; + + NSInteger sexInter; + + sexInter = self.womanBtn.selected == true ?1:2; + + if (ValidStr(self.questionNameField.text)) { + [EasyTextView showErrorText:@"请输入咨询人姓名"]; + return; + } + if (self.womanBtn.selected == false && self.manBtn.selected == false ) { + [EasyTextView showErrorText:@"请选择咨询人性别"]; + return; + } + if (ValidStr(self.birthdayTextField.text)) { + [EasyTextView showErrorText:@"请选择咨询人出生日期"]; + return; + } + if (ValidStr(self.heiTextField.text)) { + [EasyTextView showErrorText:@"请输入咨询人身高"]; + return; + } + if (ValidStr(self.weightTextField.text)) { + [EasyTextView showErrorText:@"请输入咨询人体重"]; + return; + } + if (ValidStr(self.relationshipTextField.text)) { + [EasyTextView showErrorText:@"请选择与咨询人关系"]; + return; + } + [self showMBProgressHUDWithString:@"加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + NSString * time = [self getTimestampFromTime:self.birthdayTextField.text]; + [parmDic setObject:self.questionNameField.text forKey:@"name"]; + [parmDic setObject:@(sexInter) forKey:@"gender"]; + [parmDic setObject:time forKey:@"birthdayLong"]; + [parmDic setObject:self.heiTextField.text forKey:@"height"]; + [parmDic setObject:self.weightTextField.text forKey:@"weight"]; + [parmDic setObject:self.familyInt forKey:@"familyRelation"]; + + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"ADDAPI" NeedToken:@""]; + + [api getAddQuestionFailyMembers:parmDic]; + +} +- (void)healthInfoAction { + + BasicHealthInfoViewController * basicVC = [[BasicHealthInfoViewController alloc] init]; + basicVC.memberId = self.questionModel.people_id; + [self.navigationController pushViewController:basicVC animated:YES]; + +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/BasicHealthInfoViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/BasicHealthInfoViewController.h new file mode 100644 index 0000000..ed8a59e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/BasicHealthInfoViewController.h @@ -0,0 +1,19 @@ +// +// BasicHealthInfoViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/21. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface BasicHealthInfoViewController : HQBaseViewController + +@property (nonatomic, strong) NSString * memberId; + +@property (nonatomic, assign) bool isAddQuetsion; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/BasicHealthInfoViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/BasicHealthInfoViewController.m new file mode 100644 index 0000000..a8f5865 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/BasicHealthInfoViewController.m @@ -0,0 +1,290 @@ +// +// BasicHealthInfoViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/21. +// + +#import "BasicHealthInfoViewController.h" +#import "BasicHealthTable.h" +#import "QuestionOptionModel.h" +#import "QuestionPeopleMangerVC.h" +@interface BasicHealthInfoViewController () + +@property (nonatomic, strong) BasicHealthTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@end + +@implementation BasicHealthInfoViewController + + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; + +} + + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.navigationItem.title = @"基本健康信息"; + [self createUI]; + [self createData]; + [self addNavigationItemWithImageNames:@[@"whiteBack_icon"] isLeft:YES target:self action:@selector(backQuestionVC) tags:@[@"1"]]; + +} + +- (void)backQuestionVC { + + if (self.isAddQuetsion == true) { + + for (UIViewController *controller in self.navigationController.viewControllers) + { + if ([controller isKindOfClass:[QuestionPeopleMangerVC class]]) { + QuestionPeopleMangerVC * phyVC =(QuestionPeopleMangerVC *)controller; + [self.navigationController popToViewController:phyVC animated:false]; + } + } + }else + { + [self.navigationController popViewControllerAnimated:YES]; + } + +} + +- (void)createUI { + + self.homeTable = [[BasicHealthTable alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - kTopHeight) style:UITableViewStyleGrouped]; + self.homeTable.saveBlock = ^(NSArray * _Nonnull array) { + DLog(@"%@",array); + NSString * baseHealthId; + NSString * itemType; + NSString * itemOptions = @""; + NSMutableArray * customArray = [[NSMutableArray alloc] init]; + for (QuestionOptionModel * model in array) { + + for (QuestionOptionChildListModel * listModel in model.childList) { + baseHealthId = listModel.option_id; + itemType = listModel.itemType; + NSMutableDictionary * pamrDic = [[NSMutableDictionary alloc] init]; + for (QuestionOptionCustomModel * customModel in listModel.answerList) { + + [pamrDic setObject:customModel.value forKey:customModel.radioText]; +// itemOptions = [NSString stringWithFormat:@"%@,%@",currentString,itemOptions]; + itemOptions = [self convertToJSONData:pamrDic]; + + } + listModel.itemOptions = itemOptions; + itemOptions = @""; + } + + + + + [customArray addObject:model]; + } + DLog(@"%@",customArray); + [self saveBaseHealthInfo:customArray]; + + }; + [self.view addSubview:self.homeTable]; +} + +- (void)createData { + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.memberId forKey:@"memberId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"MEMBERAPI" NeedToken:@""]; + + [detailApi getQustionOptionsMembers :parmDic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + [EasyTextView showSuccessText:message]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self hiddenAllMBProgressHUD]; + if ([tag isEqualToString:@"MEMBERAPI"]) { + + NSArray * array = response; + + for (NSDictionary * dic in array) { + + QuestionOptionModel * model = [QuestionOptionModel modelWithDictionary:dic]; + + NSMutableArray * customAnswerArray = [[NSMutableArray alloc] init]; + + for (QuestionOptionChildListModel * optionModel in model.childList) { + + NSData *jsonData = [optionModel.itemOptions dataUsingEncoding:NSUTF8StringEncoding]; + + NSDictionary * dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil]; + + NSMutableArray * dicArray = [[NSMutableArray alloc] init]; + + + [dictionary enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) { + + NSDictionary * dic = @{@"radioText":key,@"itemType":optionModel.itemType,@"checked":@(false),@"value":[NSString stringWithFormat:@"%@",obj]}; + + NSString *mainString = optionModel.itemOptions; + NSString *subString = key; + + NSRange range = [mainString rangeOfString:subString]; + + if (range.location != NSNotFound) { + NSLog(@"Substring '%@' found at location %lu, length %lu", subString, (unsigned long)range.location, (unsigned long)range.length); + } else { + NSLog(@"Substring '%@' not found", subString); + } + + QuestionOptionCustomModel * model = [[QuestionOptionCustomModel alloc] init]; + model.radioText = key; + model.itemType = optionModel.itemType; + model.checked = false; + model.loctaionThin = range.location; + if ([optionModel.itemType intValue] == 4) { //带输入框 + + + }else + { + if ([obj boolValue] == true) { + optionModel.answerContent = key; + } + } + + model.value =[NSString stringWithFormat:@"%@",obj] ; + + + + [dicArray addObject:model]; + + optionModel.answerList = dicArray; + + }]; + + + } + + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; + + } + if ([tag isEqualToString:@"UPHEALTH"]) { + + [EasyTextView showSuccessText:response]; + [self backQuestionVC]; + } +} + +- (void)saveBaseHealthInfo:(NSArray *)array { + + + NSMutableArray * jsonArray = [[NSMutableArray alloc] init]; + + NSString * baseHealthId; + NSString * itemType; + NSString * itemOptions = @""; + NSMutableArray * customArray = [[NSMutableArray alloc] init]; + + for (QuestionOptionModel * model in array) { + + for (QuestionOptionChildListModel * listModel in model.childList) { + baseHealthId = listModel.option_id; + itemType = listModel.itemType; + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:baseHealthId forKey:@"id"]; + [dic setObject:listModel.itemOptions forKey:@"itemOptions"]; + [dic setObject:listModel.itemType forKey:@"itemType"]; + [dic setObject:self.memberId forKey:@"memberId"]; + if (![listModel.itemOptions containsString:@"1"]) { + [EasyTextView showErrorText:[NSString stringWithFormat:@"请选择%@",listModel.itemProblem]]; + return; + } + if ([listModel.itemType intValue] == 4) { + NSString *itemOptionsJSONString = listModel.itemOptions; + + NSData *jsonData = [itemOptionsJSONString dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary *itemOptions = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; + if ([itemOptions[@"无"] isEqualToString:@"1"]) { + listModel.answerContent = @""; + } + + } + [dic setObject:listModel.answerContent forKey:@"answerContent"]; + + [jsonArray addObject:dic]; + } + + + + + [customArray addObject:model]; + } + + + + [self showMBProgressHUDWithString:@"正在保存" autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:jsonArray forKey:@"list"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"UPHEALTH" NeedToken:@""]; + + [detailApi postBaseHealthInfoAPI :parmDic]; + +} + +- (NSString*)convertToJSONData:(id)infoDict +{ + NSError *error; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:infoDict + options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string + error:&error]; + + NSString *jsonString = @""; + + if (! jsonData) + { + }else + { + jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + } + + jsonString = [jsonString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //去除掉首尾的空白字符和换行字符 + + [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + + return jsonString; +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/DoctorMainViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/DoctorMainViewController.h new file mode 100644 index 0000000..79d414e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/DoctorMainViewController.h @@ -0,0 +1,21 @@ +// +// DoctorMainViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import "HQBaseViewController.h" +#import "QuestionDiseaseInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctorMainViewController : HQBaseViewController + +@property (nonatomic, strong) QuestionDiseaseInfoModel * disModel; +@property (nonatomic, strong) NSString * yuyue_id; +@property (nonatomic, assign) NSInteger popType; // 1返回上一页 其他跳转向相应 + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/DoctorMainViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/DoctorMainViewController.m new file mode 100644 index 0000000..1ff6f50 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/DoctorMainViewController.m @@ -0,0 +1,733 @@ +// +// DoctorMainViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import "DoctorMainViewController.h" +#import "DoctorStatusView.h" +#import "DoctorInfoTopView.h" +#import "AppointmentInfoView.h" +#import "evaluationPopView.h" +#import "SelectedDoctorTimeVC.h" +#import "DoctorReportModel.h" +#import "LookModficalFileViewController.h" +#import "QuesstionDetailLookFileViewController.h" +#import "QuestionBodyReportModel.h" +#import "ExpertMainViewController.h" +#import "evaluationPopView.h" +#import "FSXBStarRateView.h" +#import "SelectedQuestionViewController.h" + +@interface DoctorMainViewController () + +@property (nonatomic, strong) DoctorReportDoctorInfoModel * doctorModel; +@property (nonatomic, strong) DoctorReportConSessionModel * sessionModel; +@property (nonatomic, strong) DoctorReportRecordsModel * danganModel; +@property (nonatomic, strong) DoctorInfoTopView * doctorInfoView; +@property (nonatomic, strong) AppointmentInfoView * AppointView; +@property (nonatomic, strong) UIScrollView * mainScrollview; +@property (nonatomic, copy) NSString * yueyue_id; +@property (nonatomic, strong) UIButton * bottomBtn; +@property (nonatomic, strong) UIButton * pingjiaBtn; +@property (nonatomic, strong) UIView * evaluateView; +@property (nonatomic, strong) NSMutableArray * topViewArray; +@property (nonatomic, strong) UILabel * evaluateLabel; +@property (nonatomic, strong) UILabel * evaluateNameLabel; +@property (nonatomic, strong) FSXBStarRateView * starRateView; + +@property (nonatomic, strong) evaluationPopView * popView; + + + +@end + +@implementation DoctorMainViewController + +- (NSMutableArray *)topViewArray { + + if (!_topViewArray) { + + _topViewArray = [[NSMutableArray alloc] init]; + } + return _topViewArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = UIColorHex(#EFEFEF); + + // 注册键盘通知 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(keyboardWillShow:) + name:UIKeyboardWillShowNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(keyboardWillHide:) + name:UIKeyboardWillHideNotification + object:nil]; + // 启用侧滑返回手势 + self.navigationController.interactivePopGestureRecognizer.delegate = self; + self.navigationController.interactivePopGestureRecognizer.enabled = YES; + + // 创建自定义手势识别器 + UIScreenEdgePanGestureRecognizer *panGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; + panGesture.edges = UIRectEdgeLeft; + [self.view addGestureRecognizer:panGesture]; + self.isHidenNaviBar = YES; + [self createTopAndNav]; + [self createStatusView]; + [self createData]; +} + +- (void)createTopAndNav { + + UIView * navView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(222))]; + navView.backgroundColor = UIColorHex(#21BEBD); + [self.view addSubview:navView]; + UIButton * backBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(15), kStatusBarHeight + kRealValue(15), 30, 30)]; + [backBtn setImage:[UIImage imageNamed:@"whiteBack_icon"] forState:UIControlStateNormal]; + [backBtn addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; + [navView addSubview:backBtn]; +} + +- (void)backAction { + +// if (self.popType == 1) { +// [self.navigationController popViewControllerAnimated:YES]; +// }else +// { +//// int i = 0; +//// int allCount = self.navigationController.viewControllers.count; +//// for (UIViewController *controller in self.navigationController.viewControllers) +//// { +//// if ([controller isKindOfClass:[ExpertMainViewController class]]) { +//// ExpertMainViewController * expervc =(ExpertMainViewController *)controller; +//// [self.navigationController popToViewController:expervc animated:YES]; +//// } +//// if ([controller isKindOfClass:[OneKeyQuestionDetailVC class]]) { +//// OneKeyQuestionDetailVC * phyVC =(OneKeyQuestionDetailVC *)controller; +//// [self.navigationController popToViewController:phyVC animated:false]; +//// } +//// i++; +//// if (i == allCount && ![controller isKindOfClass:[ExpertMainViewController class]] && ![controller isKindOfClass:[OneKeyQuestionDetailVC class]] ) { +//// [self.navigationController popViewControllerAnimated:YES]; +//// } +//// +//// } +// // 获取导航堆栈视图控制器数组 +// NSArray *viewControllers = self.navigationController.viewControllers; +// +// // 确保堆栈中有足够的视图控制器 +// if (viewControllers.count >= 3) { +// // 返回到上上级视图控制器 +// UIViewController *targetViewController = viewControllers[viewControllers.count - 3]; +// [self.navigationController popToViewController:targetViewController animated:YES]; +// } else { +// // 处理视图控制器不足的情况,比如弹出提示或者直接 popToRootViewController +// [self.navigationController popViewControllerAnimated:YES]; +// } +// } + // 获取当前导航控制器的视图控制器堆栈 + NSArray *viewControllers = self.navigationController.viewControllers; + + // 查找导航堆栈中的目标视图控制器 + UIViewController *targetViewController = nil; + for (UIViewController *vc in viewControllers) { + if ([vc isKindOfClass:[SelectedQuestionViewController class]]) { + targetViewController = vc; + break; + } + } + + if (targetViewController) { + // 如果找到目标视图控制器,则弹出到该视图控制器 + [self.navigationController popToViewController:targetViewController animated:YES]; + } else { + // 如果没有找到目标视图控制器,则返回到上一页 + [self.navigationController popViewControllerAnimated:YES]; + } +} + +- (void)createStatusView { + NSArray * array = @[@" 待确认 ",@" 待开始 ",@"在线咨询",@" 待评价 ",@" 完成 "]; + CGFloat statusW = (kScreenWidth - kRealValue(68))/5; + for (int i = 0; i < 5 ; i ++) { + + DoctorStatusView * statusView = [[DoctorStatusView alloc] initWithFrame:CGRectMake(kRealValue(34) + (statusW + 5) * i , kTopHeight + kRealValue(5), statusW, kRealValue(50))]; + if (i == 0) { + statusView.isSelected = true; + }else + { + statusView.isSelected = false; + + } + statusView.lastType = 4; + + statusView.statusString = array[i]; + [self.topViewArray addObject:statusView]; + [self.view addSubview:statusView]; + } + + UILabel * titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(33), kTopHeight + kRealValue(11) + kRealValue(70) , kScreenWidth - kRealValue(66), 13)]; + titleLabel.text = @"预约成功后,请就诊当日打开APP等待医生呼叫"; + titleLabel.textColor = KWhiteColor; + titleLabel.font = MEDIUMFONT(12); + titleLabel.textAlignment = NSTextAlignmentLeft; + [self.view addSubview:titleLabel]; + + UIButton * bottomBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(31.5), kScreenHeight - 50 , self.view.width - kRealValue(66), 40)]; + [bottomBtn setTitle:@"取消预约" forState:UIControlStateNormal]; + [bottomBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + bottomBtn.titleLabel.font = SYSTEMFONT(14); + bottomBtn.layer.cornerRadius = 20; + bottomBtn.layer.masksToBounds = true; + bottomBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + [bottomBtn addTarget:self action:@selector(cancelAppointClick) forControlEvents:UIControlEventTouchUpInside]; + bottomBtn.layer.borderWidth = 1.0f; + self.bottomBtn = bottomBtn; + [self.view addSubview:bottomBtn]; + + self.pingjiaBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(31.5), kScreenHeight - 50 , self.view.width - kRealValue(66), 40)]; + [self.pingjiaBtn setTitle:@"去评价" forState:UIControlStateNormal]; + [self.pingjiaBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.pingjiaBtn.titleLabel.font = SYSTEMFONT(14); + self.pingjiaBtn.layer.cornerRadius = 20; + self.pingjiaBtn.layer.masksToBounds = true; + [self.pingjiaBtn addTarget:self action:@selector(qupingjiaAction) forControlEvents:UIControlEventTouchUpInside]; + self.pingjiaBtn.hidden = true; + self.pingjiaBtn.backgroundColor = UIColorHex(#21BEBD); + [self.view addSubview:self.pingjiaBtn]; + MJWeakSelf + UIScrollView * mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(kRealValue(15), titleLabel.bottom + kRealValue(27), kScreenWidth - kRealValue(30),kScreenHeight - titleLabel.bottom - 50 - 40)]; + mainScrollView.showsVerticalScrollIndicator = false; + mainScrollView.showsHorizontalScrollIndicator = false; + mainScrollView.backgroundColor = KClearColor; + self.mainScrollview = mainScrollView; + [self.view addSubview:mainScrollView]; + + DoctorInfoTopView * infoView = [[DoctorInfoTopView alloc] initWithFrame:CGRectMake(0, 0, mainScrollView.width, 210)]; + infoView.backgroundColor = KWhiteColor; + self.doctorInfoView = infoView; + infoView.height = infoView.doctorinfoHeight; + infoView.layer.cornerRadius = 5.0; + infoView.layer.masksToBounds = true; + infoView.collectBlock = ^(DoctorReportDoctorInfoModel * _Nonnull doctorModel) { + [weakSelf collectDoctor:doctorModel]; + }; + [mainScrollView addSubview:infoView]; + + + AppointmentInfoView * AppointView = [[AppointmentInfoView alloc] initWithFrame:CGRectMake(0, infoView.bottom + kRealValue(10), mainScrollView.width, 400)]; + AppointView.backgroundColor = KWhiteColor; + self.AppointView = AppointView; + + AppointView.lookBlock = ^{ + [weakSelf lookFileDeatil]; + }; + + [HQCommonUtils addShadowToView:AppointView]; + AppointView.height = AppointView.infoH; + [mainScrollView addSubview:AppointView]; + + self.evaluateView = [[UIView alloc] initWithFrame:CGRectMake(0, AppointView.bottom + kRealValue(10), mainScrollView.width, 50)]; + self.evaluateView.backgroundColor = KWhiteColor; + self.evaluateView.layer.cornerRadius = 10; + self.evaluateView.layer.masksToBounds = true; + self.evaluateView.hidden = true; + [mainScrollView addSubview:self.evaluateView]; + + self.evaluateNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(15), 100, 15)]; + self.evaluateNameLabel.textColor = CFontColor1; + self.evaluateNameLabel.textAlignment = NSTextAlignmentLeft; + self.evaluateNameLabel.font = BOLDSYSTEMFONT(14); + self.evaluateNameLabel.text = @"--"; + + [self.evaluateView addSubview:self.evaluateNameLabel]; + + self.starRateView = [[FSXBStarRateView alloc] initWithFrame:CGRectMake(self.evaluateNameLabel.right, kRealValue(13), 100, 15) numberOfStars:5 rateStyle:HalfStar isAnination:YES finish:^(CGFloat currentScore) { + }]; + self.starRateView.enable = false; + self.starRateView.currentScore = 3; + [self.evaluateView addSubview:self.starRateView]; + + self.evaluateLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15),self.evaluateNameLabel.bottom + kRealValue(15), self.evaluateView.width - kRealValue(30), 15)]; + self.evaluateLabel.textColor = CFontColor2; + self.evaluateLabel.textAlignment = NSTextAlignmentLeft; + self.evaluateLabel.font = SYSTEMFONT(12); + self.evaluateLabel.text = @"--"; + [self.evaluateView addSubview:self.evaluateLabel]; + + + + mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), kScreenHeight - titleLabel.bottom - 50 - 40); + + + +} + +- (void)createData { + + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.yuyue_id forKey:@"id"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"ReportApi" NeedToken:@""]; + + [detailApi getAppointmentReportDetailAPI:parmDic]; +} + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"ReportApi"]) { + + [self hiddenAllMBProgressHUD]; + NSDictionary * resDic = response; + DoctorReportModel * model = [DoctorReportModel modelWithDictionary:resDic]; + + self.sessionModel = [DoctorReportConSessionModel modelWithDictionary:model.conSession] ; + self.doctorModel = [DoctorReportDoctorInfoModel modelWithDictionary:model.conDoctorDO] ; + self.danganModel = [DoctorReportRecordsModel modelWithDictionary:model.conMedicalRecordsListDO]; +// 预约状态 1待确认 2待开始 3已开始 4待评价 5已完成 6 拒绝 7取消 8 超时 + [self topStatus:[self.sessionModel.contentStatus intValue]]; + self.doctorInfoView.model = model; + +// self.AppointView.recordModel = [DoctorReportRecordsModel modelWithDictionary:model.conMedicalRecordsListDO] ; +// self.AppointView.familyModel = [DoctorReportFamilyInfoModel modelWithDictionary:model.conFamilyMembersDO]; +// self.AppointView.answerModel = model; + self.AppointView.model = model; + if ([self.sessionModel.contentStatus intValue] == 7) { + self.AppointView.isQuxiao = true; + self.bottomBtn.hidden = true; + } + if ([self.sessionModel.contentStatus intValue] == 6) { + self.AppointView.isQuxiao = false; + self.bottomBtn.hidden = true; + } + if ([self.sessionModel.contentStatus intValue] == 4) { + + self.pingjiaBtn.hidden = false; + } + if ([self.sessionModel.contentStatus intValue] == 5) { + + self.pingjiaBtn.hidden = true; + self.bottomBtn.hidden = true; + self.evaluateView.hidden = false; + DoctorConEvaluateDOModel * evModel = [DoctorConEvaluateDOModel modelWithDictionary:model.conEvaluateDO] ; + self.evaluateLabel.text = evModel.context; + self.evaluateNameLabel.text = evModel.userName; + self.starRateView.currentScore = [evModel.score floatValue]; + + self.evaluateNameLabel.width = [HQCommonUtils getLengthFromText:self.evaluateNameLabel.text andFontSize:16]; + self.starRateView.left = self.evaluateNameLabel.right + kRealValue(10); + self.evaluateLabel.height = [HQCommonUtils getSpaceLabelHeight:self.evaluateLabel withStr:self.evaluateLabel.text withFont:[UIFont systemFontOfSize:12 weight:UIFontWeightMedium] withWidth:self.evaluateLabel.width withLineSpacing:5]; + self.evaluateView.height = self.evaluateLabel.bottom + kRealValue(10); + + } + if ([self.sessionModel.contentStatus intValue] == 1 || [self.sessionModel.contentStatus intValue] == 2 || [self.sessionModel.contentStatus intValue] == 3) + { + self.AppointView.isQuxiao = false; + } + //布局 + self.doctorInfoView.height = self.doctorInfoView.doctorinfoHeight; + self.AppointView.top = self.doctorInfoView.bottom + 10; + self.AppointView.height = self.AppointView.infoH; + self.evaluateView.top = self.AppointView.bottom + 10; + self.AppointView.height = self.AppointView.infoH; + self.evaluateView.top = self.AppointView.bottom + 10; + self.mainScrollview.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), self.evaluateView.bottom); +// //是否体检报告 +// if ([self.danganModel.tfPermission integerValue] == 1) { //有体检报告 +// +// [self getBodyInfoReport:model.idNo]; +// +// }else +// { +// +// } + } + + if ([tag isEqualToString:@"CARDSEARCH"]) { + + [self hiddenAllMBProgressHUD]; +// NSDictionary * dic = response; +// +// if ([dic.allKeys containsObject:@"records"]) { +// int i = 0; +// NSArray * array = [dic objectForKey:@"records"]; +// for (NSDictionary * parm in array) { +// +// PhyscialReportListModel * model = [PhyscialReportListModel modelWithDictionary:parm]; +// +// if (i == 0) { +// self.AppointView.bodyModel =model; +// } +// i++; +// } +// if (array.count <= 0) { +// self.AppointView.bodyModel = nil; +// } +// self.AppointView.height = self.AppointView.infoH; +// self.evaluateView.top = self.AppointView.bottom + 10; +// self.mainScrollview.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), self.evaluateView.bottom); +// +// } +// + } + + if ([tag isEqualToString:@"CANCELQUESTION"]) { + [self hiddenAllMBProgressHUD]; + [self createData]; + } + if ([tag isEqualToString:@"CollAPI"]) { + [self hiddenAllMBProgressHUD]; + + [EasyTextView showSuccessText:response]; + [self createData]; + } + if ([tag isEqualToString:@"cancelAPI"]) { + [self hiddenAllMBProgressHUD]; + + [EasyTextView showSuccessText:response]; + [self createData]; + + } + if ([tag isEqualToString:@"DoctorSource"]) { + [self hiddenAllMBProgressHUD]; + [self.popView removeFromSuperview]; + [self createData]; + } +} + +- (void)collectDoctor:(DoctorReportDoctorInfoModel *)doctorModel { + + + if([doctorModel.tfFollow integerValue] == 1) { //已经关注 点击取消 + + + [self showMBProgressHUDWithString:@"正在取消关注" autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:doctorModel.doctor_id forKey:@"doctorId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"cancelAPI" NeedToken:@""]; + + [detailApi getCancelCollectDoctorExpertData:parmDic]; + + } +else + { + [self showMBProgressHUDWithString:@"正在关注" autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:doctorModel.doctor_id forKey:@"doctorId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"CollAPI" NeedToken:@""]; + + [detailApi getCollectDoctorExpertData:parmDic]; + + } + + +} + +//请求体检信息 +- (void)getBodyInfoReport:(NSString *)byID { + +// NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; +// +// [parmDic setObject:User_ID forKey:@"userId"]; +// +// JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"CARDSEARCH" NeedToken:nil]; +// +// [api GetPhyscialIDCardSearch:parmDic]; + +} + +- (void)topStatus:(int)status { + //预约状态 1待确认 2待开始 3已开始 4待评价 5已完成 + // 6 拒绝 7取消 8 超时 + + if(status == 1 || status == 6 ) { + + int i = 0; + for (DoctorStatusView * topView in self.topViewArray) { + if ( i == 0) { + topView.isSelected = true; + }else + { + topView.isSelected = false; + } + topView.lastType = i ; + i ++; + } + } + if(status == 2) { + + int i = 0; + for (DoctorStatusView * topView in self.topViewArray) { + if ( i == 1) { + + topView.isSelected = true; + }else + { + topView.isSelected = false; + } + topView.lastType = i ; + + i ++; + } + } + if(status == 3) { + + int i = 0; + for (DoctorStatusView * topView in self.topViewArray) { + if ( i == 2) { + + topView.isSelected = true; + }else + { + topView.isSelected = false; + } + i ++; + } + } + if(status == 4) { + + int i = 0; + for (DoctorStatusView * topView in self.topViewArray) { + if ( i == 3) { + + topView.isSelected = true; + }else + { + topView.isSelected = false; + } + topView.lastType = i ; + + i ++; + } + } + + if(status == 5) { + + int i = 0; + for (DoctorStatusView * topView in self.topViewArray) { + if ( i == 4) { + + topView.isSelected = true; + }else + { + topView.isSelected = false; + } + topView.lastType = i ; + + i ++; + } + } + // 6 拒绝 7取消 8 超时 + if(status == 7) + { + int i = 0; + for (DoctorStatusView * topView in self.topViewArray) { + if ( i == 1) { + topView.statusString = @"取消预约"; + topView.isSelected = true; + }else + { + topView.isSelected = false; + } + topView.lastType = i ; + + i ++; + } + } + + if(status == 8 ) + { + DoctorStatusView * topView = self.topViewArray.lastObject; + topView.isSelected = true; + } + DoctorStatusView * lastView = self.topViewArray.lastObject; + lastView.lastType = 4; + +} + +#pragma mark:查看档案详情 + +- (void)lookFileDeatil { + +#pragma mark - 网络请求 + + +// NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; +// +// [parmDic setObject:self.danganModel.dangan_id forKey:@"id"]; +// +// JKCQAPI * upApi = [[JKCQAPI alloc] init:self tag:@"FILEDATA" NeedToken:@""]; +// +// [upApi GetLookModficalMemberShipFileData:parmDic]; +// + QuesstionDetailLookFileViewController * detailvc = [[QuesstionDetailLookFileViewController alloc] init]; + detailvc.danganID = self.danganModel.dangan_id; + [self.navigationController pushViewController:detailvc animated:YES]; +} + +#pragma mark:查看体检报告 + +- (void)lookReportDeatil { + +// PhysicalReportViewController * phyVC = [[PhysicalReportViewController alloc] init]; +// [self.navigationController pushViewController:phyVC animated:YES]; +// PhyReportDetailViewController * yearVC = [[PhyReportDetailViewController alloc] init]; +// yearVC.navTitle = model.medicalYear; +// yearVC.yearString = model.report_id; +// [self.navigationController pushViewController:yearVC animated:YES]; + +} + +#pragma mark:取消预约 + +- (void)cancelAppointClick { + +// GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/conSession/cancelSession?id=1716737797670907906 HTTP/1.1 + +// evaluationPopView * popView = [[evaluationPopView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]; +// popView.popBlock = ^(CGFloat starNumber, BOOL isSecrect, NSString * _Nonnull evaluationString) { +// [EasyTextView showInfoText:@"点击了提交"]; +// }; +// [[UIApplication sharedApplication].keyWindow addSubview:popView]; + +// GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/conDoctorSchedulingDate/selectSchedulingDateListByDoctorId?doctorId=1539253293e421ab0115425351860001 HTTP/1.1 +// QuesstionDetailLookFileViewController * lookVC = [[QuesstionDetailLookFileViewController alloc] init]; +// +// lookVC.danganID = self.danganModel.dangan_id; +// +// [self.navigationController pushViewController:lookVC animated:YES]; + [self showMBProgressHUDWithString:@"正在取消..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.sessionModel.yuyue_id forKey:@"id"]; + + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"CANCELQUESTION" NeedToken:nil]; + + [api getCancelQuestion:parmDic]; + +} + +- (void)qupingjiaAction { + + evaluationPopView * popView = [[evaluationPopView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]; + self.popView = popView; + popView.popBlock = ^(CGFloat starNumber, BOOL isSecrect, NSString * _Nonnull evaluationString) { + NSString * niming = isSecrect == YES? @"1":@"0"; + [self doctorSourceWithStarNumaber:starNumber withContext:evaluationString isKnow:niming]; + }; + [[UIApplication sharedApplication].keyWindow addSubview:popView]; + +} + +- (void)doctorSourceWithStarNumaber:(CGFloat)starNumer withContext:(NSString *)connet isKnow:(NSString *)isNiming{ + + [self showMBProgressHUDWithString:@"评价中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(starNumer) forKey:@"score"]; + [parmDic setObject:connet forKey:@"context"]; + [parmDic setObject:self.sessionModel.yuyue_id forKey:@"sessionId"]; + [parmDic setObject:isNiming forKey:@"tfUnknow"]; + + JKCQAPI * endApi = [[JKCQAPI alloc] init:self tag:@"DoctorSource" NeedToken:@""]; + [endApi PostQustionDoctorScore:parmDic]; + +} + + +- (void)keyboardWillShow:(NSNotification *)notification { + // 获取键盘的大小和动画持续时间 + NSDictionary *userInfo = [notification userInfo]; + CGRect keyboardFrame = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; + double duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + + // 根据键盘的大小调整视图的位置 + [UIView animateWithDuration:duration animations:^{ + // 您可以在这里调整视图的位置,例如: + self.popView.frame = CGRectMake(0, self.view.bounds.size.height - keyboardFrame.size.height - self.popView.bounds.size.height, self.popView.bounds.size.width, self.popView.bounds.size.height); + }]; +} + +- (void)keyboardWillHide:(NSNotification *)notification { + // 获取动画持续时间 + NSDictionary *userInfo = [notification userInfo]; + double duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + + // 恢复视图的位置 + [UIView animateWithDuration:duration animations:^{ + // 恢复视图到原来的位置,例如: + self.popView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight); // originalFrame 是视图原来的位置 + }]; +} + + + +- (void)dealloc { + // 移除通知 + [[NSNotificationCenter defaultCenter] removeObserver:self + name:UIKeyboardWillShowNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] removeObserver:self + name:UIKeyboardWillHideNotification + object:nil]; +} +// 手势处理方法 +- (void)handlePanGesture:(UIScreenEdgePanGestureRecognizer *)gesture { + if (gesture.state == UIGestureRecognizerStateEnded) { + NSArray *viewControllers = self.navigationController.viewControllers; + UIViewController *targetViewController = nil; + + // 查找导航堆栈中的目标视图控制器 + for (UIViewController *vc in viewControllers) { + if ([vc isKindOfClass:[SelectedQuestionViewController class]]) { + targetViewController = vc; + break; + } + } + if (targetViewController) { + // 如果找到目标视图控制器,则弹出到该视图控制器 + [self.navigationController popToViewController:targetViewController animated:YES]; + } else { + // 如果没有找到目标视图控制器,则返回到上一页 + [self.navigationController popViewControllerAnimated:YES]; + } + } +} + +// UIGestureRecognizerDelegate 方法 +- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { + // 确保只有在不是根视图控制器时才启用手势 + return self.navigationController.viewControllers.count > 1; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/EvaluationListViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/EvaluationListViewController.h new file mode 100644 index 0000000..98b07ca --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/EvaluationListViewController.h @@ -0,0 +1,20 @@ +// +// EvaluationListViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/14. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface EvaluationListViewController : HQBaseViewController + +@property (nonatomic, copy) NSString * hospitalID; +@property (nonatomic, assign) NSInteger type; +@property (nonatomic, copy) NSString * doctorId; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/EvaluationListViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/EvaluationListViewController.m new file mode 100644 index 0000000..c9cf91c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/EvaluationListViewController.m @@ -0,0 +1,264 @@ +// +// EvaluationListViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/14. +// + +#import "EvaluationListViewController.h" +#import "EvaluationListTableView.h" +#import "FSXBStarRateView.h" +#import "EvaluatListModel.h" + + +@interface EvaluationListViewController () + +@property (nonatomic, assign) NSInteger pageNo; + +@property (nonatomic, strong) EvaluationListTableView * homeTable; +@property (nonatomic, strong) UILabel * numberLabel; +@property (nonatomic, strong) UILabel * scourLabel; +@property (nonatomic, strong) UILabel * fenLabel; + +@property (nonatomic, strong) FSXBStarRateView * starView; +@property (nonatomic, strong) NSMutableArray * dataArray; + +@end + +@implementation EvaluationListViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + + return _dataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = UIColorHex(#EEEEEE); + self.navigationItem.title = @"用户评价"; + self.pageNo = 1; + [self createUI]; + + if (self.type == 2) { + [self getDoctorSoucre]; + [self createDoctorData]; + }else{ + [self createData]; + [self createHospitalData]; + } +} +- (void)createUI { + + UIView * evaluationView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(13), kScreenWidth - kRealValue(30), kScreenHeight - kRealValue(41) - kTopHeight)]; + evaluationView.backgroundColor = KWhiteColor; + evaluationView.layer.cornerRadius = 10; + evaluationView.layer.masksToBounds = true; + [self.view addSubview:evaluationView]; + + UILabel * titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(17), kRealValue(22), 75, 18)]; + titleLabel.text = @"患者评价"; + titleLabel.textAlignment = NSTextAlignmentLeft; + titleLabel.font = BOLDSYSTEMFONT(16); + titleLabel.textColor = UIColorHex(#333333); + [evaluationView addSubview:titleLabel]; + + self.numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(titleLabel.right + kRealValue(7), kRealValue(26), 180, 13)]; + self.numberLabel .text = @""; + self.numberLabel .textAlignment = NSTextAlignmentLeft; + self.numberLabel .font = BOLDSYSTEMFONT(11); + self.numberLabel .textColor = UIColorHex(#666666); + [evaluationView addSubview:self.numberLabel ]; + + self.scourLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(17), titleLabel.bottom + kRealValue(22), 65, 34)]; + self.scourLabel.text = @""; + self.scourLabel.textAlignment = NSTextAlignmentLeft; + self.scourLabel.font = SYSTEMFONT(34); + self.scourLabel.textColor = UIColorHex(#21BEBD); + [evaluationView addSubview:self.scourLabel]; + + UILabel * fenLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.scourLabel.right, titleLabel.bottom + kRealValue(25), 15, 30)]; + fenLabel.text = @"分"; + fenLabel.textAlignment = NSTextAlignmentLeft; + self.fenLabel = fenLabel; + fenLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightHeavy]; + fenLabel.textColor = UIColorHex(#21BEBD); + [evaluationView addSubview:fenLabel]; + + + + + self.starView = [[FSXBStarRateView alloc] initWithFrame:CGRectMake(self.scourLabel.right + kRealValue(3), self.numberLabel.bottom + kRealValue(27), kRealValue(120), 20) numberOfStars:5 rateStyle:HalfStar isAnination:YES finish:^(CGFloat currentScore) { + + }]; + self.starView.currentScore = 0; + [evaluationView addSubview:self.starView]; + + self.homeTable = [[EvaluationListTableView alloc] initWithFrame:CGRectMake(0, self.scourLabel.bottom + kRealValue(25) , evaluationView.width, evaluationView.height - self.scourLabel.bottom - kRealValue(25)) style:UITableViewStyleGrouped]; + self.homeTable.type = self.type; + [evaluationView addSubview:self.homeTable]; + + __weak __typeof(self) weakSelf = self; + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 1; + if (self.type == 2) { + [weakSelf createDoctorData]; + }else + { + [weakSelf createData]; + } + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + + if (self.type == 2) { + + [weakSelf createDoctorData]; + + }else + { + [weakSelf createData]; + } + }]; +} +- (void)createDoctorData { + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@"10" forKey:@"pageSize"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"DoctorAPI" NeedToken:@""]; + + [detailApi getExpertDoctorEvluateData:parmDic]; +} + +- (void)createData { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.hospitalID forKey:@"hospitalId"]; + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@"10" forKey:@"pageSize"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"EVALUATAPI" NeedToken:@""]; + + [detailApi getHospatilEvaluate:parmDic]; +} + +- (void)createHospitalData { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.hospitalID forKey:@"hospitalId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"SCOREAPI" NeedToken:@""]; + + [detailApi getHospatilScore:parmDic]; + +} + +- (void)getDoctorSoucre { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"SCOREAPI" NeedToken:@""]; + + [detailApi getDoctorScore:parmDic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_header endRefreshing]; + [self.homeTable.mj_footer endRefreshing]; + [self hiddenAllMBProgressHUD]; + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + + [self.homeTable.mj_header endRefreshing]; + [self.homeTable.mj_footer endRefreshing]; + + if ([tag isEqualToString:@"EVALUATAPI"]) { + + NSArray * array = response; + + if (self.pageNo == 1) { + + [self.dataArray removeAllObjects]; + } + for (NSDictionary * dic in array) { + + EvaluatListModel * evModel = [EvaluatListModel modelWithDictionary:dic]; + + [self.dataArray addObject:evModel]; + + } + self.homeTable.dataArray = self.dataArray; + + } + + if ([tag isEqualToString:@"DoctorAPI"]) { + + NSArray * array = response; + + if (self.pageNo == 1) { + + [self.dataArray removeAllObjects]; + } + for (NSDictionary * dic in array) { + + EvaluatListModel * evModel = [EvaluatListModel modelWithDictionary:dic]; + + [self.dataArray addObject:evModel]; + + } + self.homeTable.dataArray = self.dataArray; + + + } + + if ([tag isEqualToString:@"SCOREAPI"]) { + + NSDictionary * dic = response; + + + + + NSString * score = [NSString stringWithFormat:@"%.1f",[[dic objectForKey:@"score"] floatValue]]; + NSString * userScoreNum = [NSString stringWithFormat:@"%@",[dic objectForKey:@"userScoreNum"]]; + self.numberLabel.text = [NSString stringWithFormat:@"(%@员工评价)",userScoreNum]; + self.scourLabel.text = score; + self.scourLabel.width = [HQCommonUtils getLengthFromText:score andFontSize:34]; + self.fenLabel.left = self.scourLabel.right; + self.starView.left = self.fenLabel.right + kRealValue(3); + self.starView.currentScore = [score floatValue]; + + } + +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/ExpertMainViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/ExpertMainViewController.h new file mode 100644 index 0000000..2d4a22b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/ExpertMainViewController.h @@ -0,0 +1,18 @@ +// +// ExpertMainViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/16. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ExpertMainViewController : HQBaseViewController + +@property (nonatomic, copy) NSString * doctorId; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/ExpertMainViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/ExpertMainViewController.m new file mode 100644 index 0000000..0c90e23 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/ExpertMainViewController.m @@ -0,0 +1,711 @@ +// +// ExpertMainViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/16. +// + +#import "ExpertMainViewController.h" +#import "ZHTagListView.h" +#import "HospitalMainTableView.h" +#import "EvaluationListViewController.h" +#import "DoctorDetailModel.h" +#import "EvaluatListModel.h" +#import "DoctorEvaluationTable.h" +#import "SelectedDoctorTimeVC.h" +#import "FileDataDetailViewController.h" +#import "SelectFIleDateDetailViewController.h" +#import "SelectedQuestionViewController.h" +#import "QuestionMustKnowViewController.h" + +@interface ExpertMainViewController () + +@property (nonatomic, strong) UIScrollView * mainScrollView; + +@property (nonatomic, strong) UIView * topView; +@property (nonatomic, strong) UIImageView * doctorImageView; +@property (nonatomic, strong) UIImageView * starImg; + +@property (nonatomic, strong) UILabel * doctorName; +@property (nonatomic, strong) UILabel * jobName; +@property (nonatomic, strong) UILabel * hospitalName; +@property (nonatomic, strong) UILabel * evaluationLabel; +@property (nonatomic, strong) UIButton * collectBtn; +@property (nonatomic, strong) ZHTagListView *tagList; + +@property (nonatomic, strong) UIView * pictureView; +@property (nonatomic, strong) UIView * videoView; +@property (nonatomic, strong) UIView * doctorView; +@property (nonatomic, strong) UIView * hotView; +@property (nonatomic, strong) UIView * quesstionView; +@property (nonatomic, strong) UIView * linView; +@property (nonatomic, strong) UIView * currentHot; + + +@property (nonatomic, strong) UILabel * doctorIndorLabel; +@property (nonatomic, strong) UILabel * doctorGoodLabel; +@property (nonatomic, strong) UILabel * doctorTitle; +@property (nonatomic, strong) NSDictionary * AudioknowDic; +@property (nonatomic, strong) NSDictionary * PictureknowDic; + +@property (nonatomic, strong) UILabel * gradientView; + +@property (nonatomic, assign) NSInteger questionType; + +@property (nonatomic, strong) DoctorEvaluationTable * homeTable; + +@property (nonatomic, strong) UIButton * videoBtn; +@property (nonatomic, strong) UIButton * pictureBtn; + + +@end + +@implementation ExpertMainViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.navigationItem.title = @"专家主页"; + self.view.backgroundColor = UIColorHex(#EEEEEE); + [self createUI]; + [self createData]; + [self getMustknowWithType:@"1"]; + [self getMustknowWithType:@"2"]; + +} + +- (void)createUI { + + self.mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0.5, kScreenWidth, kScreenHeight - kTopHeight)]; + [self.view addSubview:self.mainScrollView]; + + self.topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(170))]; + self.topView.backgroundColor = UIColorHex(#21BEBD); + [self.mainScrollView addSubview:self.topView]; + + self.doctorImageView = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(17), kRealValue(10), 60, 60)]; + self.doctorImageView.image = PLACEHOLD_IMG; + self.doctorImageView.layer.cornerRadius = 30.0; + self.doctorImageView.layer.masksToBounds = YES; + [self.topView addSubview:self.doctorImageView]; + + //暂停服务标识 + UIView *gradientView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(16), self.doctorImageView.bottom - 13 , 60, 19)]; + gradientView.layer.cornerRadius = 5; + gradientView.layer.masksToBounds = YES; + self.gradientView = gradientView; + [self.topView addSubview:gradientView]; + + // 创建CAGradientLayer来实现渐变效果 + CAGradientLayer *gradientLayer = [CAGradientLayer layer]; + gradientLayer.frame = gradientView.bounds; + + // 设置渐变的颜色 + gradientLayer.colors = @[ + (__bridge id)[UIColor colorWithRed:0x66/255.0 green:0x66/255.0 blue:0x66/255.0 alpha:1.0].CGColor, + (__bridge id)[UIColor colorWithRed:0xC3/255.0 green:0xC3/255.0 blue:0xC3/255.0 alpha:1.0].CGColor + ]; + + // 设置渐变的方向(从左到右) + gradientLayer.startPoint = CGPointMake(0, 0.5); + gradientLayer.endPoint = CGPointMake(1, 0.5); + + [gradientView.layer addSublayer:gradientLayer]; + + // 创建一个UILabel来显示“暂停服务” + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, gradientView.width, gradientView.height)]; + label.text = @"暂停服务"; + label.font = SYSTEMFONT(12); + label.textColor = [UIColor whiteColor]; + label.backgroundColor = KClearColor; + + // 将UILabel居中 + label.textAlignment = NSTextAlignmentCenter; + [gradientView addSubview:label]; + + self.doctorName = [[UILabel alloc] initWithFrame:CGRectMake(self.doctorImageView.right + kRealValue(20), kRealValue(19), 70, 20)]; + self.doctorName.textColor = KWhiteColor; + self.doctorName.font = [UIFont systemFontOfSize:21 weight:UIFontWeightHeavy]; + self.doctorName.textAlignment = NSTextAlignmentLeft; + self.doctorName.text = @""; + [self.topView addSubview:self.doctorName]; + + self.jobName = [[UILabel alloc] initWithFrame:CGRectMake(self.doctorName.right + kRealValue(12), kRealValue(25), 90, 13)]; + self.jobName.textColor = KWhiteColor; + self.jobName.font = BOLDSYSTEMFONT(13); + self.jobName.textAlignment = NSTextAlignmentLeft; + self.jobName.text = @""; + [self.topView addSubview:self.jobName]; + + self.hospitalName = [[UILabel alloc] initWithFrame:CGRectMake(self.doctorImageView.right + kRealValue(20),self.doctorName.bottom + kRealValue(12) , kScreenWidth - kRealValue(159), 30)]; + self.hospitalName.textColor = KWhiteColor; + self.hospitalName.font = BOLDSYSTEMFONT(13); + self.hospitalName.textAlignment = NSTextAlignmentLeft; + self.hospitalName.text = @""; + self.hospitalName.numberOfLines = 2; + [self.topView addSubview:self.hospitalName]; + + self.collectBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth - kRealValue(15) - 60, kRealValue(33), 60, 26)]; + self.collectBtn.backgroundColor = KWhiteColor; + [self.collectBtn setTitle:@" 关注" forState:UIControlStateNormal]; + [self.collectBtn setTitle:@"已关注" forState:UIControlStateSelected]; + self.collectBtn.titleLabel.font = SYSTEMFONT(12); + [self.collectBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [self.collectBtn addTarget:self action:@selector(collectHosptal:) forControlEvents:UIControlEventTouchUpInside]; + self.collectBtn.layer.cornerRadius = 13.0; + self.collectBtn.layer.masksToBounds = true; + [self.topView addSubview:self.collectBtn]; + + NSMutableArray *_dataSource = @[ + ].mutableCopy; + + ZHTagListConfiguration *config = [ZHTagListConfiguration defaultConfiguration]; + config.tagTextColor = UIColorHex(#21BEBD); + config.tagTextMargin = 11; + config.tagHeight = 17; + config.tagTextFont = BOLDSYSTEMFONT(11); + config.tagBackColor = KWhiteColor; + config.tagMaxWidth = kScreenWidth - kRealValue(120); +// config.tagListViewInset = UIEdgeInsetsMake(15, 15, 15, 10); + + ZHTagListView *tagList = [[ZHTagListView alloc] initWithFrame:CGRectMake(self.doctorImageView.right + kRealValue(20) , self.hospitalName.bottom + kRealValue(8), kScreenWidth - kRealValue(120) , 0) configuration:config tagTexts:_dataSource]; + self.tagList = tagList; + [self.topView addSubview:tagList]; + [tagList.tagButtonList enumerateObjectsUsingBlock:^(UIButton * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + + }]; + +// UIImageView * starImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(37), tagList.bottom + kRealValue(14), 15, 15)]; +// starImg.image = [UIImage imageNamed:@"home_star"]; +// self.starImg = starImg; +// [self.topView addSubview:starImg]; + + self.evaluationLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, tagList.bottom + kRealValue(16), kScreenWidth, 11)]; + self.evaluationLabel.font = SYSTEMFONT(13); + self.evaluationLabel.textAlignment = NSTextAlignmentCenter; + self.evaluationLabel.textColor = KWhiteColor; + [self.topView addSubview:self.evaluationLabel]; + +// UIView * hotView = [[UIView alloc] initWithFrame:CGRectMake(self.evaluationLabel.right + kRealValue(3), self.evaluationLabel.top, kRealValue(51), kRealValue(10))]; +// hotView.layer.cornerRadius = 5; +// hotView.layer.masksToBounds = YES; +// hotView.backgroundColor = UIColorHex(#ED2A26); +// self.hotView = hotView; +// [self.topView addSubview:hotView]; + +// UIView * currentHot = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kRealValue(51) * 0.4, kRealValue(10))]; +// currentHot.backgroundColor = UIColorHex(#FF7E31); +// currentHot.layer.cornerRadius = 5; +// currentHot.layer.masksToBounds = YES; +// self.currentHot = currentHot; +// [hotView addSubview:currentHot]; + + self.topView.height = self.evaluationLabel.bottom + kRealValue(55); + + UIView * quesstionView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), self.topView.bottom - kRealValue(40), kScreenWidth - kRealValue(30), kRealValue(143))]; + quesstionView.backgroundColor = KWhiteColor; + quesstionView.layer.cornerRadius = 10.0; + quesstionView.layer.masksToBounds = YES; + self.quesstionView = quesstionView; + [self.mainScrollView addSubview:quesstionView]; + + self.pictureView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, quesstionView.width, 42)]; + + [quesstionView addSubview:self.pictureView]; + + UIImageView * pcitImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(22), kRealValue(19), 42, 42)]; + pcitImg.image = IMAGE_NAMED(@"pictureQuestion_Left"); + pcitImg.layer.cornerRadius = 21.0; + pcitImg.layer.masksToBounds = YES; + [self.pictureView addSubview:pcitImg]; + + + UILabel * picName = [[UILabel alloc] initWithFrame:CGRectMake(pcitImg.right + kRealValue(11), pcitImg.top + kRealValue(3) ,kRealValue(129), 14)]; + picName.textColor = UIColorHex(#333333); + picName.font = BOLDSYSTEMFONT(14); + picName.textAlignment = NSTextAlignmentLeft; + picName.text = @"图文咨询"; + [self.pictureView addSubview:picName]; + + UILabel * picDetailName = [[UILabel alloc] initWithFrame:CGRectMake(pcitImg.right + kRealValue(11),picName.bottom + kRealValue(7) ,200, 12)]; + picDetailName.textColor = UIColorHex(#666666); + picDetailName.font = MEDIUMFONT(11); + picDetailName.textAlignment = NSTextAlignmentLeft; + picDetailName.text = @"通过图片、文字的形式进行咨询"; + [self.pictureView addSubview:picDetailName]; + + UIButton * picBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.pictureView.right - kRealValue(15) - 70 ,pcitImg.top + kRealValue(8), 70, 26)]; + picBtn.layer.cornerRadius = 13; + picBtn.layer.masksToBounds = YES; + [picBtn setTitle:@"去咨询 >" forState:UIControlStateNormal]; + picBtn.titleLabel.font = MEDIUMFONT(12); + picBtn.backgroundColor = UIColorHex(#21BEBD); + [picBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.pictureBtn = picBtn; + [picBtn addTarget:self action:@selector(questionPictureAction) forControlEvents:UIControlEventTouchUpInside]; + [self.pictureView addSubview:picBtn]; + + //音视频 + self.videoView = [[UIView alloc] initWithFrame:CGRectMake(0, self.pictureView.bottom + kRealValue(24) , quesstionView.width, 42)]; + [quesstionView addSubview:self.videoView]; + + UIImageView * videoImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(22), kRealValue(19), 40, 40)]; + videoImg.image = IMAGE_NAMED(@"videQuestion_Left"); + videoImg.layer.cornerRadius = 20.0; + videoImg.layer.masksToBounds = YES; + [self.videoView addSubview:videoImg]; + + + UILabel * videoName = [[UILabel alloc] initWithFrame:CGRectMake(videoImg.right + kRealValue(11), videoImg.top + kRealValue(3) ,kRealValue(129), 14)]; + videoName.textColor = UIColorHex(#333333); + videoName.font = BOLDSYSTEMFONT(14); + videoName.textAlignment = NSTextAlignmentLeft; + videoName.text = @"视频咨询"; + [self.videoView addSubview:videoName]; + + UILabel * videoDetailName = [[UILabel alloc] initWithFrame:CGRectMake(videoImg.right + kRealValue(11),videoName.bottom + kRealValue(7) ,200, 12)]; + videoDetailName.textColor = UIColorHex(#666666); + videoDetailName.font = MEDIUMFONT(11); + videoDetailName.textAlignment = NSTextAlignmentLeft; + videoDetailName.text = @"通过语音视频电话的形式进行咨询"; + [self.videoView addSubview:videoDetailName]; + + UIButton * videoBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.videoView.right - kRealValue(15) - 70 ,videoImg.top + kRealValue(8), 70, 26)]; + videoBtn.layer.cornerRadius = 13; + videoBtn.layer.masksToBounds = YES; + [videoBtn setTitle:@"去咨询 >" forState:UIControlStateNormal]; + videoBtn.titleLabel.font = MEDIUMFONT(12); + videoBtn.backgroundColor = UIColorHex(#21BEBD); + self.videoBtn = videoBtn; + [videoBtn addTarget:self action:@selector(questionVideoAction) forControlEvents:UIControlEventTouchUpInside]; + [videoBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [self.videoView addSubview:videoBtn]; + + //医生简介 + + UIView * doctorView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), quesstionView.bottom + kRealValue(10), kScreenWidth - kRealValue(30), 100)]; + self.doctorView = doctorView; + doctorView.layer.cornerRadius = 10.0; + doctorView.layer.masksToBounds = YES; + doctorView.backgroundColor = KWhiteColor; + [self.mainScrollView addSubview:doctorView]; + + UILabel * doctorTitle = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16),kRealValue(20) ,100, 16)]; + doctorTitle.textColor = UIColorHex(#333333); + doctorTitle.font = BOLDSYSTEMFONT(16); + doctorTitle.textAlignment = NSTextAlignmentLeft; + doctorTitle.text = @"医生简介"; + [doctorView addSubview:doctorTitle]; + + self.doctorIndorLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16),doctorTitle.bottom + kRealValue(10) ,doctorView.width - kRealValue(32), 16)]; + self.doctorIndorLabel.textColor = CFontColor2; + self.doctorIndorLabel.font = BOLDSYSTEMFONT(13); + self.doctorIndorLabel.textAlignment = NSTextAlignmentLeft; + self.doctorIndorLabel.numberOfLines = 0; + self.doctorIndorLabel.text = @""; + [doctorView addSubview:self.doctorIndorLabel]; + + UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(0, self.doctorIndorLabel.bottom + kRealValue(15), doctorView.width, 1)]; + linv.backgroundColor = UIColorHex(#E0E0E0); + self.linView = linv; + [doctorView addSubview:linv]; + + UILabel * doctorGoodLab = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16) , linv.bottom + kRealValue(21) ,100, 16)]; + doctorGoodLab.textColor = UIColorHex(#333333); + doctorGoodLab.font = BOLDSYSTEMFONT(16); + doctorGoodLab.textAlignment = NSTextAlignmentLeft; + doctorGoodLab.text = @"医生擅长"; + self.doctorTitle = doctorGoodLab; + [doctorView addSubview:doctorGoodLab]; + + self.doctorGoodLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16),doctorGoodLab.bottom + kRealValue(18) ,doctorView.width - kRealValue(32), 16)]; + self.doctorGoodLabel.textColor = UIColorHex(#333333); + self.doctorGoodLabel.font = BOLDSYSTEMFONT(13); + self.doctorGoodLabel.textAlignment = NSTextAlignmentLeft; + self.doctorGoodLabel.numberOfLines = 0; + self.doctorGoodLabel.text = @""; + self.doctorGoodLabel.height = [HQCommonUtils getSpaceLabelHeight:self.doctorGoodLabel withStr:self.doctorGoodLabel.text withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightBold] withWidth:self.doctorIndorLabel.width withLineSpacing:5]; + [doctorView addSubview:self.doctorGoodLabel]; + + doctorView.height = self.doctorGoodLabel.bottom + kRealValue(27); + + self.homeTable = [[DoctorEvaluationTable alloc] initWithFrame:CGRectMake(kRealValue(15), self.doctorView.bottom + kRealValue(10), kScreenWidth - kRealValue(30), 410 ) style:UITableViewStyleGrouped]; + self.homeTable.scrollEnabled = false; + self.homeTable.backgroundColor = KWhiteColor; + self.homeTable.layer.cornerRadius = 10; + self.homeTable.layer.masksToBounds = true; + MJWeakSelf; + self.homeTable.moreBlock = ^{ + EvaluationListViewController * evalVC = [[EvaluationListViewController alloc] init]; + evalVC.doctorId = weakSelf.doctorId; + evalVC.type = 2; + [weakSelf.navigationController pushViewController:evalVC animated:YES]; + }; + [self.mainScrollView addSubview:self.homeTable]; + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), self.homeTable.bottom + kRealValue(20)); + +} + +- (void)createData { + + [self showMBProgressHUDWithString:@"加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"DOCTORAPI" NeedToken:@""]; + + [detailApi getDoctorExpertMainData:parmDic]; + +} + +- (void)getEvaluationList { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + [parmDic setObject:@"1" forKey:@"pageNo"]; + [parmDic setObject:@"4" forKey:@"pageSize"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"evluateAPI" NeedToken:@""]; + + [detailApi getExpertDoctorEvluateData:parmDic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + [EasyTextView showSuccessText:message]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"DOCTORAPI"]) { + + [self hiddenAllMBProgressHUD]; + + NSDictionary * parmDic = response; + + DoctorDetailModel * model = [DoctorDetailModel modelWithDictionary:parmDic]; + + if ([model.tfFollow integerValue] == 1) { + + self.collectBtn.selected = YES; + [self.collectBtn setImage:[UIImage imageWithColor:KWhiteColor] forState:UIControlStateNormal]; + + + }else + { + self.collectBtn.selected = NO; + [self.collectBtn setImage:IMAGE_NAMED(@"collectLove") forState:UIControlStateNormal]; + + } + self.doctorName.text = model.doctorName; + self.jobName.text = model.doctorTitle; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,model.photo]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.doctorImageView sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"doctorNoImage"]]; + +// //评分 +// NSMutableAttributedString * firstPart = [[NSMutableAttributedString alloc] initWithString:@"综合评价:"]; +// NSDictionary * firstAttributes = @{ NSFontAttributeName:[UIFont boldSystemFontOfSize:11],NSForegroundColorAttributeName:KWhiteColor}; +// [firstPart setAttributes:firstAttributes range:NSMakeRange(0,firstPart.length)]; +// +// NSMutableAttributedString * secondPart = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ / ",model.overallMerit]]; +// NSDictionary * secondAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:13],NSForegroundColorAttributeName:KWhiteColor}; +// [secondPart setAttributes:secondAttributes range:NSMakeRange(0,secondPart.length)]; +// [firstPart appendAttributedString:secondPart]; +// +// NSMutableAttributedString * thirdPart = [[NSMutableAttributedString alloc] initWithString:@"24小时回复率:"]; +// NSDictionary * thirdAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:11],NSForegroundColorAttributeName:KWhiteColor}; +// [thirdPart setAttributes:thirdAttributes range:NSMakeRange(0,thirdPart.length)]; +// [firstPart appendAttributedString:thirdPart]; +// +// NSMutableAttributedString * fourPart = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@%@ / ",model.responseRate,@"%"]]; +// NSDictionary * fourAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:13],NSForegroundColorAttributeName:KWhiteColor}; +// [fourPart setAttributes:fourAttributes range:NSMakeRange(0,fourPart.length)]; +// [firstPart appendAttributedString:fourPart]; +// +// NSMutableAttributedString * fivePart = [[NSMutableAttributedString alloc] initWithString:@"咨询量:"]; +// NSDictionary * fiveAttributes = @{ NSFontAttributeName:[UIFont boldSystemFontOfSize:11],NSForegroundColorAttributeName:KWhiteColor}; +// [fivePart setAttributes:fiveAttributes range:NSMakeRange(0,fivePart.length)]; +// [firstPart appendAttributedString:fivePart]; + + if ([model.overallMerit isEqualToString:@"null"]) { + model.overallMerit = @"0"; + } + if ([model.responseRate isEqualToString:@"null"]) { + model.responseRate = @"0"; + } + if ([model.messageNum isEqualToString:@"null"]) { + model.messageNum = @"0"; + } + + + self.evaluationLabel.text = [NSString stringWithFormat:@" 综合评价:%@ / 24小时回复率:%@%% / 咨询量:%@",model.overallMerit,model.responseRate, model.messageNum ] ; + + NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:self.evaluationLabel.text]; + [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] range:NSMakeRange(0, [self.evaluationLabel.text length])]; + NSTextAttachment *icon = [[NSTextAttachment alloc] init]; + UIImage *iconImage = [UIImage imageNamed:@"home_star"]; + [icon setBounds:CGRectMake(0, -3, 15, 15)]; + [icon setImage:iconImage]; + NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:icon]; + [attrStr insertAttributedString:string atIndex:0]; + self.evaluationLabel.attributedText = attrStr; + + NSMutableArray * sicksArray = [[NSMutableArray alloc] init]; + + for (DoctorGoodAtSicknessModel * sicModel in model.goodAtSicknessName) { + + [sicksArray addObject:sicModel.sicksName]; + } + self.tagList.tagDataArray = sicksArray; + self.hospitalName.text = [NSString stringWithFormat:@"%@ %@",model.resourceName,model.departmentName]; + CGFloat hospitalH = [HQCommonUtils getSpaceLabelHeight:self.hospitalName withStr:self.hospitalName.text withFont:[UIFont systemFontOfSize:13 weight:bold] withWidth:self.hospitalName.width withLineSpacing:3]; + self.hospitalName.height = hospitalH; + //布局 + self.doctorName.width = [HQCommonUtils getLengthFromText:model.doctorName andFontSize:23]; + self.jobName.left = self.doctorName.right + kRealValue(12); + + self.starImg.top = self.tagList.bottom + kRealValue(14); + +// CGSize attSize = [firstPart boundingRectWithSize:CGSizeMake(kScreenWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil].size; + self.evaluationLabel.frame = CGRectMake(0, self.tagList.bottom + kRealValue(16), kScreenWidth, 15); +// self.hotView.top = self.starImg.top + kRealValue(2); +// self.hotView.left = self.evaluationLabel.right + kRealValue(5); + self.topView.height = self.evaluationLabel.bottom + kRealValue(60); + self.quesstionView.top = self.topView.bottom - kRealValue(40); + if (!ValidStr(model.goodAt)) { + self.doctorGoodLabel.text = model.goodAt; + self.doctorGoodLabel.height = [HQCommonUtils getSpaceLabelHeight:self.doctorGoodLabel withStr:self.doctorGoodLabel.text withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightBold] withWidth:self.doctorGoodLabel.width withLineSpacing:2] ; + + } + if (!ValidStr(model.experience)) { + self.doctorIndorLabel.text = model.experience; + self.doctorIndorLabel.height = [HQCommonUtils getSpaceLabelHeight:self.doctorIndorLabel withStr:self.doctorIndorLabel.text withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightBold] withWidth:self.doctorIndorLabel.width withLineSpacing:2] ; + + } + + + //判断是否开始服务 + if ([model.doctorStatus intValue] != 3) { //非停诊 + self.gradientView.hidden = true; + if ([model.audioStatus intValue] == 1) { //开启 + + [self.videoBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.videoBtn.backgroundColor = UIColorHex(#21BEBD); + self.videoBtn.userInteractionEnabled = true; + + }else + { + [self.videoBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.videoBtn.backgroundColor = UIColor.grayColor; + self.videoBtn.userInteractionEnabled = false; + } + + } + else{ + self.videoBtn.userInteractionEnabled = false; + [self.videoBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [self.pictureBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.videoBtn.backgroundColor = UIColor.grayColor; + self.pictureBtn.backgroundColor = UIColor.grayColor; + self.pictureBtn.userInteractionEnabled = false; + self.gradientView.hidden = false; + } + + + self.linView.top = self.doctorIndorLabel.bottom + + kRealValue(10); + self.doctorTitle.top = self.linView.bottom + kRealValue(21); + self.doctorGoodLabel.top = self.doctorTitle.bottom + kRealValue(10); + self.doctorView.top = self.quesstionView.bottom + kRealValue(10); + self.doctorView.height = self.doctorGoodLabel.bottom + kRealValue(17); + [self getEvaluationList]; + + } + if ([tag isEqualToString:@"CollAPI"]) { + [self hiddenAllMBProgressHUD]; + [self createData]; + [EasyTextView showSuccessText:response]; + } + if ([tag isEqualToString:@"cancelAPI"]) { + [self hiddenAllMBProgressHUD]; + [self createData]; + [EasyTextView showSuccessText:response]; + + } + if ([tag isEqualToString:@"evluateAPI"]) { + + NSMutableArray * dataArray = [[NSMutableArray alloc] init]; + NSMutableArray * frameArray = [[NSMutableArray alloc] init]; + + for (NSDictionary * dic in response) { + + EvaluatListModel * evModel = [EvaluatListModel modelWithDictionary:dic]; + CGFloat H = [self calculateHeightForText:evModel.context withFont:SYSTEMFONT(12) width:kScreenWidth - kRealValue(30) - 31]; + [frameArray addObject:[NSString stringWithFormat:@"%.2f",H + kRealValue(50)]]; + [dataArray addObject:evModel]; + + } + __block float sum = 0.0f; + [frameArray enumerateObjectsUsingBlock:^(NSNumber *number, NSUInteger idx, BOOL *stop) { + sum += [number floatValue]; + }]; + NSLog(@"Sum: %f", sum); + self.homeTable.dataArray = dataArray; + + self.homeTable.frame = CGRectMake(kRealValue(15), self.doctorView.bottom + kRealValue(10), kScreenWidth - kRealValue(30), sum +kRealValue(50) ); + + if (!ValidArray(dataArray)) { + self.homeTable.hidden = true; + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), self.doctorView.bottom + kRealValue(30)); + + }else { + self.homeTable.hidden = false; + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), self.homeTable.bottom + kRealValue(30)); + } + + } + if ([tag isEqualToString:@"xuzhi_1"]) { + [self hiddenAllMBProgressHUD]; + NSDictionary * parmDic = response; + self.PictureknowDic = parmDic; + + } + if ([tag isEqualToString:@"xuzhi_2"]) { + [self hiddenAllMBProgressHUD]; + NSDictionary * parmDic = response; + self.AudioknowDic = parmDic; + + } +} + +// 方法:计算文本高度 +- (CGFloat)calculateHeightForText:(NSString *)text + withFont:(UIFont *)font + width:(CGFloat)width { + if (text == nil || font == nil) { + return 0; + } + + // 设置文本属性 + NSDictionary *attributes = @{NSFontAttributeName: font}; + + // 设置计算区域 + CGSize maxSize = CGSizeMake(width, CGFLOAT_MAX); + + // 计算文本的 bounding rect + CGRect textRect = [text boundingRectWithSize:maxSize + options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading + attributes:attributes + context:nil]; + + // 返回计算的高度 + return ceil(textRect.size.height); +} +- (void)collectHosptal:(UIButton *)collBtn { + + if (collBtn.selected == YES) { + + [self showMBProgressHUDWithString:@"取消关注中..." autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"cancelAPI" NeedToken:@""]; + + [detailApi getCancelCollectDoctorExpertData:parmDic]; + + }else + { + [self showMBProgressHUDWithString:@"关注中..." autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"CollAPI" NeedToken:@""]; + + [detailApi getCollectDoctorExpertData:parmDic]; + } + + + +} + +#pragma mark:去咨询 + +- (void)questionVideoAction { + + + self.questionType = 2; + + if ( ValidDict(self.AudioknowDic)) + { + QuestionMustKnowViewController * questionVC = [[QuestionMustKnowViewController alloc] init]; + questionVC.doctorId = self.doctorId; + questionVC.popType = 2; //1 图文 0 音视频 2 用户须知 + [self.navigationController pushViewController:questionVC animated:YES]; + }else + { + SelectedDoctorTimeVC * timeVC = [[SelectedDoctorTimeVC alloc] init]; + timeVC.doctorId = self.doctorId; + [self.navigationController pushViewController:timeVC animated:YES]; + } + +} + +- (void)questionPictureAction { + + self.questionType = 1; + + if ( ValidDict(self.PictureknowDic)) + { + QuestionMustKnowViewController * questionVC = [[QuestionMustKnowViewController alloc] init]; + questionVC.doctorId = self.doctorId; + questionVC.popType = 1; //1 图文 0 音视频 2 用户须知 + [self.navigationController pushViewController:questionVC animated:YES]; + }else + { + SelectedQuestionViewController * questionVC = [[SelectedQuestionViewController alloc] init]; + questionVC.doctorID = self.doctorId; + questionVC.questionType = self.questionType ; + [self.navigationController pushViewController:questionVC animated:YES]; + } + +} + +#pragma mark:请求须知 +- (void)getMustknowWithType:(NSString *)type { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:type forKey:@"type"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:[NSString stringWithFormat:@"xuzhi_%@",type] NeedToken:@""]; + + [detailApi getFoundPopConnetResult :parmDic]; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/FileDataDetailViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/FileDataDetailViewController.h new file mode 100644 index 0000000..be672bb --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/FileDataDetailViewController.h @@ -0,0 +1,16 @@ +// +// FileDataDetailViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FileDataDetailViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/FileDataDetailViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/FileDataDetailViewController.m new file mode 100644 index 0000000..a7e7502 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/FileDataDetailViewController.m @@ -0,0 +1,68 @@ +// +// FileDataDetailViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "FileDataDetailViewController.h" +#import "DetailTitleView.h" +#import "DetailUserInfoView.h" +#import "FileDataDeatilCenterView.h" +#import "BasicHealthInfoView.h" + +@interface FileDataDetailViewController () + +@end + +@implementation FileDataDetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = UIColorHex(#F3F3F5); + self.isHidenNaviBar = false; + self.navigationItem.title = @"档案详情"; + [self createUI]; + // Do any additional setup after loading the view. +} + +- (void)createUI { + + UIImageView * topImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 200)]; + topImage.image = [UIImage imageNamed:@"questionDetailBack"]; + [self.view addSubview:topImage]; + + + + UIScrollView * mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, kScreenWidth - kRealValue(30), kScreenHeight - kTopHeight )]; + mainScrollView.showsVerticalScrollIndicator = false; + mainScrollView.showsHorizontalScrollIndicator = false; + mainScrollView.layer.cornerRadius = 8.0; + mainScrollView.layer.masksToBounds = true; + mainScrollView.backgroundColor = KClearColor; + [self.view addSubview:mainScrollView]; + + DetailTitleView * titleview = [[DetailTitleView alloc] initWithFrame:CGRectMake(0, 0, mainScrollView.width, 33)]; + [mainScrollView addSubview:titleview]; + + //个人信息 + DetailUserInfoView * infoView = [[DetailUserInfoView alloc] initWithFrame:CGRectMake(0, titleview.bottom, kScreenWidth - kRealValue(30), kRealValue(103))]; + infoView.backgroundColor = KWhiteColor; + [mainScrollView addSubview:infoView]; + //问题 + FileDataDeatilCenterView * detailView = [[FileDataDeatilCenterView alloc] initWithFrame:CGRectMake(0, infoView.bottom + kRealValue(10), mainScrollView.width, 500)]; + [mainScrollView addSubview:detailView]; + detailView.height = detailView.questionH; + detailView.layer.cornerRadius = 10; + [HQCommonUtils addShadowToView:detailView]; + + BasicHealthInfoView * healthView = [[BasicHealthInfoView alloc] initWithFrame:CGRectMake(0,detailView.bottom + kRealValue(15), kScreenWidth - kRealValue(30), kRealValue(280))]; + healthView.backgroundColor = [UIColor whiteColor]; + healthView.layer.cornerRadius = 10.0; + [HQCommonUtils addShadowToView:healthView]; + [mainScrollView addSubview:healthView]; + + mainScrollView.contentSize = CGSizeMake(kScreenWidth- kRealValue(30), healthView.bottom + 50); + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalIntroViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalIntroViewController.h new file mode 100644 index 0000000..9d70418 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalIntroViewController.h @@ -0,0 +1,19 @@ +// +// HospitalIntroViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/14. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HospitalIntroViewController : HQBaseViewController + +@property (nonatomic, strong) NSString * hospitalID; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalIntroViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalIntroViewController.m new file mode 100644 index 0000000..fcba9ea --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalIntroViewController.m @@ -0,0 +1,307 @@ +// +// HospitalIntroViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/14. +// + +#import "HospitalIntroViewController.h" +#import "HospitalInfoModel.h" +#import "TYMapNavSheet.h" + +@interface HospitalIntroViewController () +{ + TYMapNavSheet * TYNavSheet; + +} +@property (nonatomic, strong) UILabel * hospitalNameLabel; +@property (nonatomic, strong) UILabel * lvLabel; +@property (nonatomic, strong) UILabel * adressLabel; +@property (nonatomic, strong) UIScrollView * mainScrollView; +@property (nonatomic, strong) UIImageView * hospitalImg; +@property (nonatomic, strong) UIView * jianjiesView; +@property (nonatomic, strong) YYLabel * conntLabel; +@property (nonatomic, strong) UIView * addressView; +@property (nonatomic, strong) UIImageView * addressImg; +@property (nonatomic, strong) HospitalInfoModel * model ; +@property (nonatomic, strong) UIButton * daohangBtn; + +@end + +@implementation HospitalIntroViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.view.backgroundColor = UIColorHex(#EEEEEE); + self.navigationItem.title = @"医院概况"; + [self createUI]; + [self createData]; +} + +- (void)createUI { + + + + + UIView * topview = [[UIView alloc] initWithFrame:CGRectMake(0, 0.5, kScreenWidth, kRealValue(126))]; + + topview.backgroundColor = UIColorHex(#21BEBD); + + [self.view addSubview:topview]; + + TYNavSheet = [[TYMapNavSheet alloc]init]; + + UIImageView * hospitalImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(16), kRealValue(9), 60, 60)]; + hospitalImg.layer.cornerRadius = 5.0f; + hospitalImg.layer.masksToBounds = YES; + hospitalImg.image = PLACEHOLD_IMG; + self.hospitalImg = hospitalImg; + [topview addSubview:hospitalImg]; + + self.hospitalNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.hospitalImg.right + kRealValue(20), kRealValue(16), kScreenWidth - kRealValue(96), 17)]; + + self.hospitalNameLabel.textColor = KWhiteColor; + + self.hospitalNameLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightHeavy]; + + self.hospitalNameLabel.textAlignment = NSTextAlignmentLeft; + + self.hospitalNameLabel.text = @""; + + [topview addSubview:self.hospitalNameLabel]; + + + self.lvLabel = [[UILabel alloc] initWithFrame:CGRectMake(hospitalImg.right + kRealValue(20), self.hospitalNameLabel.bottom + kRealValue(16), 60, 17)]; + + self.lvLabel.textColor = UIColorHex(#21BEBD); + + self.lvLabel.backgroundColor = KWhiteColor; + + self.lvLabel.layer.cornerRadius = 5; + + self.lvLabel.layer.masksToBounds = YES; + + self.lvLabel.font = [UIFont systemFontOfSize:11 weight:UIFontWeightBold]; + + self.lvLabel.textAlignment = NSTextAlignmentCenter; + + self.lvLabel.text = @""; + + CGFloat w = [HQCommonUtils getLengthFromText:self.lvLabel.text andFontSize:11]; + self.lvLabel.width = w + 16; + [topview addSubview:self.lvLabel]; + + + UIView * addressView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(16), self.hospitalImg.bottom + kRealValue(17), kScreenWidth - kRealValue(32), kRealValue(44))]; + addressView.backgroundColor = KWhiteColor; + addressView.layer.cornerRadius = 10; + addressView.layer.masksToBounds = YES; + [topview addSubview:addressView]; + self.addressView = addressView; + + UIImageView * addressImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(14), kRealValue(13), kRealValue(15))]; + addressImg.image = [UIImage imageNamed:@"hospatilAddress"]; + self.addressImg = addressImg; + [addressView addSubview:addressImg]; + + self.adressLabel = [[UILabel alloc] initWithFrame:CGRectMake(addressImg.right + kRealValue(5),kRealValue(10), kScreenWidth - kRealValue(96), 13)]; + + self.adressLabel.textColor = UIColorHex(#333333); + + self.adressLabel.font = MEDIUMFONT(13); + + self.adressLabel.textAlignment = NSTextAlignmentLeft; + + self.adressLabel.text = @""; + + self.adressLabel.numberOfLines = 0; + + [addressView addSubview:self.adressLabel]; + + UIButton * daohangBtn = [[UIButton alloc] initWithFrame:CGRectMake(addressView.width - 16 - 30, kRealValue(5), 30 , kRealValue(30))]; + [daohangBtn setTitle:@"导航" forState:UIControlStateNormal]; + [daohangBtn setTitleColor:UIColorHex(#3390FF) forState:UIControlStateNormal]; + daohangBtn.titleLabel.font = SYSTEMFONT(12); + self.daohangBtn = daohangBtn; + [daohangBtn addTarget:self action:@selector(daohangAction) forControlEvents:UIControlEventTouchUpInside]; + [addressView addSubview:daohangBtn]; + + self.mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(kRealValue(16) , self.addressView.bottom + kRealValue(10) , kScreenWidth - kRealValue(32) , kScreenHeight - addressView.bottom - kRealValue(10))]; + self.mainScrollView.backgroundColor = KClearColor; + self.mainScrollView.showsVerticalScrollIndicator = false; + self.mainScrollView.showsHorizontalScrollIndicator = false; + [self.view addSubview:self.mainScrollView]; + + + //医院简介 + + UIView * jianjiesView = [[UIView alloc] initWithFrame:CGRectMake(0 , 0, kScreenWidth - kRealValue(32), kRealValue(300))]; + jianjiesView.backgroundColor = KWhiteColor; + jianjiesView.layer.cornerRadius = 10; + jianjiesView.layer.masksToBounds = YES; + self.jianjiesView = jianjiesView; + [self.mainScrollView addSubview:jianjiesView]; + + UILabel * hosLabel = [[UILabel alloc] initWithFrame:CGRectMake( kRealValue(16),kRealValue(16), kScreenWidth - kRealValue(96), 17)]; + + hosLabel.textColor = UIColorHex(#333333); + + hosLabel.font = BOLDSYSTEMFONT(16); + + hosLabel.textAlignment = NSTextAlignmentLeft; + + hosLabel.text = @"医院简介"; + + [jianjiesView addSubview:hosLabel]; + + self.conntLabel = [[YYLabel alloc] initWithFrame:CGRectMake( kRealValue(16),hosLabel.bottom + kRealValue(21), jianjiesView.width - kRealValue(32), 13)]; + self.conntLabel.textAlignment = NSTextAlignmentLeft; + self.conntLabel.font = MEDIUMFONT(13); + self.conntLabel.textColor = UIColorHex(#333333); + self.conntLabel.numberOfLines = 0; + + // 查询文本排版结果 + // 计算文本尺寸YYTextLayout + // 显示文本排版结果 + [jianjiesView addSubview:self.conntLabel]; + + + + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), self.jianjiesView.bottom + kRealValue(50)); + +} + +- (void)createData { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.hospitalID forKey:@"id"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"DETAILAPI" NeedToken:@""]; + + [detailApi getHospatilDetail:parmDic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + [EasyTextView showSuccessText:message]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"DETAILAPI"]) { + + [self hiddenAllMBProgressHUD]; + + HospitalInfoModel * model = [HospitalInfoModel modelWithDictionary:response]; + self.model = model; + if (ValidStr(model.level)) { + self.lvLabel.hidden = YES; + }else + { + self.lvLabel.text = model.level; + CGFloat w = [HQCommonUtils getLengthFromText:self.lvLabel.text andFontSize:11]; + self.lvLabel.width = w + 16; + + } + + self.hospitalNameLabel.text = model.resourceName; + + + self.adressLabel.text = [NSString stringWithFormat:@"%@",model.address]; + + CGFloat addressH = [HQCommonUtils getSpaceLabelHeight:self.adressLabel withStr:self.adressLabel.text withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:self.adressLabel.width withLineSpacing:5]; + + self.adressLabel.height = addressH; + + self.addressView.height = self.adressLabel.bottom + kRealValue(10); + + self.addressImg.top = self.adressLabel.centerY - kRealValue(8); + + self.daohangBtn.top = self.addressView.height/2 - kRealValue(15); + + self.mainScrollView.frame = CGRectMake(kRealValue(16) , self.addressView.bottom + kRealValue(10) , kScreenWidth - kRealValue(32) , kScreenHeight - self.addressView.bottom - kRealValue(10)); + + //图片 + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,model.img]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + + [self.hospitalImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"hospitalNoimage"]]; + + NSMutableAttributedString *text = [NSMutableAttributedString new]; + // 添加文本 + NSString *title = model.resourceDetail; + + // //富文本 + // [NSString stringWithFormat:@"%@ ",title]; + NSAttributedString *attrStr = [[NSAttributedString alloc] initWithData:[[NSString stringWithFormat:@"%@ ",title] dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; + + [text appendAttributedString:attrStr]; + + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle setLineSpacing:6]; + [text addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])]; + + self.conntLabel.attributedText = text; + + CGSize maxSize = CGSizeMake(self.conntLabel.width, MAXFLOAT); + + YYTextLayout * layout = [YYTextLayout layoutWithContainerSize:maxSize text:self.conntLabel.attributedText]; + self.conntLabel.textLayout = layout; + CGFloat introHeight = layout.textBoundingSize.height; + self.conntLabel.width = maxSize.width; + // 记录真正的正确高度 + self.conntLabel.height = introHeight; + // 显示文本排版结果 + self.jianjiesView.height = kRealValue(91) + introHeight; + + + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(32), self.jianjiesView.bottom + kRealValue(20)); + + } +} + +- (void)daohangAction { + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + +// NSLog(@"经度:%f 纬度:%f", longitude, latitude); +// //1.将两个经纬度点转成投影点 +// MAMapPoint point1 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(model.latitude,model.longitude)); +// MAMapPoint point2 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(latitude,longitude)); +// //2.计算距离 +// CLLocationDistance distance = MAMetersBetweenMapPoints(point1,point2); + NSMutableDictionary * Dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"我的位置",@"startName",self.model.address,@"endName", nil]; + [TYNavSheet ShowMapNavSheetSuperView:self withLocationDic:Dic withstartCoor:CLLocationCoordinate2DMake(latitude, longitude) withendCoor:CLLocationCoordinate2DMake(self.model.latitude, self.model.longitude)]; + +} + +-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + [TYNavSheet actionSheetBtnClick:buttonIndex]; +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalJianjieViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalJianjieViewController.h new file mode 100644 index 0000000..29dcb0e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalJianjieViewController.h @@ -0,0 +1,16 @@ +// +// HospitalJianjieViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/1. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HospitalJianjieViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalJianjieViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalJianjieViewController.m new file mode 100644 index 0000000..2da1181 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalJianjieViewController.m @@ -0,0 +1,31 @@ +// +// HospitalJianjieViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/1. +// + +#import "HospitalJianjieViewController.h" + +@interface HospitalJianjieViewController () + +@end + +@implementation HospitalJianjieViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalMainViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalMainViewController.h new file mode 100644 index 0000000..86c1781 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalMainViewController.h @@ -0,0 +1,18 @@ +// +// HospitalMainViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HospitalMainViewController : HQBaseViewController + +@property (nonatomic, strong) NSString * hospitalID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalMainViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalMainViewController.m new file mode 100644 index 0000000..042a45a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/HospitalMainViewController.m @@ -0,0 +1,505 @@ +// +// HospitalMainViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "HospitalMainViewController.h" +#import "HospitalMainTableView.h" +#import "HospitalMainHeardView.h" +#import "HospitalMainDoctorCollectView.h" +#import "HospitalJianjieViewController.h" +#import "HospitalInfoModel.h" +#import "FoundExpertModel.h" +#import "EvaluatListModel.h" +#import "SearchZhuangJiaViewController.h" +#import "EvaluationListViewController.h" +#import "HospitalIntroViewController.h" +#import "TYMapNavSheet.h" +#import "ExpertMainViewController.h" + +@interface HospitalMainViewController () +{ + TYMapNavSheet * TYNavSheet; +} +@property (nonatomic, strong) HospitalMainTableView * homeTable; +@property (nonatomic, strong) UILabel * hospitalNameLabel; +@property (nonatomic, strong) UILabel * lvLabel; +@property (nonatomic, strong) UILabel * adressLabel; +@property (nonatomic, strong) UIButton * collectBtn; +@property (nonatomic, strong) UIScrollView * mainScrollView; +@property (nonatomic, strong) UIImageView * hospitalImg; +@property (nonatomic, strong) HospitalMainHeardView * heardView; +@property (nonatomic, strong) HospitalMainDoctorCollectView * collectView; +@property (nonatomic, strong) NSMutableArray * doctorArray; +@property (nonatomic, strong) NSMutableArray * evaluatArray; +@property (nonatomic, copy) NSString * hospitalName; +@property (nonatomic, copy) NSString * departmentNum; +@property (nonatomic, copy) NSString * doctorNum; + +@property (nonatomic, strong) UIImageView * locationImg; + +@property (nonatomic, strong) UIButton * mapNavButton; + +@property (nonatomic, strong) UIView * addressView; + +@property (nonatomic, strong)HospitalInfoModel * model; + + +@end + +@implementation HospitalMainViewController + +#pragma mark:懒加载 + +- (NSMutableArray *)doctorArray { + + if (!_doctorArray) { + _doctorArray = [[NSMutableArray alloc] init]; + } + return _doctorArray; +} + +- (NSMutableArray *)evaluatArray { + + if (!_evaluatArray) { + _evaluatArray = [[NSMutableArray alloc] init]; + } + return _evaluatArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.view.backgroundColor = UIColorHex(#EEEEEE); + self.navigationItem.title = @"医院主页"; + [self createUI]; + [self createData]; + [self createRoomsDoctor]; + [self createHopitalEvaluate]; +} + +- (void)createUI { + + UIView * topview = [[UIView alloc] initWithFrame:CGRectMake(0, 0.5, kScreenWidth, kRealValue(126))]; + + topview.backgroundColor = UIColorHex(#21BEBD); + + [self.view addSubview:topview]; + + + UIImageView * hospitalImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(16), kRealValue(9), 60, 60)]; + hospitalImg.layer.cornerRadius = 5.0f; + hospitalImg.layer.masksToBounds = YES; + hospitalImg.image = PLACEHOLD_IMG; + self.hospitalImg = hospitalImg; + [topview addSubview:hospitalImg]; + + + self.hospitalNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(hospitalImg.right + kRealValue(13), kRealValue(16), kScreenWidth - kRealValue(96), 17)]; + + self.hospitalNameLabel.textColor = KWhiteColor; + + self.hospitalNameLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightHeavy]; + + self.hospitalNameLabel.textAlignment = NSTextAlignmentLeft; + + self.hospitalNameLabel.text = @"---"; + + [topview addSubview:self.hospitalNameLabel]; + + + self.lvLabel = [[UILabel alloc] initWithFrame:CGRectMake(hospitalImg.right + kRealValue(13), self.hospitalNameLabel.bottom + kRealValue(16), 60, 17)]; + + self.lvLabel.textColor = UIColorHex(#21BEBD); + + self.lvLabel.backgroundColor = KWhiteColor; + + self.lvLabel.layer.cornerRadius = 5; + + self.lvLabel.layer.masksToBounds = YES; + + self.lvLabel.font = [UIFont systemFontOfSize:11 weight:UIFontWeightBold]; + + self.lvLabel.textAlignment = NSTextAlignmentCenter; + + self.lvLabel.text = @"三甲甲等"; + + CGFloat w = [HQCommonUtils getLengthFromText:self.lvLabel.text andFontSize:11]; + self.lvLabel.width = w + 16; + [topview addSubview:self.lvLabel]; + + + self.addressView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(16), hospitalImg.bottom + kRealValue(17), kScreenWidth - kRealValue(32), kRealValue(44))]; + self.addressView.layer.cornerRadius = 10; + self.addressView.layer.masksToBounds = true; + self.addressView.backgroundColor = KWhiteColor; + [topview addSubview:self.addressView]; + + UIImageView * locationImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(10), 19, 19)]; + locationImg.image = [UIImage imageNamed:@"hospital_location"]; + self.locationImg = locationImg; + [self.addressView addSubview:locationImg]; + + self.adressLabel = [[UILabel alloc] initWithFrame:CGRectMake(locationImg.right + kRealValue(7),kRealValue(10), self.addressView.width - kRealValue(90) , 32)]; + + self.adressLabel.textColor = CFontColor1; + + self.adressLabel.font = MEDIUMFONT(12); + + self.adressLabel.textAlignment = NSTextAlignmentLeft; + + self.adressLabel.text = @"0km | ---"; + + self.adressLabel.numberOfLines = 0; + + [self.addressView addSubview:self.adressLabel]; + + self.mapNavButton = [[UIButton alloc] initWithFrame:CGRectMake(self.addressView.right - kRealValue(66), 0, kRealValue(30), self.addressView.height)]; + [self.mapNavButton setTitle:@"导航" forState:UIControlStateNormal]; + [self.mapNavButton setTitleColor:UIColorHex(#3390FF) forState:UIControlStateNormal]; + self.mapNavButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + self.mapNavButton.titleLabel.font = SYSTEMFONT(12); + [self.mapNavButton addTarget:self action:@selector(mapNavLocationAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.addressView addSubview:self.mapNavButton]; + + self.collectBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth - kRealValue(15) - 60, kRealValue(32), 60, 26)]; + self.collectBtn.backgroundColor = KWhiteColor; + [self.collectBtn setTitle:@" 关注" forState:UIControlStateNormal]; + [self.collectBtn setTitle:@"已关注" forState:UIControlStateSelected]; + + self.collectBtn.titleLabel.font = SYSTEMFONT(12); + [self.collectBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [self.collectBtn addTarget:self action:@selector(collectHosptal:) forControlEvents:UIControlEventTouchUpInside]; + self.collectBtn.layer.cornerRadius = 13.0; + self.collectBtn.layer.masksToBounds = true; + [topview addSubview:self.collectBtn]; + + + self.mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(kRealValue(15), self.addressView.bottom + kRealValue(17), kScreenWidth - kRealValue(30), kScreenHeight - kTopHeight - 86)]; + self.mainScrollView.backgroundColor = KClearColor; + self.mainScrollView.showsVerticalScrollIndicator = false; + self.mainScrollView.showsHorizontalScrollIndicator = false; + [self.view addSubview:self.mainScrollView]; + + //医院简介 + self.heardView = [[HospitalMainHeardView alloc] initWithFrame:CGRectMake(0, 0, self.mainScrollView.width , 143)]; + self.heardView.layer.cornerRadius = 10; + self.heardView.layer.masksToBounds = YES; + self.heardView.backgroundColor = KWhiteColor; + MJWeakSelf + self.heardView.lookBlock = ^{ + [weakSelf lookHospitalJianjie]; + }; + [self.mainScrollView addSubview:self.heardView]; + //科室医生 + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; + layout.itemSize = CGSizeMake((kScreenWidth - 30)/2,75); + layout.scrollDirection = UICollectionViewScrollDirectionVertical; + layout.sectionInset = UIEdgeInsetsMake(5, 0, 0, 15); + layout.minimumInteritemSpacing =0; + layout.minimumLineSpacing =0; + + self.collectView = [[HospitalMainDoctorCollectView alloc]initWithFrame:CGRectMake(0, self.heardView.bottom + kRealValue(10),kScreenWidth - kRealValue(30), 261) collectionViewLayout:layout]; + self.collectView.layer.cornerRadius = 10; + self.collectView.layer.masksToBounds = true; + self.collectView.collSelectBlock = ^(NSString * _Nonnull doctorID, NSString * _Nonnull doctorName) { + ExpertMainViewController * serarchVC = [[ ExpertMainViewController alloc] init]; +// serarchVC.departmentId = @""; +// serarchVC.departmentName = @""; +// serarchVC.sickId = @""; +// serarchVC.hospitalId = weakSelf.hospitalID; +// serarchVC.doctorName = doctorName; +// serarchVC.hospitalName = weakSelf.hospitalName; +// serarchVC.type = 2; + serarchVC.doctorId = doctorID; + [weakSelf.navigationController pushViewController:serarchVC animated:YES]; + }; + self.collectView.doctorBlock = ^{ + [weakSelf lookMoreDoctor]; + }; + [self.mainScrollView addSubview:self.collectView]; +// + self.homeTable = [[HospitalMainTableView alloc] initWithFrame:CGRectMake(0, self.collectView.bottom + kRealValue(10), kScreenWidth - kRealValue(30), 600 ) style:UITableViewStyleGrouped]; + self.homeTable.scrollEnabled = false; + self.homeTable.layer.cornerRadius = 10; + self.homeTable.layer.masksToBounds = true; + self.homeTable.moreBlock = ^{ + EvaluationListViewController * evalVC = [[EvaluationListViewController alloc] init]; + evalVC.hospitalID = weakSelf.hospitalID; + [weakSelf.navigationController pushViewController:evalVC animated:YES]; + }; + [self.mainScrollView addSubview:self.homeTable]; + + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), self.homeTable.bottom + kRealValue(20)); + + + + +} + +- (void)createData { + + [self showMBProgressHUDWithString:@"加载中,请稍候..." autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.hospitalID forKey:@"id"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"DETAILAPI" NeedToken:@""]; + + [detailApi getHospatilDetail:parmDic]; + +} + +- (void)createRoomsDoctor { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:self.hospitalID forKey:@"hospitalId"]; + [parmDic setObject:@"1" forKey:@"pageNo"]; + [parmDic setObject:@"6" forKey:@"pageSize"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"ROOMSAPI" NeedToken:@""]; + + [detailApi getHospatilDetailRoomsDoctor:parmDic]; +} + +//评论 +- (void)createHopitalEvaluate { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.hospitalID forKey:@"hospitalId"]; + [parmDic setObject:@"1" forKey:@"pageNo"]; + [parmDic setObject:@"3" forKey:@"pageSize"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"EVALUATAPI" NeedToken:@""]; + + [detailApi getHospatilEvaluate:parmDic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + [EasyTextView showSuccessText:message]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"DETAILAPI"]) { + + [self hiddenAllMBProgressHUD]; + + HospitalInfoModel * model = [HospitalInfoModel modelWithDictionary:response]; + self.model = model; + if (ValidStr(model.level)) { + self.lvLabel.hidden = YES; + }else + { + self.lvLabel.text = model.level; + + } + + self.hospitalNameLabel.text = model.resourceName; + self.hospitalName = model.resourceName; + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + + //1.将两个经纬度点转成投影点 + MAMapPoint point1 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(model.latitude,model.longitude)); + MAMapPoint point2 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(latitude,longitude)); + //2.计算距离 + CLLocationDistance distance = MAMetersBetweenMapPoints(point1,point2); + self.adressLabel.text = [NSString stringWithFormat:@"%.2fkm | %@",distance/1000,model.address]; + + CGFloat addressH = [HQCommonUtils getSpaceLabelHeight:self.adressLabel withStr:self.adressLabel.text withFont:[UIFont systemFontOfSize:12 weight:UIFontWeightMedium] withWidth:self.adressLabel.width withLineSpacing:5]; + self.adressLabel.height = addressH; + self.addressView.height = addressH + kRealValue(20); + self.locationImg.top = self.addressView.height/2 - 10; + self.mapNavButton.frame = CGRectMake(self.addressView.right - kRealValue(66), 0, kRealValue(30), self.addressView.height); + self.mainScrollView.top = self.addressView.bottom + kRealValue(10); + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), self.homeTable.bottom + kRealValue(20)); + if ([model.tfFollow integerValue] == 1) { + + self.collectBtn.selected = YES; + [self.collectBtn setImage:[UIImage imageWithColor:KWhiteColor] forState:UIControlStateNormal]; + + + }else + { + self.collectBtn.selected = NO; + [self.collectBtn setImage:IMAGE_NAMED(@"collectLove") forState:UIControlStateNormal]; + + + } + self.heardView.hospitalString = model.synopsis; + //图片 + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,model.img]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + + [self.hospitalImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"hospitalNoimage"]]; + self.departmentNum = model.departmentNum; + self.doctorNum = model.doctorNum; + } + + if ([tag isEqualToString:@"ROOMSAPI"]) { + [self hiddenAllMBProgressHUD]; + NSArray * responseArray = response; + + for (NSDictionary * parmDic in responseArray) { + + DoctorListModel * model = [DoctorListModel modelWithDictionary:parmDic]; + [self.doctorArray addObject:model]; + } + NSDictionary * dic = @{@"departmentNum":[NSString stringWithFormat:@"%@",self.departmentNum],@"doctorNum":[NSString stringWithFormat:@"%@",self.doctorNum]}; + self.collectView.parmDic = dic; + if (!ValidArray(self.doctorArray)) { + self.collectView.hidden = YES; + self.collectView.height = 1; + self.homeTable.top = self.collectView.bottom + kRealValue(10); + }else + { + self.collectView.hidden = NO; + } + self.collectView.dataArray = self.doctorArray; + + } + + if ([tag isEqualToString:@"EVALUATAPI"]) { + [self hiddenAllMBProgressHUD]; + NSArray * array = response; + + for (NSDictionary * dic in array) { + + EvaluatListModel * evModel = [EvaluatListModel modelWithDictionary:dic]; + + [self.evaluatArray addObject:evModel]; + + } + if (!ValidArray(self.evaluatArray)) { + self.homeTable.hidden = YES; + }else + { + self.homeTable.hidden = NO; + } + self.homeTable.dataArray = self.evaluatArray; + } + + if ([tag isEqualToString:@"CollAPI"]) { + [self createData]; + [EasyTextView showSuccessText:response]; + } + if ([tag isEqualToString:@"cancelAPI"]) { + [self createData]; + [EasyTextView showSuccessText:response]; + + } + +} +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + +} + + +- (void)lookHospitalJianjie { + + + HospitalIntroViewController * jianjieVC = [[HospitalIntroViewController alloc] init]; + jianjieVC.hospitalID = self.hospitalID; + [self.navigationController pushViewController:jianjieVC animated:YES]; + +} + +- (void)lookMoreDoctor { + + SearchZhuangJiaViewController * serarchVC = [[ SearchZhuangJiaViewController alloc] init]; + serarchVC.departmentId = @""; + serarchVC.departmentName = @""; + serarchVC.sickId = @""; + serarchVC.hospitalId = self.hospitalID; + serarchVC.doctorName = @""; + serarchVC.hospitalName = self.hospitalName; + serarchVC.type = 2; + [self.navigationController pushViewController:serarchVC animated:YES]; + +} + +- (void)collectHosptal:(UIButton *)collBtn { + + if (collBtn.selected == YES) { + + [self showMBProgressHUDWithString:@"加载中..." autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.hospitalID forKey:@"hospitalId"]; + [parmDic setObject:@"1" forKey:@"pageNo"]; + [parmDic setObject:@"3" forKey:@"pageSize"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"cancelAPI" NeedToken:@""]; + + [detailApi getCancelCollectHospatil:parmDic]; + + }else + { + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.hospitalID forKey:@"hospitalId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"CollAPI" NeedToken:@""]; + + [detailApi getCollectHospatil:parmDic]; + } + + + +} + + +- (void)mapNavLocationAction:(UIButton *)navBtn { + + TYNavSheet = [[TYMapNavSheet alloc]init]; + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + +// NSLog(@"经度:%f 纬度:%f", longitude, latitude); +// //1.将两个经纬度点转成投影点 +// MAMapPoint point1 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(model.latitude,model.longitude)); +// MAMapPoint point2 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(latitude,longitude)); +// //2.计算距离 +// CLLocationDistance distance = MAMetersBetweenMapPoints(point1,point2); + NSMutableDictionary * Dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"我的位置",@"startName",self.model.address,@"endName", nil]; + [TYNavSheet ShowMapNavSheetSuperView:[HQCommonUtils getCurrentVC] withLocationDic:Dic withstartCoor:CLLocationCoordinate2DMake(latitude, longitude) withendCoor:CLLocationCoordinate2DMake(self.model.latitude, self.model.longitude)]; + +} + +-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + [TYNavSheet actionSheetBtnClick:buttonIndex]; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/LookModficalFileViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/LookModficalFileViewController.h new file mode 100644 index 0000000..ea204b1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/LookModficalFileViewController.h @@ -0,0 +1,38 @@ +// +// LookModficalFileViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/27. +// + +#import "HQBaseViewController.h" +#import "QuestionDiseaseInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LookModficalFileViewController : HQBaseViewController + +@property (nonatomic, strong) QuestionDiseaseInfoModel * infomodel; + +@property (nonatomic, strong) diseaseModel * disModel; + +@property (nonatomic, strong) NSString * upID; + +@property (nonatomic, strong) NSString * downID; + +@property (nonatomic, strong) NSString * schedulingDateId; + +@property (nonatomic, strong) NSString * doctorID; + +@property (nonatomic, assign) NSInteger questionType; + +@property (nonatomic, assign) NSInteger isJump; // 2. 下一步 + +@property (nonatomic, strong) NSString * danganID; + +@property (nonatomic, assign) BOOL isEdit; // 2. 是否是编辑 + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/LookModficalFileViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/LookModficalFileViewController.m new file mode 100644 index 0000000..dcb07ff --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/LookModficalFileViewController.m @@ -0,0 +1,1040 @@ +// +// LookModficalFileViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/27. +// + +#import "LookModficalFileViewController.h" +#import "DetailTitleView.h" +#import "DetailUserInfoView.h" +#import "FileDataDeatilCenterView.h" +#import "BasicHealthInfoView.h" +#import "SelectedFileDateCenterView.h" +#import "QuestionItemTable.h" +#import "HQPhotoCollectView.h" +#import "FileDataModel.h" +#import "LookFileDataModel.h" +#import "SOSGroupIMModel.h" +#import "DoctorMainViewController.h" +#import "TZPhotoPreviewController.h" +#import +#import "TZImagePickerController.h" +#import "TZImageManager.h" +#import +#import "TZAssetModel.h" +#import "XLPhotoBrowser.h" + +#define maxPhotoesCount 9 +#define maxColumnNum 4 + +@interface LookModficalFileViewController () +{ + + + BOOL _isSelectOriginalPhoto; + +} +@property (nonatomic, strong) UIImagePickerController *imagePickerVc;//图片选择器 +@property (nonatomic, strong) UIAlertController *sheetVC;//选择框 +@property (nonatomic, strong) NSMutableArray * selectedPhotos;//选择的照片数 +@property (nonatomic, strong) NSMutableArray * selectedAssets; +@property (nonatomic, strong) NSMutableArray * againSelectPhoto; + +@property (nonatomic, strong) NSMutableArray * imageUrlArray; +@property (nonatomic, assign) NSInteger chixuTime; +@property (nonatomic, strong) DetailTitleView * titleview; + +@property (nonatomic, assign) NSInteger number; +@property (nonatomic, strong) SelectedFileDateCenterView * detailView ; +@property (nonatomic, strong) UIButton * bottomBtn ; +@property (nonatomic, strong) UIButton * useBtn ; +@property (nonatomic, strong) UIButton * saveAnduseBtn ; + + +@property (nonatomic, strong) LookFileDataModel * lookModel; + +@property (nonatomic, strong) UIScrollView * mainScrollView; + +@property (nonatomic, strong) NSString * selectedDanganID; + +@end + +@implementation LookModficalFileViewController + +#pragma mark:懒加载 + +- (NSMutableArray *)selectedAssets +{ + if (!_selectedAssets) + { + _selectedAssets = [[NSMutableArray alloc] init]; + } + return _selectedAssets; +} + +- (NSMutableArray *)selectedPhotos +{ + if (!_selectedPhotos) + { + _selectedPhotos = [[NSMutableArray alloc] init]; + } + return _selectedPhotos; +} + +- (NSMutableArray *)imageUrlArray { + + if (!_imageUrlArray) + { + _imageUrlArray = [[NSMutableArray alloc] init]; + } + return _imageUrlArray; + +} + +- (NSMutableArray *)againSelectPhoto { + + if (!_againSelectPhoto) + { + _againSelectPhoto = [[NSMutableArray alloc] init]; + } + return _againSelectPhoto; + +} + +-(UIAlertController *)sheetVC{ + + if (!_sheetVC) { + + _sheetVC=[UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; + + UIAlertAction *takePhoto=[UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [self takePhoto]; + }]; + UIAlertAction *chosePhoto=[UIAlertAction actionWithTitle:@"去相册中选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [self pushImagePickerController]; + }]; + UIAlertAction *cancel=[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + + [_sheetVC addAction:takePhoto]; + [_sheetVC addAction:chosePhoto]; + [_sheetVC addAction:cancel]; + } + return _sheetVC; + +} + +- (UIImagePickerController *)imagePickerVc { + if (_imagePickerVc == nil) { + _imagePickerVc = [[UIImagePickerController alloc] init]; + _imagePickerVc.delegate = self; + // set appearance / 改变相册选择页的导航栏外观 + _imagePickerVc.navigationBar.barTintColor = self.navigationController.navigationBar.barTintColor; + _imagePickerVc.navigationBar.tintColor = self.navigationController.navigationBar.tintColor; + UIBarButtonItem *tzBarItem, *BarItem; + if (kiOS9Later) { + tzBarItem = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[TZImagePickerController class]]]; + BarItem = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UIImagePickerController class]]]; + } else { + tzBarItem = [UIBarButtonItem appearanceWhenContainedIn:[TZImagePickerController class], nil]; + BarItem = [UIBarButtonItem appearanceWhenContainedIn:[UIImagePickerController class], nil]; + } + NSDictionary *titleTextAttributes = [tzBarItem titleTextAttributesForState:UIControlStateNormal]; + [BarItem setTitleTextAttributes:titleTextAttributes forState:UIControlStateNormal]; + } + return _imagePickerVc; +} + +- (void)takePhoto { + AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; + if ((authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied)) { + // 无相机权限 做一个友好的提示 + UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"无法使用相机" message:@"请在iPhone的""设置-隐私-相机""中允许访问相机" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"设置", nil]; + [alert show]; + // 拍照之前还需要检查相册权限 + } else if ([[TZImageManager manager] authorizationStatusAuthorized] == 2) { // 已被拒绝,没有相册权限,将无法保存拍的照片 + UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"设置", nil]; + alert.tag = 1; + [alert show]; + } else if ([[TZImageManager manager] authorizationStatusAuthorized] == 0) { // 正在弹框询问用户是否允许访问相册,监听权限状态 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + return [self takePhoto]; + }); + } else { // 调用相机 + UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera; + if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) { + self.imagePickerVc.sourceType = sourceType; + _imagePickerVc.modalPresentationStyle = UIModalPresentationOverCurrentContext; + [self presentViewController:_imagePickerVc animated:YES completion:nil]; + } else { + } + } +} + +#pragma mark - TZImagePickerController + +- (void)pushImagePickerController { + + TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:maxPhotoesCount - self.number columnNumber:maxColumnNum delegate:self pushPhotoPickerVc:YES]; + +#pragma mark - 四类个性化设置,这些参数都可以不传,此时会走默认设置 + imagePickerVc.isSelectOriginalPhoto = _isSelectOriginalPhoto; + + // 1.设置目前已经选中的图片数组 + imagePickerVc.selectedAssets = _selectedAssets; // 目前已经选中的图片数组 + imagePickerVc.allowTakePicture =NO; // 不允许在内部显示拍照按钮 + + // 3. 设置是否可以选择视频/图片/原图 + imagePickerVc.allowPickingVideo = NO; + imagePickerVc.allowPickingImage = YES; + imagePickerVc.allowPickingOriginalPhoto = YES; + imagePickerVc.allowPickingGif = NO; + + // 4. 照片排列按修改时间升序 + imagePickerVc.sortAscendingByModificationDate = YES; + + + /// 5. 单选模式,maxImagesCount为1时才生效 + imagePickerVc.showSelectBtn = NO; + imagePickerVc.allowCrop = NO; + imagePickerVc.needCircleCrop =NO; + imagePickerVc.circleCropRadius = 100; + /* + [imagePickerVc setCropViewSettingBlock:^(UIView *cropView) { + cropView.layer.borderColor = [UIColor redColor].CGColor; + cropView.layer.borderWidth = 2.0; + }];*/ + + //imagePickerVc.allowPreview = NO; +#pragma mark - 到这里为止 + + // You can get the photos by block, the same as by delegate. + // 你可以通过block或者代理,来得到用户选择的照片. + [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray *photos, NSArray *assets, BOOL isSelectOriginalPhoto) { + + }]; + + [self presentViewController:imagePickerVc animated:YES completion:nil]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = UIColorHex(#F3F3F5); + self.isHidenNaviBar = false; + self.navigationItem.title = @"档案详情"; + self.number = 0; + self.isEdit = false; + [self createUI]; + [self getFileDetail]; + //网络状态监听 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(detailViewFrameChage:) + name:@"FrameChage" + object:nil]; + + + // Do any additional setup after loading the view. +} + +- (void)createUI { + + UIImageView * topImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 200)]; + topImage.image = [UIImage imageNamed:@"questionDetailBack"]; + [self.view addSubview:topImage]; + + + + UIScrollView * mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, kScreenWidth - kRealValue(30), kScreenHeight - kTopHeight )]; + mainScrollView.showsVerticalScrollIndicator = false; + mainScrollView.showsHorizontalScrollIndicator = false; + mainScrollView.layer.cornerRadius = 8.0; + mainScrollView.layer.masksToBounds = true; + self.mainScrollView = mainScrollView; + mainScrollView.backgroundColor = KClearColor; + [self.view addSubview:mainScrollView]; + + DetailTitleView * titleview = [[DetailTitleView alloc] initWithFrame:CGRectMake(0, 0, mainScrollView.width, 33)]; + self.titleview = titleview; + [mainScrollView addSubview:titleview]; + + //个人信息 + DetailUserInfoView * infoView = [[DetailUserInfoView alloc] initWithFrame:CGRectMake(0, titleview.bottom, kScreenWidth - kRealValue(30), kRealValue(103))]; + infoView.backgroundColor = KWhiteColor; + infoView.model = self.infomodel; + [mainScrollView addSubview:infoView]; + //问题 + SelectedFileDateCenterView * detailView = [[SelectedFileDateCenterView alloc] initWithFrame:CGRectMake(0, infoView.bottom + kRealValue(10), mainScrollView.width, 500)]; + detailView.questionOneDelegate = self; + detailView.photoDelegate = self; + [mainScrollView addSubview:detailView]; + detailView.height = detailView.questionH; + detailView.layer.cornerRadius = 10; + self.detailView = detailView; + [HQCommonUtils addShadowToView:detailView]; + + + + + UIButton * bottomBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(15) , detailView.bottom + kRealValue(28), self.mainScrollView.width/2 - kRealValue(30) , 35)]; + [bottomBtn addTarget:self action:@selector(editAction:) forControlEvents:UIControlEventTouchUpInside]; + bottomBtn.backgroundColor = KWhiteColor; + [bottomBtn setTitle:@"编辑" forState:UIControlStateNormal]; + bottomBtn.layer.cornerRadius = 17; + bottomBtn.layer.masksToBounds = YES; + bottomBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + bottomBtn.layer.borderWidth = 1.0; + bottomBtn.titleLabel.font = SYSTEMFONT(14); + [bottomBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.bottomBtn = bottomBtn; + [self.mainScrollView addSubview:bottomBtn]; + + + UIButton * useBtn = [[UIButton alloc] initWithFrame:CGRectMake( self.mainScrollView.width/2 + kRealValue(15) , detailView.bottom + kRealValue(28), self.mainScrollView.width/2 - kRealValue(30) , 35)]; + [useBtn addTarget:self action:@selector(sureAction) forControlEvents:UIControlEventTouchUpInside]; + useBtn.backgroundColor = UIColorHex(#21BEBD); + [useBtn setTitle:@"直接使用" forState:UIControlStateNormal]; + useBtn.layer.cornerRadius = 17; + useBtn.layer.masksToBounds = YES; + useBtn.titleLabel.font = SYSTEMFONT(14); + [useBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.useBtn = useBtn; + [self.mainScrollView addSubview:useBtn]; + + + //保存并使用 + UIButton * saveAnduseBtn = [[UIButton alloc] initWithFrame:CGRectMake( self.mainScrollView.width/2 + kRealValue(15) , detailView.bottom + kRealValue(28), self.mainScrollView.width/2 - kRealValue(30) , 35)]; + [saveAnduseBtn addTarget:self action:@selector(saveAnduseAction) forControlEvents:UIControlEventTouchUpInside]; + saveAnduseBtn.backgroundColor = UIColorHex(#21BEBD); + [saveAnduseBtn setTitle:@"保存并使用" forState:UIControlStateNormal]; + saveAnduseBtn.layer.cornerRadius = 17; + saveAnduseBtn.centerX = self.view.centerX; + saveAnduseBtn.layer.masksToBounds = YES; + saveAnduseBtn.titleLabel.font = SYSTEMFONT(14); + [saveAnduseBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.saveAnduseBtn = saveAnduseBtn; + self.saveAnduseBtn.hidden = true; + [self.mainScrollView addSubview:saveAnduseBtn]; + + mainScrollView.contentSize = CGSizeMake(kScreenWidth- kRealValue(30), bottomBtn.bottom + 50); + + if (self.isEdit == false) { + + self.detailView.userInteractionEnabled = false; + + self.detailView.isEdit = self.isEdit; + } + +} + +- (void)detailViewFrameChage:(NSNotification *)nofi { + + self.detailView.height = [nofi.object floatValue]; + self.bottomBtn.top = self.detailView.bottom + kRealValue(28); + self.useBtn.top = self.bottomBtn.top; + self.saveAnduseBtn.top = self.detailView.bottom + kRealValue(28); + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth- kRealValue(30), self.bottomBtn.bottom + 50); + +} + +- (void)questionOneSelectedResult:(NSString *)result { + if ([result containsString:@"一周内"]) { + self.chixuTime = 1; + } + if ([result containsString:@"一个月内"]) { + self.chixuTime = 2; + } + if ([result containsString:@"半年内"]) { + self.chixuTime = 3; + } + if ([result containsString:@"半年以上"]) { + self.chixuTime = 4; + } + +} + + +- (void)choosePhotoCell:(NSIndexPath *)index withCollectview:(UICollectionView *)collectView withIntab:(NSInteger )tableAtNumber +{ + + if (self.selectedPhotos.count == 9) + { + return; + } + + if (index.row == _selectedPhotos.count) { + [self presentViewController:self.sheetVC animated:YES completion:nil]; + + } else { // preview photos or video / 预览照片或者视频 + + + + id asset = _selectedPhotos[index.item]; + if ([asset isKindOfClass:[NSString class]]) { + NSMutableArray * phonsArray = [[NSMutableArray alloc] init]; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,asset]; + + NSString * str1 = @"\\"; + // + photo = [photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [phonsArray addObject:encodedString3]; + + XLPhotoBrowser *browser = [XLPhotoBrowser showPhotoBrowserWithImages:phonsArray currentImageIndex:0]; + browser.browserStyle = XLPhotoBrowserStyleSimple; // 微博样式 + // 自定义pageControl的一些属性 + browser.pageDotColor = [UIColor purpleColor]; ///< 此属性针对动画样式的pagecontrol无效 + browser.currentPageDotColor = [UIColor greenColor]; + browser.pageControlStyle = XLPhotoBrowserPageControlStyleClassic;///< 修改底部pagecontrol的样式为系统样式,默认是弹性动画的样式 + }else + { + TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithSelectedAssets:_selectedAssets selectedPhotos:_selectedAssets index:_selectedAssets.count - 1]; + imagePickerVc.maxImagesCount = maxPhotoesCount; + imagePickerVc.allowPickingOriginalPhoto = YES; + imagePickerVc.isSelectOriginalPhoto = _isSelectOriginalPhoto; + [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray *photos, NSArray *assets, BOOL isSelectOriginalPhoto) { + self.selectedPhotos = [NSMutableArray arrayWithArray:photos]; + self.selectedAssets = [NSMutableArray arrayWithArray:assets]; + _isSelectOriginalPhoto = isSelectOriginalPhoto; + self.detailView.photoArray = self.selectedPhotos; + // collectView.contentSize = CGSizeMake(self.selectedPhotos.count * ( 12 + 60), 84); + }]; + [self presentViewController:imagePickerVc animated:YES completion:nil]; + } + + } + + +} + + +#pragma mark--- UIImageImagePickerController delegate + +- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + [picker dismissViewControllerAnimated:YES completion:nil]; + NSString *type = [info objectForKey:UIImagePickerControllerMediaType]; + if ([type isEqualToString:@"public.image"]) { + TZImagePickerController *tzImagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:self]; + tzImagePickerVc.sortAscendingByModificationDate = YES; + [tzImagePickerVc showProgressHUD]; + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + // save photo and get asset / 保存图片,获取到asset + [[TZImageManager manager] savePhotoWithImage:image completion:^(PHAsset *asset, NSError *error) { + if (error) { + [tzImagePickerVc hideProgressHUD]; + } else { + + [[TZImageManager manager] getCameraRollAlbum:NO allowPickingImage:YES needFetchAssets:NO completion:^(TZAlbumModel *model) { + [[TZImageManager manager] getAssetsFromFetchResult:model.result allowPickingVideo:NO allowPickingImage:YES completion:^(NSArray *models) { + [tzImagePickerVc hideProgressHUD]; + TZAssetModel *assetModel = [models firstObject]; + if (tzImagePickerVc.sortAscendingByModificationDate) { + assetModel = [models lastObject]; + } + [self refreshCollectionViewWithAddedAsset:assetModel.asset image:image]; + }]; + }]; + } + }]; + + + } +} + + +- (void)refreshCollectionViewWithAddedAsset:(id)asset image:(UIImage *)image { + [self.selectedAssets addObject:asset]; + [self.selectedPhotos addObject:image]; + +// .pictureArray = [NSMutableArray arrayWithArray:self.selectedPhotos]; +// model.assetArray = [NSMutableArray arrayWithArray:self.selectedAssets]; +// [self.dataArray replaceObjectAtIndex:self.number withObject:model]; + self.detailView.photoArray = self.selectedPhotos; +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { + if ([picker isKindOfClass:[UIImagePickerController class]]) { + [picker dismissViewControllerAnimated:YES completion:nil]; + } +} + + +#pragma mark - TZImagePickerControllerDelegate + +/// User click cancel button +/// 用户点击了取消 +- (void)tz_imagePickerControllerDidCancel:(TZImagePickerController *)picker { +} + +// The picker should dismiss itself; when it dismissed these handle will be called. +// If isOriginalPhoto is YES, user picked the original photo. +// You can get original photo with asset, by the method [[TZImageManager manager] getOriginalPhotoWithAsset:completion:]. +// The UIImage Object in photos default width is 828px, you can set it by photoWidth property. +// 这个照片选择器会自己dismiss,当选择器dismiss的时候,会执行下面的代理方法 +// 如果isSelectOriginalPhoto为YES,表明用户选择了原图 +// 你可以通过一个asset获得原图,通过这个方法:[[TZImageManager manager] getOriginalPhotoWithAsset:completion:] +// photos数组里的UIImage对象,默认是828像素宽,你可以通过设置photoWidth属性的值来改变它 +- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto { + [self.selectedPhotos addObjectsFromArray:photos]; + [self.againSelectPhoto addObjectsFromArray:photos]; + [self.selectedAssets addObjectsFromArray:assets]; + _isSelectOriginalPhoto = isSelectOriginalPhoto; + +// [self.dataArray replaceObjectAtIndex:self.number withObject:model]; + self.detailView.photoArray = self.selectedPhotos; + // 1.打印图片名字 + [self printAssetsName:assets]; +} + + + +#pragma mark - Private + +/// 打印图片名字 +- (void)printAssetsName:(NSArray *)assets { + NSString *fileName; + for (id asset in assets) { + if ([asset isKindOfClass:[PHAsset class]]) { + PHAsset *phAsset = (PHAsset *)asset; + fileName = [phAsset valueForKey:@"filename"]; + } else if ([asset isKindOfClass:[ALAsset class]]) { + ALAsset *alAsset = (ALAsset *)asset; + fileName = alAsset.defaultRepresentation.filename;; + } + } +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + return UIInterfaceOrientationMaskPortrait; +} + +#pragma mark===按钮点击方法 + +//删除按钮 +- (void)delectUserChoosePhoto:(NSInteger)indexTag withIntab:(NSInteger)tableAtNumber +{ + [self.selectedPhotos removeObjectAtIndex:indexTag]; + self.detailView.photoArray = self.selectedPhotos; +} + +//提交按钮 +-(void)editAction:(UIButton *)sender{ + self.isEdit = true; + self.useBtn.hidden = true; + self.bottomBtn.hidden = true; + self.saveAnduseBtn.hidden = false; + self.detailView.userInteractionEnabled = true; + self.detailView.isEdit = self.isEdit; + +} + +#pragma mark - 网络请求 + +- (void)getFileDetail { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + if (!ValidStr(self.danganID) ) { + [parmDic setObject:self.danganID forKey:@"id"]; + }else + { + [parmDic setObject:self.disModel.tfper_id forKey:@"id"]; + } + + JKCQAPI * upApi = [[JKCQAPI alloc] init:self tag:@"FILEDATA" NeedToken:@""]; + + [upApi GetLookModficalMemberShipFileData:parmDic]; + +} + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self hiddenAllMBProgressHUD]; + + if ([tag isEqualToString:@"FILEDATA"]) { + + LookFileDataModel * model = [LookFileDataModel modelWithDictionary:response]; + self.lookModel = model; + self.titleview.timeString = model.createTime; + if (!ValidStr(model.image)) { + NSArray * imageArray = [model.image componentsSeparatedByString:@","]; + self.number = imageArray.count; + [self.selectedPhotos addObjectsFromArray:imageArray]; + } + self.detailView.model = model; + self.detailView.photoArray = self.selectedPhotos; + self.detailView.isEdit = self.isEdit; + self.selectedDanganID = model.file_id; + [self questionOneSelectedResult:model.haveTimeValue]; + } + + if ([tag isEqualToString:@"UPLOADAPI"]) + { + + NSArray * array = response; + + [self.imageUrlArray addObjectsFromArray:array]; + [self hiddenAllMBProgressHUD]; + [self submitFileIpputData]; + } + + if ([tag isEqualToString:@"ADDFILE"]) + { + [self hiddenAllMBProgressHUD]; + [EasyTextView showSuccessText:response]; + [self.navigationController popViewControllerAnimated:YES]; + } + if ([tag isEqualToString:@"ageinADDFILE"]) { + [self hiddenAllMBProgressHUD]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init] ; + + [parmDic setObject:self.upID forKey:@"memberId"]; + [parmDic setObject:self.doctorID forKey:@"toAccount"]; + [parmDic setObject:self.downID forKey:@"medicalRecordsId"]; + if (self.questionType == 1) { + [self showMBProgressHUDWithString:@"等待发起会话" autoHidden:NO]; + JKCQAPI * questionApi = [[JKCQAPI alloc] init:self tag:@"PICTURE" NeedToken:@""]; + [questionApi postPictureQuestionAPI:parmDic]; + + } + + if (self.questionType == 2) { + //音视频 + // schedulingDateId 时间id memberId 家庭成员id toAccount医生id contentType 2 medicalRecordsId 档案id + [self showMBProgressHUDWithString:@"预约中请等待~" autoHidden:NO]; + [parmDic setObject:@"2" forKey:@"contentType"]; + [parmDic setObject:self.schedulingDateId forKey:@"schedulingDateId"]; + + JKCQAPI * questionApi = [[JKCQAPI alloc] init:self tag:@"VIDEO" NeedToken:@""]; + [questionApi postVideoQuestionAPI:parmDic]; + } + } + if ([tag isEqualToString:@"saveAPI"]) { + + NSArray * array = response; + + [self.imageUrlArray addObjectsFromArray:array]; + + [self editFileSendQuestion]; + + + } + + + if ([tag isEqualToString:@"PICTURE"]) { + + + if ([ESCTUIManager TUIUserStatus] == false) { + + + [self loginImAccount]; + return; + } + NSDictionary * resDic = response; + + SOSGroupIMModel * model = [SOSGroupIMModel modelWithDictionary:response]; + + ChatViewController * chatVC = [[ChatViewController alloc] init]; + chatVC.isGroupID = YES; + chatVC.chatID = model.groupId; + chatVC.member = model.member; + chatVC.disModel = self.infomodel; + chatVC.pictureEnd_id = model.sosEnd_id; + chatVC.questionType = 2; + chatVC.JumpType = self.isJump; + chatVC.dangan_id = self.selectedDanganID; + chatVC.kuaisuzixun = [NSString stringWithFormat:@"%ld",self.isJump]; + chatVC.isVideo = NO; + [self.navigationController pushViewController:chatVC animated:YES]; + + } + + if ([tag isEqualToString:@"VIDEO"]) { + + NSString * resultString = response; + DoctorMainViewController * doctorVC = [[DoctorMainViewController alloc] init]; + doctorVC.yuyue_id = resultString; + doctorVC.popType = 1; + [self.navigationController pushViewController:doctorVC animated:YES]; + } + if ([tag isEqualToString:@"loginIMAPI"]) { + + NSDictionary * pamrDic = response; + + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + [ESCTUIManager loginInitTUISDKAppidWith:[model.sdkAppId intValue] UserID:model.userId userSig:model.userSig]; + [self sureAction]; + + } +} + +- (void)loginImAccount { + + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"loginIMAPI" NeedToken:nil]; + [proctocolApi GetIMLoginAccount:nil]; + +} + +- (void)submitFileIpputData { + + + //档案名称 + if (ValidStr(self.detailView.fileNameField.text)) { + [EasyTextView showErrorText:@"请输入档案名称"]; + return; + } + NSString * fileName = self.detailView.fileNameField.text; + //本次问题持续多久 + if (self.chixuTime < 0) { + [EasyTextView showErrorText:@"请选择持续时间"]; + return; + } + //描述问题 + if (ValidStr(self.detailView.inputQuestion1View.text)) { + [EasyTextView showErrorText:@"请输入问题描述"]; + return; + } + NSString * questionString = self.detailView.inputQuestion1View.text; + //图片 + NSString * imageString; + if (self.imageUrlArray.count >0) { + + imageString = [NSString stringWithFormat:@"%@,%@",self.lookModel.image,[ self.imageUrlArray componentsJoinedByString:@","]] ; + }else + { + imageString = self.lookModel.image; + } + //是否就诊过 + if (self.detailView.jiuzhenIsAction == NO ) { + [EasyTextView showErrorText:@"请选择是否就诊过"]; + return; + } + NSString * isJiuzhen = self.detailView.jiuzhenSelected == YES ? @"1":@"0"; + //就诊过医院 + NSString * hospationString = @""; + NSString * hospationResult = @""; + if ([isJiuzhen integerValue] == 1) + { + hospationString = self.detailView.hospitalField.text ; + //诊断结果 + hospationResult = self.detailView.sicksField.text; + } + //期待得到的帮助 + NSString * helpString = self.detailView.helpInputView.text; + //是否允许专家查看体检报告 + if (self.detailView.reportIsAction == NO ) { + [EasyTextView showErrorText:@"请选择是否允许查看报告"]; + return; + } +// BOOL lookReport = self.detailView.reportSelected; + NSString * lookReport = self.detailView.reportSelected == YES ? @"1":@"0"; + +// //是否允许专家查看你的基本信息 +// if (self.detailView.healthIsAction == NO ) { +// [EasyTextView showErrorText:@"请选择是否允许专家查看基本健康信息"]; +// return; +// } +// BOOL basicHealth = self.detailView.healthSelected; + //成员id + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:fileName forKey:@"recordsName"]; + [parmDic setObject:questionString forKey:@"medicalDescribe"]; + [parmDic setObject:imageString forKey:@"image"]; + [parmDic setObject:@(self.chixuTime) forKey:@"haveTime"]; + [parmDic setObject:helpString forKey:@"desire"]; + [parmDic setObject:self.infomodel.memberId_id forKey:@"memberId"]; + [parmDic setObject:isJiuzhen forKey:@"tfLook"]; + [parmDic setObject:@"0" forKey:@"tfPermission"]; + [parmDic setObject:hospationString forKey:@"lookOffice"]; + [parmDic setObject:hospationResult forKey:@"lookMedicalName"]; + + + [self showMBProgressHUDWithString:@"档案上传中,请稍候..." autoHidden:NO]; + JKCQAPI * addApi = [[JKCQAPI alloc] init:self tag:@"ADDFILE" NeedToken:@""]; + + [addApi PostMemberShipFileData:parmDic]; + + +} +#pragma mark:直接使用 +- (void)sureAction { + + if ([[self.useBtn currentTitle] isEqualToString:@"直接使用"]) { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init] ; + + [parmDic setObject:self.upID forKey:@"memberId"]; + [parmDic setObject:self.doctorID forKey:@"toAccount"]; + [parmDic setObject:self.downID forKey:@"medicalRecordsId"]; + if (self.questionType == 1) { + self.isJump = 2; + [self showMBProgressHUDWithString:@"等待发起会话" autoHidden:NO]; + JKCQAPI * questionApi = [[JKCQAPI alloc] init:self tag:@"PICTURE" NeedToken:@""]; + [questionApi postPictureQuestionAPI:parmDic]; + + } + + if (self.questionType == 2) { + //音视频 + // schedulingDateId 时间id memberId 家庭成员id toAccount医生id contentType 2 medicalRecordsId 档案id + [self showMBProgressHUDWithString:@"预约中请等待~" autoHidden:NO]; + [parmDic setObject:@"2" forKey:@"contentType"]; + [parmDic setObject:self.schedulingDateId forKey:@"schedulingDateId"]; + + JKCQAPI * questionApi = [[JKCQAPI alloc] init:self tag:@"VIDEO" NeedToken:@""]; + [questionApi postVideoQuestionAPI:parmDic]; + } + }else //确认提交 + { + if (self.selectedPhotos.count <= 0) { + + [EasyTextView showErrorText:@"请选择图片"]; + return; + } + + if (ValidStr(self.detailView.fileNameField.text)) { + [EasyTextView showErrorText:@"请输入档案名称"]; + return; + } + NSString * fileName = self.detailView.fileNameField.text; + //本次问题持续多久 + if (self.chixuTime < 0) { + [EasyTextView showErrorText:@"请选择持续时间"]; + return; + } + //描述问题 + if (ValidStr(self.detailView.inputQuestion1View.text)) { + [EasyTextView showErrorText:@"请输入问题描述"]; + return; + } + NSString * questionString = self.detailView.inputQuestion1View.text; + //图片 + + NSString * imageString = [ self.imageUrlArray componentsJoinedByString:@","]; + //是否就诊过 + if (self.detailView.jiuzhenIsAction == NO ) { + [EasyTextView showErrorText:@"请选择是否就诊过"]; + return; + } + //就诊过医院 + //诊断结果 + //期待得到的帮助 + //是否允许专家查看体检报告 + if (self.detailView.reportIsAction == NO ) { + [EasyTextView showErrorText:@"请选择是否允许查看报告"]; + return; + } + + [self showMBProgressHUDWithString:@"上传中" autoHidden:NO]; + + [self.againSelectPhoto removeAllObjects]; + + JKCQAPI * upApi = [[JKCQAPI alloc] init:self tag:@"UPLOADAPI" NeedToken:@""]; + for (int i = 0; i < self.selectedPhotos.count; i ++ ) { + + if ([self.selectedPhotos[i] isKindOfClass:[NSString class]]) { + + + }else + { + [self.againSelectPhoto addObject:self.selectedPhotos[i]]; + } + } + + + [upApi postImageArrayUpload:self.againSelectPhoto withParmDic:@{@"biz":@""}.mutableCopy]; + + } +} +#pragma mark:保存并使用 +- (void)saveAnduseAction { + + self.isJump = 2; + if (ValidStr(self.detailView.fileNameField.text)) { + [EasyTextView showErrorText:@"请输入档案名称"]; + return; + } + //本次问题持续多久 + if (self.chixuTime < 0) { + [EasyTextView showErrorText:@"请选择持续时间"]; + return; + } + //描述问题 + if (ValidStr(self.detailView.inputQuestion1View.text)) { + [EasyTextView showErrorText:@"请输入问题描述"]; + return; + } + NSString * questionString = self.detailView.inputQuestion1View.text; + //图片 + NSString * imageString = [ self.imageUrlArray componentsJoinedByString:@","]; + //是否就诊过 + if (self.detailView.jiuzhenIsAction == NO ) { + [EasyTextView showErrorText:@"请选择是否就诊过"]; + return; + } + //就诊过医院 + //诊断结果 + //期待得到的帮助 + //是否允许专家查看体检报告 +// if (self.detailView.reportIsAction == NO ) { +// [EasyTextView showErrorText:@"请选择是否允许查看报告"]; +// return; +// } + + [self showMBProgressHUDWithString:@"上传中" autoHidden:NO]; + + [self.againSelectPhoto removeAllObjects]; + + if (self.selectedPhotos.count > 0) { + + JKCQAPI * upApi = [[JKCQAPI alloc] init:self tag:@"saveAPI" NeedToken:@""]; + [self.imageUrlArray removeAllObjects]; + for (int i = 0; i < self.selectedPhotos.count; i ++ ) { + + if ([self.selectedPhotos[i] isKindOfClass:[NSString class]]) { + + [self.imageUrlArray addObject:self.selectedPhotos[i]]; + + }else + { + [self.againSelectPhoto addObject:self.selectedPhotos[i]]; + } + } + + if (self.againSelectPhoto.count > 0) { + + [upApi postImageArrayUpload:self.againSelectPhoto withParmDic:@{@"biz":@""}.mutableCopy]; + } + else + { + [self editFileSendQuestion]; + } + }else + { + [self editFileSendQuestion]; + } +} + +- (void)editFileSendQuestion { + + //档案名称 + if (ValidStr(self.detailView.fileNameField.text)) { + [EasyTextView showErrorText:@"请输入档案名称"]; + return; + } + NSString * fileName = self.detailView.fileNameField.text; + //本次问题持续多久 + if (self.chixuTime < 0) { + [EasyTextView showErrorText:@"请选择持续时间"]; + return; + } + //描述问题 + if (ValidStr(self.detailView.inputQuestion1View.text)) { + [EasyTextView showErrorText:@"请输入问题描述"]; + return; + } + NSString * questionString = self.detailView.inputQuestion1View.text; + //图片 + NSString * imageString; + if (self.imageUrlArray.count > 0) { + imageString = [NSString stringWithFormat:@"%@",[ self.imageUrlArray componentsJoinedByString:@","]] ; + + }else + { + //图片变动 + imageString = [self.selectedPhotos componentsJoinedByString:@","]; + } + + + //是否就诊过 + if (self.detailView.jiuzhenIsAction == NO ) { + [EasyTextView showErrorText:@"请选择是否就诊过"]; + return; + } + NSString * isJiuzhen = self.detailView.jiuzhenSelected == YES ? @"1":@"0"; + //就诊过医院 + NSString * hospationString = @""; + NSString * hospationResult = @""; + if ([isJiuzhen integerValue] == 1) + { + hospationString = self.detailView.hospitalField.text ; + //诊断结果 + hospationResult = self.detailView.sicksField.text; + } + //期待得到的帮助 + NSString * helpString = self.detailView.helpInputView.text; + //是否允许专家查看体检报告 + if (self.detailView.reportIsAction == NO ) { + [EasyTextView showErrorText:@"请选择是否允许查看报告"]; + return; + } +// BOOL lookReport = self.detailView.reportSelected; + NSString * lookReport = self.detailView.reportSelected == YES ? @"1":@"0"; + +// //是否允许专家查看你的基本信息 +// if (self.detailView.healthIsAction == NO ) { +// [EasyTextView showErrorText:@"请选择是否允许专家查看基本健康信息"]; +// return; +// } +// BOOL basicHealth = self.detailView.healthSelected; + //成员id + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:fileName forKey:@"recordsName"]; + [parmDic setObject:questionString forKey:@"medicalDescribe"]; + [parmDic setObject:imageString forKey:@"image"]; + [parmDic setObject:@(self.chixuTime) forKey:@"haveTime"]; + [parmDic setObject:helpString forKey:@"desire"]; + [parmDic setObject:self.infomodel.memberId_id forKey:@"memberId"]; + [parmDic setObject:isJiuzhen forKey:@"tfLook"]; + [parmDic setObject:lookReport forKey:@"tfPermission"]; + [parmDic setObject:hospationString forKey:@"lookOffice"]; + [parmDic setObject:hospationResult forKey:@"lookMedicalName"]; + [parmDic setObject:self.disModel.tfper_id forKey:@"id"]; + + + [self showMBProgressHUDWithString:@"更新档案中,请稍候..." autoHidden:NO]; + JKCQAPI * addApi = [[JKCQAPI alloc] init:self tag:@"ageinADDFILE" NeedToken:@""]; + + [addApi PostMemberShipFileData:parmDic]; + + +} +//点击屏幕空白处 +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + //回收键盘,两者方式 + //UITextView *textView = (UITextView*)[self.view viewWithTag:1001]; + //[textView resignFirstResponder]; + [self.view endEditing:YES]; +} + +//在线时票据过期:此时您需要生成新的 userSig,并再次重新调用初始化。 +- (void)onKickedOffline { + + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + [ESCTUIManager outLoginTUISDK]; + KPostNotification(KNotificationLoginStateChange, @NO); + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuesstionDetailLookFileViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuesstionDetailLookFileViewController.h new file mode 100644 index 0000000..7168b14 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuesstionDetailLookFileViewController.h @@ -0,0 +1,18 @@ +// +// QuesstionDetailLookFileViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/18. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QuesstionDetailLookFileViewController : HQBaseViewController + +@property (nonatomic, copy) NSString * danganID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuesstionDetailLookFileViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuesstionDetailLookFileViewController.m new file mode 100644 index 0000000..169bad4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuesstionDetailLookFileViewController.m @@ -0,0 +1,580 @@ +// +// QuesstionDetailLookFileViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/18. +// + +#import "QuesstionDetailLookFileViewController.h" +#import "DetailTitleView.h" +#import "DetailUserInfoView.h" +#import "FileDataDeatilCenterView.h" +#import "BasicHealthInfoView.h" +#import "SelectedFileDateCenterView.h" +#import "QuestionItemTable.h" +#import "HQPhotoCollectView.h" +#import "FileDataModel.h" +#import "LookFileDataModel.h" +#import "SOSGroupIMModel.h" +#import "DoctorReportModel.h" +#import "XLPhotoBrowser.h" + +@interface QuesstionDetailLookFileViewController () + +@property (nonatomic, strong) DetailTitleView * titleview; + + +@property (nonatomic, strong) LookFileDataModel * lookModel; + +@property (nonatomic, strong) UIScrollView * mainScrollView; +@property (nonatomic, strong) DetailUserInfoView * userView ; +@property (nonatomic, strong) UIView * questionView ; +@property (nonatomic, strong) UILabel * oneAnswerLabel ; +@property (nonatomic, strong) UILabel * twoAnswerLabel; +@property (nonatomic, strong) UITextView * twoAnswerTextView ; +@property (nonatomic, strong) UITextView * fourAnswerTextView ; + +@property (nonatomic, strong) UILabel * pictureNumberLabel ; + +@property (nonatomic, strong) UIView * picShowView ; +@property (nonatomic, strong) UIView * hospationView ; +@property (nonatomic, strong) UILabel * hospationNameLabel ; +@property (nonatomic, strong) UILabel * sicksLabel; +@property (nonatomic, strong) NSMutableArray * healthArray; +@property (nonatomic, strong) UILabel * fourLabel; +@property (nonatomic, strong) UILabel * nameAnswerLabel; +@property (nonatomic, strong) UIView * healthView ; +@property (nonatomic, strong) UIView * pictureView ; +@property (nonatomic, strong) UIView * fourBackView ; + +@property (nonatomic, strong) UILabel * sickLeftLabel; +@property (nonatomic, strong) NSMutableArray * imageURLArray; + +@end + +@implementation QuesstionDetailLookFileViewController + +- (NSMutableArray *)healthArray { + + if (!_healthArray) { + _healthArray = [[NSMutableArray alloc] init]; + } + return _healthArray; + +} + +- (NSMutableArray *)imageURLArray { + + if (!_imageURLArray) { + _imageURLArray = [[NSMutableArray alloc] init]; + } + return _imageURLArray; + +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = UIColorHex(#E0E0E0); + self.isHidenNaviBar = false; + self.navigationItem.title = @"档案详情"; + [self createUI]; + [self getFileDetail]; + //网络状态监听 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(detailViewFrameChage:) + name:@"FrameChage" + object:nil]; + // Do any additional setup after loading the view. +} + +- (void)detailViewFrameChage:(NSNotification *)nofi { + +// self.detailView.height = [nofi.object floatValue]; +// self.bottomBtn.top = self.detailView.bottom + kRealValue(28); +// self.mainScrollView.contentSize = CGSizeMake(kScreenWidth- kRealValue(30), self.bottomBtn.bottom + 50); + +} + +- (void)createUI { + + UIImageView * topImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 200)]; + topImage.image = [UIImage imageNamed:@"questionDetailBack"]; + [self.view addSubview:topImage]; + + + + UIScrollView * mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, kScreenWidth - kRealValue(30), kScreenHeight - kTopHeight )]; + mainScrollView.showsVerticalScrollIndicator = false; + mainScrollView.showsHorizontalScrollIndicator = false; + mainScrollView.layer.cornerRadius = 8.0; + mainScrollView.layer.masksToBounds = true; + self.mainScrollView = mainScrollView; + mainScrollView.backgroundColor = KClearColor; + [self.view addSubview:mainScrollView]; + + DetailTitleView * titleview = [[DetailTitleView alloc] initWithFrame:CGRectMake(0, 0, mainScrollView.width, 33)]; + self.titleview = titleview; + [mainScrollView addSubview:titleview]; + + DetailUserInfoView * infoView = [[DetailUserInfoView alloc] initWithFrame:CGRectMake(0, titleview.bottom, kScreenWidth - kRealValue(30), kRealValue(103))]; + infoView.backgroundColor = KWhiteColor; + self.userView = infoView; + [mainScrollView addSubview:infoView]; + //问题UI + + + UIView * questionView = [[UIView alloc] initWithFrame:CGRectMake(0, infoView.bottom + kRealValue(10), mainScrollView.width, 500)]; + [mainScrollView addSubview:questionView]; + questionView.layer.cornerRadius = 10; + self.questionView = questionView; + self.questionView.backgroundColor = KWhiteColor; + [mainScrollView addSubview:self.questionView]; + + + UILabel * fileNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), kRealValue(24), mainScrollView.width - kRealValue(40), 15)]; + fileNameLabel.text = @"1.档案名称"; + fileNameLabel.textColor = CFontColor1; + fileNameLabel.font = MEDIUMFONT(14); + fileNameLabel.textAlignment = NSTextAlignmentLeft; + [questionView addSubview:fileNameLabel]; + + UILabel * nameAnswerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,fileNameLabel.bottom + kRealValue(15), mainScrollView.width , 35)]; + nameAnswerLabel.text = @" "; + nameAnswerLabel.textColor = CFontColor1; + nameAnswerLabel.font = SYSTEMFONT(12); + nameAnswerLabel.textAlignment = NSTextAlignmentLeft; + nameAnswerLabel.backgroundColor = RGBA(128, 153, 153,0.2); + self.nameAnswerLabel = nameAnswerLabel; + [questionView addSubview:nameAnswerLabel]; + UIView * nameLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 3, 35)]; + nameLineView.backgroundColor = UIColorHex(#809999); + [nameAnswerLabel addSubview:nameLineView]; + + //问题2 + + UILabel * oneLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), nameAnswerLabel.bottom + kRealValue(24), mainScrollView.width - kRealValue(40), 15)]; + oneLabel.text = @"2.本次问题持续多久了?"; + oneLabel.textColor = CFontColor1; + oneLabel.font = MEDIUMFONT(14); + oneLabel.textAlignment = NSTextAlignmentLeft; + [questionView addSubview:oneLabel]; + + UILabel * oneAnswerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,oneLabel.bottom + kRealValue(15), mainScrollView.width , 35)]; + oneAnswerLabel.text = @" 一周内"; + oneAnswerLabel.textColor = CFontColor1; + oneAnswerLabel.font = SYSTEMFONT(12); + oneAnswerLabel.textAlignment = NSTextAlignmentLeft; + oneAnswerLabel.backgroundColor = RGBA(128, 153, 153,0.2); + self.oneAnswerLabel = oneAnswerLabel; + [questionView addSubview:oneAnswerLabel]; + UIView * leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 3, 35)]; + leftView.backgroundColor = UIColorHex(#809999); + [oneAnswerLabel addSubview:leftView]; + + //问题3 + UILabel * questionThreeLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), oneAnswerLabel.bottom + kRealValue(16), mainScrollView.width - kRealValue(40), 15)]; + questionThreeLabel.text = @"3.咨询人的问题"; + questionThreeLabel.textColor = CFontColor1; + questionThreeLabel.font = MEDIUMFONT(14); + questionThreeLabel.textAlignment = NSTextAlignmentLeft; + [questionView addSubview:questionThreeLabel]; + + self.twoAnswerTextView = [[UITextView alloc] initWithFrame:CGRectMake(kRealValue(15),questionThreeLabel.bottom + kRealValue(16), mainScrollView.width - kRealValue(30), 70)]; + self.twoAnswerTextView .text = @"--"; + self.twoAnswerTextView .textColor = CFontColor1; + self.twoAnswerTextView .font = SYSTEMFONT(12); + self.twoAnswerTextView .textAlignment = NSTextAlignmentLeft; + self.twoAnswerTextView .backgroundColor = UIColorHex(#F3F3F5); + self.twoAnswerTextView.layer.cornerRadius = 10; + self.twoAnswerTextView.editable=NO; + self.twoAnswerTextView.layer.masksToBounds = YES; + [questionView addSubview:self.twoAnswerTextView ]; + +// //照片view + UIView * pictureView = [[UIView alloc] initWithFrame:CGRectMake(0, self.twoAnswerTextView.bottom + kRealValue(16), mainScrollView.width, 100)]; + [mainScrollView addSubview:pictureView]; + self.pictureView = pictureView; + self.pictureView.backgroundColor = KWhiteColor; + [questionView addSubview:self.pictureView]; + + + UILabel * pictureLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(kRealValue(15)), 0, 125, 12)]; + pictureLabel.text = @"检查报告或者患处照片"; + pictureLabel.textColor = CFontColor1; + pictureLabel.font = SYSTEMFONT(12); + pictureLabel.textAlignment = NSTextAlignmentLeft; + [self.pictureView addSubview:pictureLabel]; + + UILabel * pictureRearLabel = [[UILabel alloc] initWithFrame:CGRectMake(pictureLabel.right + 5, 0, mainScrollView.width - kRealValue(40), 12)]; + pictureRearLabel.text = @"(仅自己和医生可见)"; + pictureRearLabel.textColor = CFontColor1; + pictureRearLabel.font = SYSTEMFONT(11); + pictureLabel.textAlignment = NSTextAlignmentLeft; + [self.pictureView addSubview:pictureRearLabel]; + + self.pictureNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(mainScrollView.width - 110,0,100, 15)]; + self.pictureNumberLabel.text = @"0/9"; + self.pictureNumberLabel.textColor = UIColorHex(#999999); + self.pictureNumberLabel.font = SYSTEMFONT(14); + self.pictureNumberLabel.textAlignment = NSTextAlignmentRight; + [self.pictureView addSubview: self.pictureNumberLabel]; + + UIView * picShowView = [[UIView alloc] initWithFrame:CGRectMake(0, self.pictureNumberLabel.bottom + 14, mainScrollView.width, 70)]; + picShowView.backgroundColor = KWhiteColor; + self.picShowView = picShowView; + [self.pictureView addSubview:picShowView]; +// + //医院view + UIView * fourBackView = [[UIView alloc] initWithFrame:CGRectMake(0, self.pictureView.bottom + kRealValue(16), mainScrollView.width, 50)]; + self.fourBackView = fourBackView; + [questionView addSubview:fourBackView]; + + + UILabel * threeLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), 0, mainScrollView.width - kRealValue(40), 15)]; + threeLabel.text = @"4.咨询人是否去医院就诊过?"; + threeLabel.textColor = CFontColor1; + threeLabel.font = MEDIUMFONT(14); + threeLabel.textAlignment = NSTextAlignmentLeft; + [fourBackView addSubview:threeLabel]; + + UILabel * twoAnswerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,threeLabel.bottom + kRealValue(16), mainScrollView.width, 35)]; + twoAnswerLabel.text = @" 就诊过"; + twoAnswerLabel.textColor = CFontColor1; + twoAnswerLabel.font = SYSTEMFONT(12); + self.twoAnswerLabel = twoAnswerLabel; + twoAnswerLabel.textAlignment = NSTextAlignmentLeft; + twoAnswerLabel.backgroundColor = RGBA(128, 153, 153, 0.2); + [fourBackView addSubview:twoAnswerLabel]; + + UIView * leftThreeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 3, 35)]; + leftThreeView.backgroundColor = UIColorHex(#809999); + [twoAnswerLabel addSubview:leftThreeView]; +// mainScrollView.contentSize = CGSizeMake(kScreenWidth- kRealValue(30), bottomBtn.bottom + 50); + + self.hospationView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(10), self.twoAnswerLabel.bottom + kRealValue(15), mainScrollView.width - kRealValue(20), 70)]; + self.hospationView.layer.cornerRadius = 10; + self.hospationView.hidden = true; + self.hospationView.layer.masksToBounds = YES; + [fourBackView addSubview: self.hospationView]; + + + + UILabel * hosLeftLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(12), mainScrollView.width - kRealValue(40), 13)]; + hosLeftLabel.text = @"就诊医院及科室:"; + hosLeftLabel.textColor = UIColorHex(#666666); + hosLeftLabel.font = SYSTEMFONT(13); + hosLeftLabel.textAlignment = NSTextAlignmentLeft; + CGFloat hosW = [HQCommonUtils getLengthFromText: @"就诊医院及科室:" andFontSize:13]; + hosLeftLabel.width = hosW; + [self.hospationView addSubview:hosLeftLabel]; + + + self.hospationNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(hosLeftLabel.right + kRealValue(5), kRealValue(12), mainScrollView.width - hosW - 20, 13)]; + self.hospationNameLabel.text = @"--"; + self.hospationNameLabel.textColor = UIColorHex(#333333); + self.hospationNameLabel.font = SYSTEMFONT(14); + self.hospationNameLabel.textAlignment = NSTextAlignmentLeft; + self.hospationNameLabel.numberOfLines = 0; + [self.hospationView addSubview: self.hospationNameLabel]; + + // + UILabel * sickLeftLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15),hosLeftLabel.bottom + kRealValue(17), mainScrollView.width - kRealValue(40), 13)]; + sickLeftLabel.text = @"诊断的疾病名:"; + sickLeftLabel.textColor = UIColorHex(#666666); + sickLeftLabel.font = SYSTEMFONT(13); + sickLeftLabel.textAlignment = NSTextAlignmentLeft; + self.sickLeftLabel = sickLeftLabel; + CGFloat sickW = [HQCommonUtils getLengthFromText: @"诊断的疾病名:" andFontSize:13]; + sickLeftLabel.width = hosW; + [self.hospationView addSubview:sickLeftLabel]; + + + self.sicksLabel = [[UILabel alloc] initWithFrame:CGRectMake(sickLeftLabel.right + kRealValue(5), hosLeftLabel.bottom + kRealValue(17), mainScrollView.width - sickW - 20, 13)]; + self.sicksLabel.text = @"--"; + self.sicksLabel.textColor = UIColorHex(#333333); + self.sicksLabel.font = SYSTEMFONT(14); + self.sicksLabel.textAlignment = NSTextAlignmentLeft; + self.sicksLabel.numberOfLines = 0; + [self.hospationView addSubview: self.sicksLabel]; + + //得到帮助 + UILabel * fourLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), self.fourBackView.bottom + kRealValue(21), mainScrollView.width - kRealValue(40), 15)]; + fourLabel.text = @"5.咨询人期望得到的帮助?"; + fourLabel.textColor = CFontColor1; + fourLabel.font = SYSTEMFONT(14); + fourLabel.textAlignment = NSTextAlignmentLeft; + self.fourLabel = fourLabel; + [questionView addSubview:fourLabel]; + + self.fourAnswerTextView = [[UITextView alloc] initWithFrame:CGRectMake(kRealValue(20),fourLabel.bottom + kRealValue(16), mainScrollView.width - kRealValue(40), 70)]; + self.fourAnswerTextView .text = @""; + self.fourAnswerTextView .textColor = CFontColor1; + self.fourAnswerTextView .font = SYSTEMFONT(12); + self.fourAnswerTextView .textAlignment = NSTextAlignmentLeft; + self.fourAnswerTextView .backgroundColor = UIColorHex(#F3F3F5); + self.fourAnswerTextView.layer.cornerRadius = 10; + self.fourAnswerTextView.editable=NO; + self.fourAnswerTextView.layer.masksToBounds = YES; + [questionView addSubview:self.fourAnswerTextView ]; + + questionView.height = self.fourAnswerTextView.bottom + kRealValue(10); + mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), questionView.bottom + kRealValue(20)); + + self.healthView = [[UIView alloc] initWithFrame:CGRectMake(0 , questionView.bottom + kRealValue(10), mainScrollView.width, 10)]; + self.healthView.layer.cornerRadius = 10.0; + self.healthView.layer.masksToBounds = YES; + self.healthView.backgroundColor = KWhiteColor; + [mainScrollView addSubview:self.healthView]; + +} + + + +- (UIView *)createInfoView:(NSString *)leftText + leftFrame:(CGRect)frame + rightText:(NSString *)rightText { + + UIView * infoView = [[UIView alloc] initWithFrame:frame]; + + UILabel * leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 15)]; + + leftLabel.text = leftText; + + CGFloat w = [HQCommonUtils getLengthFromText:leftText andFontSize:13]; + + leftLabel.font = SYSTEMFONT(13); + + leftLabel.width = w; + + leftLabel.textColor = UIColorHex(#999999); + + leftLabel.textAlignment = NSTextAlignmentLeft; + + [infoView addSubview:leftLabel]; + + UILabel * rightLabel = [[UILabel alloc] initWithFrame:CGRectMake(leftLabel.right + kRealValue(10), 0, frame.size.width - kRealValue(10), 15)]; + + rightLabel.text = rightText; + + rightLabel.font = SYSTEMFONT(13); + + leftLabel.textColor = CFontColor1; + + rightLabel.textAlignment = NSTextAlignmentLeft; + + [infoView addSubview:rightLabel]; + + + return infoView; + + +} + + +#pragma mark - 网络请求 + +- (void)getFileDetail { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + if (!ValidStr(self.danganID) ) { + [parmDic setObject:self.danganID forKey:@"id"]; + } + + JKCQAPI * upApi = [[JKCQAPI alloc] init:self tag:@"FILEDATA" NeedToken:@""]; + + [upApi GetLookQuestionDetailFileData:parmDic]; + +} + + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self hiddenAllMBProgressHUD]; + + if ([tag isEqualToString:@"FILEDATA"]) { + + DoctorReportModel * model = [DoctorReportModel modelWithDictionary:response]; + + DoctorReportRecordsModel * recordModel = [DoctorReportRecordsModel modelWithDictionary:model.conMedicalRecordsDO]; + + + self.titleview.timeString = recordModel.createTime; + self.oneAnswerLabel.text =[NSString stringWithFormat:@" %@",recordModel.haveTimeValue] ; + self.twoAnswerLabel.text = [NSString stringWithFormat:@" %@",recordModel.tfLookValue]; + self.nameAnswerLabel.text = [NSString stringWithFormat:@" %@",recordModel.recordsName]; + self.fourAnswerTextView.text = [NSString stringWithFormat:@"%@",recordModel.desire]; + self.twoAnswerTextView.text = [NSString stringWithFormat:@"%@",recordModel.medicalDescribe]; + //计算问题高度 + [self adjustTextViewHeightToFitText:self.fourAnswerTextView.text]; + + NSArray * imageArray ; + if (!ValidStr(recordModel.image)) { + imageArray = [recordModel.image componentsSeparatedByString:@","]; + } + if (imageArray.count <= 0) { + self.pictureView.hidden = true; + } + else + { + self.pictureView.hidden = false; + self.pictureView.top = self.twoAnswerTextView.bottom + kRealValue(16); + self.pictureNumberLabel.text = [NSString stringWithFormat:@"%ld/9",imageArray.count]; + CGFloat lastHeight = 0; + CGFloat pading = kRealValue(6); + CGFloat imgW = (self.mainScrollView.width - kRealValue(60) )/ 5 ; + [self.imageURLArray removeAllObjects]; + for (int i = 0 ; i < imageArray.count; i ++) { + CGFloat cow = i/5; + CGFloat lin = i%5; + UIImageView * questionImg = [[UIImageView alloc] initWithFrame:CGRectMake( kRealValue(15) + (imgW + pading) *lin , (imgW + pading) * cow, imgW, imgW)]; + questionImg.userInteractionEnabled = true; + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,imageArray[i]]; + + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [questionImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:PLACEHOLD_IMG]; + + [self.imageURLArray addObject:encodedString3]; + UIButton * btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, questionImg.width, questionImg.height)]; + btn.tag = i; + [btn addTarget:self action:@selector(lookPicture:) forControlEvents:UIControlEventTouchUpInside]; + [questionImg addSubview:btn]; + + [self.picShowView addSubview:questionImg]; + + if (i == imageArray.count - 1) { + lastHeight = questionImg.bottom; + } + } + self.picShowView.height = lastHeight; + + self.pictureView.height = self.picShowView.bottom + kRealValue(16);; + } + //布局 + if ([recordModel.tfLook integerValue] == 0) { //没就诊过 + self.hospationView.hidden = YES; + //布局 + if (self.pictureView.hidden == true) { + self.fourBackView.top = self.twoAnswerTextView.bottom + kRealValue(16); + }else + { + self.fourBackView.top = self.pictureView.bottom + kRealValue(16); + } + self.fourBackView.height = self.twoAnswerLabel.bottom + kRealValue(16); + + self.fourLabel.top = self.fourBackView.bottom + kRealValue(16); + + self.fourAnswerTextView.top = self.fourLabel.bottom + kRealValue(16); + + self.questionView.height = self.fourAnswerTextView.bottom + kRealValue(5); + + self.healthView.top = self.questionView.bottom + kRealValue(10); + + + }else + { + if (self.pictureView.hidden == true) { + + self.fourBackView.top = self.twoAnswerTextView.bottom + kRealValue(16); + }else + { + self.fourBackView.top = self.pictureView.bottom + kRealValue(16); + } + self.hospationView.hidden = false; + self.hospationView.backgroundColor = CViewBgColor; + self.sicksLabel.text = [NSString stringWithFormat:@"%@",recordModel.lookOffice]; + self.sicksLabel.height = [HQCommonUtils getSpaceLabelHeight:self.sicksLabel withStr:self.sicksLabel.text withFont:[UIFont systemFontOfSize:14] withWidth:self.sicksLabel.width withLineSpacing:5]; + + self.hospationNameLabel.text = [NSString stringWithFormat:@"%@",recordModel.lookMedicalName]; + + self.hospationNameLabel.height = [HQCommonUtils getSpaceLabelHeight:self.sicksLabel withStr:self.sicksLabel.text withFont:[UIFont systemFontOfSize:14] withWidth:self.sicksLabel.width withLineSpacing:5]; + + self.sickLeftLabel.top = self.hospationNameLabel.bottom + kRealValue(17); + + self.hospationView.height = self.sicksLabel.bottom + kRealValue(15); + self.fourBackView.height = self.hospationView.bottom + kRealValue(16); + + self.fourLabel.top = self.fourBackView.bottom + kRealValue(16); + self.fourAnswerTextView.top = self.fourLabel.bottom + kRealValue(16); + self.questionView.height = self.fourAnswerTextView.bottom + kRealValue(5); + self.healthView.top = self.questionView.bottom + kRealValue(10); + + } + self.userView.userModel = [DoctorReportFamilyInfoModel modelWithDictionary:model.conFamilyMembersDO]; + + + //健康信息 + CGFloat healthH = CGFLOAT_MIN; + + for (int i = 0 ; i < model.answer.count; i ++) { + + DoctorAnswerModel * ansModel = model.answer[i]; + + UIView * healthView = [self createInfoView:ansModel.answerKey leftFrame:CGRectMake(kRealValue(15), kRealValue(20) + 30 * i,self.healthView.width - kRealValue(30), 13) rightText:ansModel.answerValue]; + + [self.healthView addSubview:healthView]; + + if (i == model.answer.count - 1) { + healthH = healthView.bottom; + } + [self.healthArray addObject:healthView]; + } + if (model.answer.count > 0) { + self.healthView.height = healthH + kRealValue(20); + }else + { + self.healthView.height = CGFLOAT_MIN; + } + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth - kRealValue(30), self.healthView.bottom + kRealValue(20)); + + + } + +} + +- (void)lookPicture:(UIButton *)currentBtn { + XLPhotoBrowser *browser = [XLPhotoBrowser showPhotoBrowserWithImages:self.imageURLArray currentImageIndex:currentBtn.tag]; + browser.browserStyle = XLPhotoBrowserStyleSimple; // 微博样式 + // 自定义pageControl的一些属性 + browser.pageDotColor = [UIColor purpleColor]; ///< 此属性针对动画样式的pagecontrol无效 + browser.currentPageDotColor = [UIColor greenColor]; + browser.pageControlStyle = XLPhotoBrowserPageControlStyleClassic;///< 修改底部pagecontrol的样式为系统样式,默认是弹性动画的样式 +} + + +- (void)adjustTextViewHeightToFitText:(NSString *)text { + self.fourAnswerTextView.text = text; + if (text.length == 0) { + // Set default height when there's no content + self.fourAnswerTextView.height = kRealValue(30); + } else { + CGSize maxSize = CGSizeMake(self.fourAnswerTextView.frame.size.width, CGFLOAT_MAX); + CGRect textRect = [text boundingRectWithSize:maxSize + options:NSStringDrawingUsesLineFragmentOrigin + attributes:@{NSFontAttributeName:self.fourAnswerTextView.font} + context:nil]; + + // Adjust the UITextView frame based on calculated text height + CGRect newFrame = self.fourAnswerTextView.frame; + newFrame.size.height = textRect.size.height + self.fourAnswerTextView.textContainerInset.top + self.fourAnswerTextView.textContainerInset.bottom; + self.fourAnswerTextView.height = newFrame.size.height; + } +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionMustKnowViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionMustKnowViewController.h new file mode 100644 index 0000000..9c3a7d2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionMustKnowViewController.h @@ -0,0 +1,18 @@ +// +// QuestionMustKnowViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/13. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionMustKnowViewController : HQBaseViewController + +@property (nonatomic, assign) NSInteger popType; //1 图文 0 音视频 2 用户须知 +@property (nonatomic, strong) NSString * doctorId; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionMustKnowViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionMustKnowViewController.m new file mode 100644 index 0000000..4f1f7fd --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionMustKnowViewController.m @@ -0,0 +1,252 @@ +// +// QuestionMustKnowViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/13. +// + +#import "QuestionMustKnowViewController.h" +#import "SelectedQuestionViewController.h" +#import "SelectedDoctorTimeVC.h" + +@interface QuestionMustKnowViewController () + +@property (nonatomic, strong) UIScrollView * mainScrollView; + +@property (nonatomic, strong) YYLabel * conntLabel; + +@property (nonatomic, strong) UIButton * buzaiButton; +@property (nonatomic, strong) UIButton * yiyueButton; +@property (nonatomic, strong) UIButton * qitianButton; +@property (nonatomic, strong) NSString * showID; + +@end + +@implementation QuestionMustKnowViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = UIColorHex(#EEEEEE); + self.isHidenNaviBar = false; + self.navigationItem.title = @"咨询须知"; + [self createUI]; + [self createData]; + +} + +- (void)createUI { + UIView * centerView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), 10, kScreenWidth - kRealValue(30), kScreenHeight - kTopHeight - 18)]; + centerView.backgroundColor = KWhiteColor; + centerView.layer.cornerRadius = 10.0; + centerView.layer.masksToBounds = YES; + [self.view addSubview:centerView]; + + + UIButton * readButton = [[UIButton alloc] initWithFrame:CGRectMake(10, centerView.bottom - 39 - 30, 100, 30)]; + [readButton setTitle:@"我准备好了" forState:UIControlStateNormal]; + [readButton setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + readButton.titleLabel.font = SYSTEMFONT(12); + readButton.layer.cornerRadius = 15.0; + readButton.layer.masksToBounds = YES; + readButton.layer.borderColor = UIColorHex(#21BEBD).CGColor; + readButton.layer.borderWidth = 1.0f; + readButton.centerX = self.view.centerX; + [readButton addTarget:self action:@selector(readOverAction) forControlEvents:UIControlEventTouchUpInside]; + [centerView addSubview:readButton]; + + // cv战士 + UIButton * monthButton = [[UIButton alloc] initWithFrame:CGRectMake(10, readButton.top - 37 -15, 150, 15)]; + [monthButton setTitle:@" 1个月内不在提醒" forState:UIControlStateNormal]; + monthButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + [monthButton setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + [monthButton setImage:[UIImage imageNamed:@"mustKnow_Nomal"] forState:UIControlStateNormal]; + [monthButton setImage:[UIImage imageNamed:@"mustKnow_Selected"] forState:UIControlStateSelected]; + monthButton.titleLabel.font = SYSTEMFONT(12); + self.yiyueButton = monthButton; + [monthButton addTarget:self action:@selector(oneMonthShow:) forControlEvents:UIControlEventTouchUpInside]; + [centerView addSubview:monthButton]; + + + UIButton * dayButton = [[UIButton alloc] initWithFrame:CGRectMake(10, monthButton.top - 13 -15, 150, 15)]; + [dayButton setTitle:@" 7日内不在提醒" forState:UIControlStateNormal]; + dayButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + [dayButton setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + [dayButton setImage:[UIImage imageNamed:@"mustKnow_Nomal"] forState:UIControlStateNormal]; + [dayButton setImage:[UIImage imageNamed:@"mustKnow_Selected"] forState:UIControlStateSelected]; + [dayButton addTarget:self action:@selector(severDayShow:) forControlEvents:UIControlEventTouchUpInside]; + dayButton.titleLabel.font = SYSTEMFONT(12); + self.qitianButton = dayButton; + + [centerView addSubview:dayButton]; + + + UIButton * yihouButton = [[UIButton alloc] initWithFrame:CGRectMake(10, dayButton.top - 13 -15, 150, 15)]; + [yihouButton setTitle:@" 以后不在提醒" forState:UIControlStateNormal]; + yihouButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + [yihouButton setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + [yihouButton setImage:[UIImage imageNamed:@"mustKnow_Nomal"] forState:UIControlStateNormal]; + [yihouButton setImage:[UIImage imageNamed:@"mustKnow_Selected"] forState:UIControlStateSelected]; + [yihouButton addTarget:self action:@selector(yihouShow:) forControlEvents:UIControlEventTouchUpInside]; + self.buzaiButton = yihouButton; + yihouButton.titleLabel.font = SYSTEMFONT(12); + [centerView addSubview:yihouButton]; + + + + self.mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, kScreenWidth - kRealValue(30), yihouButton.top - 30)]; + [centerView addSubview:self.mainScrollView]; + + + self.conntLabel = [[YYLabel alloc] initWithFrame:CGRectMake(10, 10, self.mainScrollView.width - 20, 100)]; + self.conntLabel.textAlignment = NSTextAlignmentLeft; + self.conntLabel.font = MEDIUMFONT(13); + self.conntLabel.textColor = UIColorHex(#333333); + self.conntLabel.numberOfLines = 0; + [self.mainScrollView addSubview:self.conntLabel]; + +} + + +- (void)createData { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + +// [parmDic setObject:self.memberId forKey:@"memberId"]; +// 1 图文 0 音视频 2 用户须知 + [parmDic setObject:[NSString stringWithFormat:@"%d",self.popType] forKey:@"type"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"MEMBERAPI" NeedToken:@""]; + + [detailApi getFoundPopConnetResult :parmDic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + [EasyTextView showSuccessText:message]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"MEMBERAPI"]) { + + + NSDictionary * resDic = response; + if ([resDic.allKeys containsObject:@"id"]) { + self.showID = [NSString stringWithFormat:@"%@",resDic[@"id"]]; + } + + if ([resDic.allKeys containsObject:@"content"]) { + NSMutableAttributedString *text = [NSMutableAttributedString new]; + // 添加文本 + NSString *title = resDic[@"content"]; + + // //富文本 + // [NSString stringWithFormat:@"%@ ",title]; + NSAttributedString *attrStr = [[NSAttributedString alloc] initWithData:[[NSString stringWithFormat:@"%@ ",title] dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; + + [text appendAttributedString:attrStr]; + + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle setLineSpacing:6]; + [text addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])]; + + self.conntLabel.attributedText = text; + + CGSize maxSize = CGSizeMake(self.conntLabel.width, MAXFLOAT); + + YYTextLayout * layout = [YYTextLayout layoutWithContainerSize:maxSize text:self.conntLabel.attributedText]; + self.conntLabel.textLayout = layout; + CGFloat introHeight = layout.textBoundingSize.height; + self.conntLabel.width = maxSize.width; + // 记录真正的正确高度 + self.conntLabel.height = introHeight; + // 显示文本排版结果 + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth - 30, self.conntLabel.bottom); + + } + } + if([tag isEqualToString:@"NOTSHOW"]) { + + + + + if (self.popType == 1) { ////1 图文 0 音视频 2 用户须知 + SelectedQuestionViewController * questionVC = [[SelectedQuestionViewController alloc] init]; + questionVC.doctorID = self.doctorId; + questionVC.questionType = 1; + [self.navigationController pushViewController:questionVC animated:YES]; + } + if (self.popType == 0) { ////1 图文 0 音视频 2 用户须知 + SelectedDoctorTimeVC * timeVC = [[SelectedDoctorTimeVC alloc] init]; + timeVC.doctorId = self.doctorId; + [self.navigationController pushViewController:timeVC animated:YES]; + } + + + + } +} + +- (void)yihouShow:(UIButton *)yihouBtn { + + yihouBtn.selected = true; + self.qitianButton.selected = false; + self.yiyueButton.selected = false; + +} + +- (void)severDayShow:(UIButton *)severBtn { + severBtn.selected = true; + self.buzaiButton.selected = false; + self.yiyueButton.selected = false; + +} + +- (void)oneMonthShow:(UIButton *)monthBtn { + + monthBtn.selected = true; + self.buzaiButton.selected = false; + self.qitianButton.selected = false; +} + +- (void)readOverAction { + + if (self.buzaiButton.selected == false && self.qitianButton.selected == false && self.yiyueButton.selected == false) { + + [EasyTextView showErrorText:@"请选择显示时间"]; + return; + } + NSString * notShow ; + if (self.buzaiButton.selected == true) { + notShow = @"2"; + } + if (self.yiyueButton.selected == true) { + notShow = @"1"; + } + if (self.qitianButton.selected == true) { + notShow = @"0"; + } + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:self.showID forKey:@"id"]; + [parmDic setObject:notShow forKey:@"notShow"]; + + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"NOTSHOW" NeedToken:@""]; + + [api getSelectedShow:parmDic]; +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionPeopleMangerVC.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionPeopleMangerVC.h new file mode 100644 index 0000000..aa676f3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionPeopleMangerVC.h @@ -0,0 +1,16 @@ +// +// QuestionPeopleMangerVC.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionPeopleMangerVC : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionPeopleMangerVC.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionPeopleMangerVC.m new file mode 100644 index 0000000..83290e5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionPeopleMangerVC.m @@ -0,0 +1,205 @@ +// +// QuestionPeopleMangerVC.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "QuestionPeopleMangerVC.h" +#import "QuestionPeopleManagerTable.h" +#import "QuestionPeopleModel.h" +#import "SelectedQuestionViewController.h" +#import "AddQuestionViewController.h" + + +@interface QuestionPeopleMangerVC () + +@property (nonatomic, strong) QuestionPeopleManagerTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, assign) NSInteger pageNo; + +@end + +@implementation QuestionPeopleMangerVC + +#pragma mark:懒加载 + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + + return _dataArray; + +} + +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + + [self.homeTable.mj_header beginRefreshing]; + +} +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = CViewBgColor; + self.isHidenNaviBar = false; + self.pageNo = 1; + self.navigationItem.title = @"咨询人管理"; + [self createUI]; + [self getData]; +} + +- (void)createUI { + + self.homeTable = [[QuestionPeopleManagerTable alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - kTopHeight - SafetyAreaHeight - 45) style:UITableViewStylePlain]; + self.homeTable.backgroundColor = CViewBgColor; + __weak __typeof(self) weakSelf = self; + self.homeTable.xiugaiBlcok = ^(QuestionPeopleModel * _Nullable model) { + + AddQuestionViewController * selcetVC = [[AddQuestionViewController alloc] init]; + selcetVC.questionModel = model; + [weakSelf.navigationController pushViewController:selcetVC animated:true]; + + }; + [self.view addSubview:self.homeTable]; + + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 1; + [weakSelf getData]; + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + + [weakSelf getData]; + }]; + + UIButton * addBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth/2 - kRealValue(140) ,kScreenHeight - kTopHeight - SafetyAreaHeight - 45 , kRealValue(130), 45)]; + [addBtn setBackgroundColor:UIColorHex(#21BEBD)]; + [addBtn setTitle:@"新增" forState:UIControlStateNormal]; + [addBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + addBtn.layer.cornerRadius = 16; + addBtn.layer.masksToBounds = true; + [addBtn addTarget:self action:@selector(addQuestionAction) forControlEvents:UIControlEventTouchUpInside]; + addBtn.titleLabel.font = MEDIUMFONT(14); + [self.view addSubview:addBtn]; + + UIButton * delectBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth/2 + kRealValue(10) , kScreenHeight - SafetyAreaHeight - kTopHeight - 45 , addBtn.width, 45)]; + [delectBtn setBackgroundColor:UIColorHex(#FFFFFF)]; + [delectBtn setTitle:@"删除" forState:UIControlStateNormal]; + [delectBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + delectBtn.layer.cornerRadius = 16; + delectBtn.layer.masksToBounds = true; + delectBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + delectBtn.layer.borderWidth = 1; + [delectBtn addTarget:self action:@selector(delectQuestionAction) forControlEvents:UIControlEventTouchUpInside]; + delectBtn.titleLabel.font = MEDIUMFONT(14); + [self.view addSubview:delectBtn]; + + +} + +- (void)getData { + + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + + JKCQAPI * userApi = [[JKCQAPI alloc] init:self tag:@"QUSTION" NeedToken:@""]; + + [userApi getQuestionManagerList:parmDic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_header endRefreshing]; + [self.homeTable.mj_footer endRefreshing]; + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_header endRefreshing]; + [self.homeTable.mj_footer endRefreshing]; + NSArray * array = response ; + if (self.pageNo == 1 ) { + + [self.dataArray removeAllObjects]; + } + if ([tag isEqualToString:@"QUSTION"]) { + [self hiddenAllMBProgressHUD]; + int i = 0; + for (NSDictionary * dic in array) { + + QuestionPeopleModel * model = [QuestionPeopleModel modelWithDictionary:dic]; + model.isSelected = NO; + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; + } + if ([tag isEqualToString:@"DELECT"]) { + [self hiddenAllMBProgressHUD]; + [self.homeTable.mj_header beginRefreshing]; + [self showMBProgressHUDOnlyWithString:response]; + + } +} +#pragma mark:新增咨询人 +- (void)addQuestionAction { + + + AddQuestionViewController * selcetVC = [[AddQuestionViewController alloc] init]; + // + [self.navigationController pushViewController:selcetVC animated:true]; + +// SelectedQuestionViewController * selcetVC = [[SelectedQuestionViewController alloc] init]; +// +// [self.navigationController pushViewController:selcetVC animated:true]; +} + +- (void)delectQuestionAction { + + NSMutableArray * seleArray = [[NSMutableArray alloc] init]; + for (QuestionPeopleModel * mode in self.homeTable.dataArray) { + + if (mode.isSelected == true) { + + [seleArray addObject:mode.people_id]; + } + DLog(@"%ld",mode.isSelected); + } + [self showMBProgressHUDWithString:@"删除中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:seleArray forKey:@"param"]; + + JKCQAPI * userApi = [[JKCQAPI alloc] init:self tag:@"DELECT" NeedToken:@""]; + + [userApi delectedQuestionManagerList:parmDic]; + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionViewController.h new file mode 100644 index 0000000..8dc96c2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionViewController.h @@ -0,0 +1,16 @@ +// +// QuestionViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/13. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionViewController.m new file mode 100644 index 0000000..559ee70 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QuestionViewController.m @@ -0,0 +1,787 @@ +// +// QuestionViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/13. +// + +#import "QuestionViewController.h" +#import "HealthyQuestionTable.h" +#import "HealthyQuestionHeardView.h" +#import "QuestionPeopleMangerVC.h" +#import "FoundExpertViewController.h" +#import "DoctorMainViewController.h" +#import "DoctorRecommendModel.h" +#import "ExpertMainViewController.h" +#import "QustionRecordViewController.h" +#import "ChatViewController.h" +#import "QuesstionDetailLookFileViewController.h" +#import "SmallHelpIMDataModel.h" +#import +#import +#import +#import "PSAppInfo.h" +#import "PSCheckVersionView.h" +#import "RoomDoctorRecordsVC.h" +#import "HomeQusetionRecordsModel.h" +#import "DoctorMainViewController.h" + +@interface QuestionViewController () + +@property (nonatomic, strong) HealthyQuestionTable * homeTable; + +@property (nonatomic, assign) NSInteger page; + +@property (nonatomic, strong) PSCheckVersionView * checkVersionView; +@property (nonatomic, strong) UIView * coverView; +//定位相关 +@property (nonatomic, strong) AMapSearchAPI *search; +@property (nonatomic, strong) AMapLocationManager *locationManager; +@property (nonatomic, copy) AMapLocatingCompletionBlock completionBlock; +//定位相关 +@property (nonatomic, strong) CLLocationManager * userlocationManager; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@end + +@implementation QuestionViewController + +- (NSMutableArray *)dataArray { + + if(!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; +} + +- (UIView *)coverView { + + if (!_coverView) { + _coverView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; + _coverView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5f]; + } + return _coverView; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = KWhiteColor; + self.userlocationManager = [[CLLocationManager alloc] init]; + self.locationManager.delegate = self; + + // Request the desired authorization + [self.userlocationManager requestWhenInUseAuthorization]; + self.isHidenNaviBar = true; + //IM登录状态 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateHomeDate) + name:KNotificAgreeProtoocl + object:nil]; + [self createUI]; + self.page = 1; + [self verifyTokenData]; + [self initCompleteBlock]; + [self configLocationManager]; + [self reGeocodeAction]; + // 4. 添加 V2TIMSDKListener 的事件监听器,self 是 id 的实现类,如果您不需要监听 IM SDK 的事件,这个步骤可以忽略。 + [[V2TIMManager sharedInstance] addIMSDKListener:self]; + // 5. 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 + [[V2TIMManager sharedInstance] addSimpleMsgListener:self]; + [[TUICallEngine createInstance] addObserver:self]; + + +} + +#pragma mark:校验token +- (void)verifyTokenData { + + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + // 获取应用的版本号 + HQUserInfo * user = [HQCommonUtils keyedUnarchiverWithKey:LoginUserInfo]; + + + if (ValidStr(user.token)) { + + [parmDic setObject:@"" forKey:@"token"]; + } + else + { + [parmDic setObject:user.token forKey:@"token"]; + } + JKCQAPI * homeRemakerApi = [[JKCQAPI alloc] init:self tag:@"verifyToken" NeedToken:@""]; + + [homeRemakerApi GetverifyToken:parmDic]; + + +} + +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + + if (!ValidStr(UserDefaultObjectForKey(@"HTTPS"))) { + [self verifyTokenData]; + } } + + +- (void)reGeocodeAction +{ + //进行单次带逆地理定位请求 + [self.locationManager requestLocationWithReGeocode:YES completionBlock:self.completionBlock]; +} + + +- (void)configLocationManager +{ + self.locationManager = [[AMapLocationManager alloc] init]; + + [self.locationManager setDelegate:self]; + + //设置期望定位精度 + [self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters]; + + //设置不允许系统暂停定位 + [self.locationManager setPausesLocationUpdatesAutomatically:NO]; + + //设置允许在后台定位 + [self.locationManager setAllowsBackgroundLocationUpdates:NO]; + + //设置定位超时时间 + [self.locationManager setLocationTimeout:10]; + + //设置逆地理超时时间 + [self.locationManager setReGeocodeTimeout:3]; + + //设置开启虚拟定位风险监测,可以根据需要开启 + [self.locationManager setDetectRiskOfFakeLocation:NO]; +} + +- (void)cleanUpAction +{ + //停止定位 + [self.locationManager stopUpdatingLocation]; + + [self.locationManager setDelegate:nil]; + +} + + +#pragma mark:更新 +- (void)getUpDateinfo { + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + // 获取应用的版本号 + [parmDic setObject:@"com.question.QinghaiProvince" forKey:@"pkg"]; + + JKCQAPI * homeRemakerApi = [[JKCQAPI alloc] init:self tag:@"UPVERSION" NeedToken:@""]; + [homeRemakerApi getABMUpdate:parmDic]; + + +} + +- (void)initCompleteBlock +{ + self.completionBlock = ^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) + { + if (error != nil && error.code == AMapLocationErrorLocateFailed) + { + //定位错误 +// var mCurrentLat = 34.327271 +// var mCheckToken = false +// var mCurrentLon = 108.949845 + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + [user setObject:@(108.949845) forKey:USERDEFAULLONG]; + [user setObject:@(34.327271) forKey:USERDEFAULLATITUDE]; + [user synchronize]; + return; + } + else if (error != nil + && (error.code == AMapLocationErrorReGeocodeFailed + || error.code == AMapLocationErrorTimeOut + || error.code == AMapLocationErrorCannotFindHost + || error.code == AMapLocationErrorBadURL + || error.code == AMapLocationErrorNotConnectedToInternet + || error.code == AMapLocationErrorCannotConnectToHost)) + { + //逆地理错误:在带逆地理的单次定位中,逆地理过程可能发生错误,此时location有返回值,regeocode无返回值,进行annotation的添加 + } + else if (error != nil && error.code == AMapLocationErrorRiskOfFakeLocation) + { + //存在虚拟定位的风险:此时location和regeocode没有返回值,不进行annotation的添加 + + //存在虚拟定位的风险的定位结果 + __unused CLLocation *riskyLocateResult = [error.userInfo objectForKey:@"AMapLocationRiskyLocateResult"]; + //存在外接的辅助定位设备 + __unused NSDictionary *externalAccressory = [error.userInfo objectForKey:@"AMapLocationAccessoryInfo"]; + + return; + } + else + { + //没有错误:location有返回值,regeocode是否有返回值取决于是否进行逆地理操作,进行annotation的添加 + } + //有无逆地理信息,annotationView的标题显示的字段不一样 + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + [user setObject:@(location.coordinate.longitude) forKey:USERDEFAULLONG]; + [user setObject:@(location.coordinate.latitude) forKey:USERDEFAULLATITUDE]; + [user synchronize]; + + + }; +} + +- (void)backUp { + + [self.navigationController popToRootViewControllerAnimated:YES]; + +} +- (void)createUI { + + self.homeTable = [[HealthyQuestionTable alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; + self.homeTable.backgroundColor = CViewBgColor; + [self.view addSubview:self.homeTable]; + + [self.homeTable mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_offset(0); + }]; + + self.homeTable.headDelegate = self; + kWeakSelf(self); + self.homeTable.tableBlock = ^(HomeQusetionRecordsModel * _Nonnull model) { + + //1图文 2视频 + if ([model.contentType intValue] == 2) { + + DoctorMainViewController * doctorVC = [[DoctorMainViewController alloc] init]; + doctorVC.yuyue_id = model.records_id; + doctorVC.popType = 1; + [weakself.navigationController pushViewController:doctorVC animated:YES]; + } + if ([model.contentType intValue] == 1) { + + if ([TUILogin isUserLogined]) { + ChatViewController * chatVC = [[ChatViewController alloc] init]; + chatVC.isGroupID = YES; + chatVC.chatID = model.imId ; + chatVC.eableSendReport = true; + chatVC.eablehaveHelathData = false; + chatVC.navTitle = @"图文咨询"; + chatVC.isVideo = NO; + chatVC.pictureEnd_id = model.records_id; + chatVC.questionType = 2; + chatVC.medicalRecordsId = model.memberId; + if ([model.contentStatus intValue] == 5) { + chatVC.isEveal = true; + }else + { + chatVC.isEveal = false; + } + if ([model.contentStatus intValue] >=4 ) { + chatVC.endRecordType = 100; + } + [weakself.navigationController pushViewController:chatVC animated:YES]; + }else + { + [EasyTextView showErrorText:@"登录过期,请重新登录"]; + } + } + }; + + self.homeTable.lookMoreBlock = ^{ + + [weakself myQuestionAction]; + + }; + + + + + __weak __typeof(self) weakSelf = self; + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + self.page = 1; + [self verifyTokenData]; + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + self.page = 1; + [self verifyTokenData]; + }]; + + //初始化一个emptyView + LYEmptyView *emptyView = [LYEmptyView emptyViewWithImage:[UIImage imageNamed:@"noQuetionList"] + titleStr:@"暂无咨询记录" detailStr:@""]; + + //元素竖直方向的间距 + emptyView.titleLabMargin = kRealValue(5); + emptyView.contentViewY = kRealValue(450); + + emptyView.imageSize = CGSizeMake(kRealValue(101), kRealValue(60)); + //标题颜色 + emptyView.titleLabTextColor =UIColorHex(#14BEBE); + //描述字体 + emptyView.titleLabFont = [UIFont systemFontOfSize:15]; + //按钮背景色 + //设置空内容占位图 + self.homeTable.ly_emptyView = emptyView; +} + +- (void)updateHomeDate { + + + if (self.homeTable) { + [self chageUrlService]; + + }else + { + [self verifyTokenData]; + [self chageUrlService]; + + } +} + + +- (void)getData { + + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(1) forKey:@"pageNo"]; + [parmDic setObject:@(3) forKey:@"pageSize"]; + + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"RECOMMEND" NeedToken:@""]; + + [searchApi GetQuetsionRecordsList:parmDic]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + +} + + +#pragma mark:请求前缀 +- (void)chageUrlService { + + AFHTTPSessionManager *session=[AFHTTPSessionManager manager]; + // AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; + + session.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",@"text/plain", nil]; + //超时时间 + + session.requestSerializer.timeoutInterval= 30.f; + session.responseSerializer = [AFHTTPResponseSerializer serializer]; + + session.requestSerializer = [AFJSONRequestSerializer serializer]; + + session.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + + // 获取应用的版本号 + NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + // 将版本号按照点(.)分割成数组 + NSArray * components = [version componentsSeparatedByString:@"."]; + + // 获取数组中的最后一个元素 + NSString * lastComponent = [components lastObject]; + // 如果需要将其转换为整数 + NSInteger lastNumber = [lastComponent integerValue]; + [parmDic setObject:@(lastNumber) forKey:@"version"]; + [parmDic setObject:@"com.question.QinghaiProvince" forKey:@"pkg"]; + [session GET:@"https://base.icdat.cn/v2/url" parameters:parmDic headers:@{@"X-ClientSign":@"Quarry"} progress:^(NSProgress * _Nonnull downloadProgress) { + + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + NSString * dataString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; + DLog(@"response\n%@\n",dataString); + NSData *requestData = [dataString dataUsingEncoding:NSUTF8StringEncoding]; + + id myResult = [NSJSONSerialization JSONObjectWithData:requestData options:NSJSONReadingMutableContainers error:nil]; + //判断是否为字典 + if ([myResult isKindOfClass:[NSDictionary class]]) { + + NSDictionary *response = (NSDictionary *)myResult; + if ([response.allKeys containsObject:@"result"]) { + NSDictionary * resultDic = [response objectForKey:@"result"]; + + if ([resultDic.allKeys containsObject:@"api"]) { + [[NSUserDefaults standardUserDefaults] setObject:[resultDic objectForKey:@"api"] forKey:@"HTTPS"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + NSString * apiString = [resultDic objectForKey:@"api"]; + //判断是否正在审 + BOOL isExmine; + if ([apiString containsString:@"api.out.icdat.cn"]) { //正在审 + isExmine = true; + }else + { + isExmine = false; + } + [[NSUserDefaults standardUserDefaults] setObject:@(isExmine) forKey:@"isExmine"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + //版本升级 + //没在审 升级 + if (isExmine == false) { + [self getUpDateinfo]; + } + } + + if ([resultDic.allKeys containsObject:@"h5"]) { + [[NSUserDefaults standardUserDefaults] setObject:[resultDic objectForKey:@"h5"] forKey:@"IntervenH5"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + if ([resultDic.allKeys containsObject:@"h5Host"]) { + [[NSUserDefaults standardUserDefaults] setObject:[resultDic objectForKey:@"h5Host"] forKey:@"H5DevHost"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + if ([resultDic.allKeys containsObject:@"health"]) { + [[NSUserDefaults standardUserDefaults] setObject:[resultDic objectForKey:@"health"] forKey:@"BASEURL"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + + [self verifyTokenData]; + + } + } + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + //请求超时 + [[NSUserDefaults standardUserDefaults] setObject:@"https://api.cqygjk.com" forKey:@"HTTPS"]; + [[NSUserDefaults standardUserDefaults] setObject:@"https://yyjk.cqygjk.com/" forKey:@"BASEURL"]; + [[NSUserDefaults standardUserDefaults] setObject:@"api.cqygjk.com" forKey:@"IntervenH5"]; + [[NSUserDefaults standardUserDefaults] setObject:@"https://api.cqygjk.com" forKey:@"H5DevHost"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + }]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + if ([tag isEqualToString:@"RECOMMEND"]) { + [self hiddenAllMBProgressHUD]; + NSArray * array = response ; + + if (self.page == 1) { + [self.dataArray removeAllObjects]; + } + + for (NSDictionary * dic in array) { + + HomeQusetionRecordsModel * model = [HomeQusetionRecordsModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + + } + self.homeTable.dataArray = self.dataArray; + + + } + if ([tag isEqualToString:@"verifyToken"]) { + + BOOL isLogin = [response boolValue]; + + if (isLogin == true) { + + [self getData]; + + } + + + + } + + if ([tag isEqualToString:@"IMAPI"]) { + [self hiddenAllMBProgressHUD]; + + NSDictionary * pamrDic = response; + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + // 1. 从即时通信 IM 控制台获取应用 SDKAppID。 + // 2. 初始化 config 对象 + V2TIMSDKConfig *config = [[V2TIMSDKConfig alloc] init]; + // 3. 指定 log 输出级别。 + config.logLevel = V2TIM_LOG_INFO; + // 4. 添加 V2TIMSDKListener 的事件监听器,self 是 id 的实现类,如果您不需要监听 IM SDK 的事件,这个步骤可以忽略。 + [[V2TIMManager sharedInstance] addIMSDKListener:self]; + // 5. 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 + [[V2TIMManager sharedInstance] initSDK:[model.sdkAppId intValue] config:config]; + config.logLevel = V2TIM_LOG_INFO; + + [TUILogin login:[model.sdkAppId intValue] userID:model.userId userSig:model.userSig succ:^{ + + + } fail:^(int code, NSString *msg) { + + [EasyTextView showErrorText:msg]; + + }]; + + + + + } + if ([tag isEqualToString:@"SMALLHELP"]) { + + if ([ESCTUIManager TUIUserStatus] == false) { + + + [self loginImAccount]; + return; + } + [self hiddenAllMBProgressHUD]; + SmallHelpIMDataModel * model = [SmallHelpIMDataModel modelWithDictionary:response]; + ChatViewController * chatVC = [[ChatViewController alloc] init]; + chatVC.isGroupID = YES; + chatVC.chatID = model.groupId; + chatVC.smallHelp_id = model.small_id; + chatVC.isVideo = YES; + chatVC.eableSendReport = YES; + chatVC.eableMapTools = false; + chatVC.navTitle = @"全科医生"; + chatVC.eablehaveHelathData = YES; + chatVC.tfNew = model.tfNew; + [self.navigationController pushViewController:chatVC animated:YES]; + + } + + if ([tag isEqualToString:@"loginIMAPI"]) { + [self hiddenAllMBProgressHUD]; + NSDictionary * pamrDic = response; + + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + [ESCTUIManager loginInitTUISDKAppidWith:[model.sdkAppId intValue] UserID:model.userId userSig:model.userSig]; + [self smallQuestionAction]; + + } + + if ([tag isEqualToString:@"UPVERSION"]) { + + NSString * upVersion = [NSString stringWithFormat:@"%@",response] ; + + NSString * version = [NSString stringWithFormat:@"%@",[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]] ; + NSString *lastChar; + if (!ValidStr(version)) { + NSArray * array = [version componentsSeparatedByString:@"."]; + + if (array.count >0) { + lastChar = [NSString stringWithFormat:@"%@", [array lastObject]]; + } + NSLog(@"Last character: %@", lastChar); + + } + + /** +// * 当前版本号 +// */ +// @property (nonatomic, copy) NSString *currentVersion; +// +// /** +// * 更新版本号 +// */ +// @property (nonatomic, copy) NSString *releaseVersion; +// +// /** +// * 更新日志 +// */ +// @property (nonatomic, copy) NSString *releaseLog; +// +// /** +// * 更新时间(yyyy-MM-dd HH:mm) +// */ +// @property (nonatomic, copy) NSString *releaseDate; + + NSDictionary * dic = @{ + @"version":[NSString stringWithFormat:@"1.0.%@",upVersion] , + @"releaseNotes":@"修复已知问题,提升用户体验感!"}; + + PSAppInfo * info = [[PSAppInfo alloc] initWithDict:dic]; + + if ([upVersion intValue] > [lastChar intValue]) { + [self show:info]; + }else + { + DLog(@"不需要更新"); + } + } +} + + +- (void)show:(PSAppInfo *)info { + + if (_coverView) { return; } + + __weak typeof(self)weakSelf = self; + + self.checkVersionView = [[PSCheckVersionView alloc] + initWithAppInfo:info + confirm:^{ + [self jumpAppStoreUpdate]; + }]; + + [self.coverView addSubview:self.checkVersionView]; + [self.checkVersionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.equalTo(self.coverView).multipliedBy(0.69); + make.height.equalTo(self.coverView).multipliedBy(0.57); + make.center.equalTo(self.coverView); + }]; + [[UIApplication sharedApplication].keyWindow.rootViewController.view addSubview:self.coverView]; +} + +- (void)jumpAppStoreUpdate { + + UIApplication *application = [UIApplication sharedApplication];// 打电话 + + [application openURL:[NSURL URLWithString:@"https://api.cqygjk.com/health-system/api/anon/sys/toAppDown?pkg=com.question.QinghaiProvince&type=2"] options:@{} completionHandler:nil];// + + +} + + + +- (void)loginImAccount { + + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"loginIMAPI" NeedToken:nil]; + [proctocolApi GetIMLoginAccount:nil]; + +} + +#pragma mark:医生列表点击事件 + +- (void)doctorListClick:(NSString *)doctorID { + + ExpertMainViewController * mainVC = [[ExpertMainViewController alloc] init]; + mainVC.doctorId = doctorID; + [self.navigationController pushViewController:mainVC animated:YES]; +} + +#pragma mark:找专家 小助手 我的咨询 + +- (void)foundQuestionAction { + + + RoomDoctorRecordsVC * foundVC = [[RoomDoctorRecordsVC alloc] init]; + + [self.navigationController pushViewController:foundVC animated:true]; +} + +- (void)smallQuestionAction { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + + [self showMBProgressHUDWithString:@"咨询中,请稍候..." autoHidden:NO]; + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"SMALLHELP" NeedToken:@""]; + + [searchApi postSmallHelpGroup:dic]; + + + +} + +- (void)myQuestionAction { + + + QustionRecordViewController * myVC = [[QustionRecordViewController alloc] init]; + + [self.navigationController pushViewController:myVC animated:true]; + + +} + +//在线时票据过期:此时您需要生成新的 userSig,并再次重新调用初始化。 +- (void)onKickedOffline { + + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + [ESCTUIManager outLoginTUISDK]; + KPostNotification(KNotificationLoginStateChange, @NO); + +} + +- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { + switch (status) { + case kCLAuthorizationStatusNotDetermined: + // 用户还未决定是否授权 + break; + case kCLAuthorizationStatusRestricted: + // 位置服务被限制(例如家长控制) + [self handleLocationServicesRestricted]; + break; + case kCLAuthorizationStatusDenied: + // 用户拒绝了位置权限 + [self showAlertToOpenSettings]; + break; + case kCLAuthorizationStatusAuthorizedAlways: + case kCLAuthorizationStatusAuthorizedWhenInUse: + // 用户授权了位置权限 +// [self startLocationUpdates]; + break; + default: + break; + } +} + +- (void)handleLocationServicesRestricted { + // 处理位置服务受限的情况 + NSLog(@"位置服务被限制"); + [self showAlertToOpenSettings]; +} + +- (void)handleLocationServicesDenied { + // 处理位置服务被拒绝的情况 + NSLog(@"位置服务被拒绝"); + [self showAlertToOpenSettings]; +} + + + +- (void)handleLocationServicesDisabled { + // 处理设备的定位服务被禁用的情况 + NSLog(@"设备的定位服务被禁用"); + [self showAlertToOpenSettings]; +} + +- (void)showAlertToOpenSettings { + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"定位服务已关闭" + message:@"请在设置中启用定位服务" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction *settingsAction = [UIAlertAction actionWithTitle:@"去设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + if ([[UIApplication sharedApplication] canOpenURL:settingsURL]) { + [[UIApplication sharedApplication] openURL:settingsURL options:@{} completionHandler:nil]; + } + }]; + + UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]; + + [alertController addAction:settingsAction]; + [alertController addAction:cancelAction]; + + [self presentViewController:alertController animated:YES completion:nil]; +} + +- (void)dealloc { + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/AudioVideoRecordViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/AudioVideoRecordViewController.h new file mode 100644 index 0000000..64c6c39 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/AudioVideoRecordViewController.h @@ -0,0 +1,16 @@ +// +// AudioVideoRecordViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface AudioVideoRecordViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/AudioVideoRecordViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/AudioVideoRecordViewController.m new file mode 100644 index 0000000..120291d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/AudioVideoRecordViewController.m @@ -0,0 +1,229 @@ +// +// AudioVideoRecordViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "AudioVideoRecordViewController.h" +#import "QuestionRecoredTable.h" +#import "QuestionRecordModel.h" +#import "RecordIMListDateModel.h" +#import "DoctorMainViewController.h" + +@interface AudioVideoRecordViewController () + +@property (nonatomic, strong) QuestionRecoredTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * buttonArray; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, assign) NSInteger pageNo; + +@property (nonatomic, copy) NSString * type; + +@end + +@implementation AudioVideoRecordViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + + } + return _dataArray; + +} + +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + + _buttonArray = [[NSMutableArray alloc] init]; + + } + return _buttonArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.pageNo = 1; + self.type = @"3"; + [self createUI]; + [self createData]; +} + +- (void)createUI { + // 3 1 5 + NSArray * array = @[@"进行中",@"待确认",@"已完成"]; + + [self.buttonArray removeAllObjects]; + CGFloat w = kRealValue(80); + for (int index = 0; index < array.count; index ++) { + + UIButton * listBtn = [[UIButton alloc] init]; + + listBtn.frame = CGRectMake(kRealValue(15) + (w + kRealValue(13)) * index , kRealValue(15), w, 27); + [listBtn setTitle:array[index] forState:UIControlStateNormal]; + [listBtn setTitleColor:KWhiteColor forState:UIControlStateSelected]; + [listBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + [listBtn addTarget:self action:@selector(statusChange:) forControlEvents:UIControlEventTouchUpInside]; + listBtn.titleLabel.font = SYSTEMFONT(13); + listBtn.layer.cornerRadius = 14.0; + listBtn.layer.masksToBounds = true; + listBtn.tag = 1000 + index; + [self.view addSubview:listBtn]; + if (index == 0 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + [self.buttonArray addObject:listBtn]; + + } + + + + self.homeTable = [[QuestionRecoredTable alloc] initWithFrame:CGRectMake(0, 50, kScreenWidth, kScreenHeight - kTopHeight - kRealValue(110)) style:UITableViewStyleGrouped]; + self.homeTable.detailBlock = ^(NSString * _Nonnull recordID, NSString * _Nonnull imID, NSString * _Nonnull memberId, RecordIMListDateModel * _Nonnull model) { + + DoctorMainViewController * doctorVC = [[DoctorMainViewController alloc] init]; + doctorVC.yuyue_id = recordID; + doctorVC.popType = 1; + [self.navigationController pushViewController:doctorVC animated:YES]; + }; + [self.view addSubview:self.homeTable]; + + + + [self.view addSubview:self.homeTable]; + + + __weak __typeof(self) weakSelf = self; + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 1; + + [weakSelf createData]; + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + [weakSelf createData]; + }]; + + LYEmptyView *emptyView = [LYEmptyView emptyViewWithImageStr:@"noData" titleStr:@"暂无数据" detailStr:@""]; + //元素竖直方向的间距 + emptyView.subViewMargin = 20.f; + //标题颜色 + emptyView.titleLabTextColor = [UIColor blackColor]; + //描述字体 + emptyView.detailLabFont = [UIFont systemFontOfSize:17]; + //按钮背景色 + emptyView.actionBtnBackGroundColor = KWhiteColor; + emptyView.actionBtnWidth = CGFLOAT_MIN; + emptyView.actionBtnHeight = CGFLOAT_MIN; + + //设置空内容占位图 + self.homeTable.ly_emptyView = emptyView; + +} +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + [self.homeTable.mj_header beginRefreshing]; +} +- (void)createData { + // type : 1 图文 2 音视频 + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + [parmDic setObject: self.type forKey:@"status"]; + [parmDic setObject:@"2" forKey:@"type"]; + + JKCQAPI * recordApi = [[JKCQAPI alloc] init:self tag:@"RECORD" NeedToken:@""]; + [recordApi GetQuestionRecordList:parmDic]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + if ([tag isEqualToString:@"RECORD"]) { + if (self.pageNo == 1) { + [self.dataArray removeAllObjects]; + } + NSArray * array = response ; + + for (NSDictionary * dic in array) { + + RecordIMListDateModel * model = [ RecordIMListDateModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; + + } +} + +- (void)statusChange:(UIButton *)statusBtn { + + + if (statusBtn.tag == 1000) { + self.type = @"3"; + } + if (statusBtn.tag == 1001) { + self.type = @"1"; + } + if (statusBtn.tag == 1002) { + self.type = @"5"; + } + + for (UIButton * titBtn in self.buttonArray) { + + if (titBtn == statusBtn) { + + titBtn.selected = YES; + titBtn.backgroundColor = UIColorHex(#21BEBD); + + }else + { + titBtn.selected = NO; + titBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + [self.homeTable.mj_header beginRefreshing]; +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/PictureRecordViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/PictureRecordViewController.h new file mode 100644 index 0000000..1414b43 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/PictureRecordViewController.h @@ -0,0 +1,16 @@ +// +// PictureRecordViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PictureRecordViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/PictureRecordViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/PictureRecordViewController.m new file mode 100644 index 0000000..abe808a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/PictureRecordViewController.m @@ -0,0 +1,477 @@ +// +// PictureRecordViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "PictureRecordViewController.h" +#import "QuestionRecoredTable.h" +#import "QuestionRecordModel.h" +#import "RecordIMListDateModel.h" +#import "DoctorMainViewController.h" +@interface PictureRecordViewController () + +@property (nonatomic, strong) QuestionRecoredTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * buttonArray; +@property (nonatomic, strong) NSMutableArray * redCountArray; + +@property (nonatomic, assign) NSInteger pageNo; + +@property (nonatomic, copy) NSString * type; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, strong) NSMutableArray * groupIDArray; + +@property (nonatomic, strong) NSMutableArray * jingxingArray; + +@property (nonatomic, assign) NSInteger totalCount; + +@end + + +@implementation PictureRecordViewController + + +- (NSMutableArray *)groupIDArray { + + if (!_groupIDArray) { + + _groupIDArray = [[NSMutableArray alloc] init]; + + } + return _groupIDArray; + +} + +- (NSMutableArray *)redCountArray { + + if (!_redCountArray) { + + _redCountArray = [[NSMutableArray alloc] init]; + } + return _redCountArray; + +} +- (NSMutableArray *)jingxingArray { + + if (!_jingxingArray) { + + _jingxingArray = [[NSMutableArray alloc] init]; + + } + return _jingxingArray; + +} + + + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + + } + return _dataArray; + +} + +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + + _buttonArray = [[NSMutableArray alloc] init]; + + } + return _buttonArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.pageNo = 0; + self.type = @"3"; + + [self createUI]; + + if ([ESCTUIManager TUIUserStatus] == false) { + + [self loginImAccount]; + } + + if ([self.type integerValue] == 3) + { + [self getChatList]; + } + else + { + [self createData]; + } + +} + +- (void)createUI { + + NSArray * array = @[@"进行中",@"已完成"]; + [self.buttonArray removeAllObjects]; + CGFloat w = kRealValue(80); + for (int index = 0; index < array.count; index ++) { + + UIButton * listBtn = [[UIButton alloc] init]; + + listBtn.frame = CGRectMake(kRealValue(15) + (w + kRealValue(13)) * index , kRealValue(15), w, 27); + [listBtn setTitle:array[index] forState:UIControlStateNormal]; + [listBtn setTitleColor:KWhiteColor forState:UIControlStateSelected]; + [listBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + [listBtn addTarget:self action:@selector(statusChange:) forControlEvents:UIControlEventTouchUpInside]; + listBtn.titleLabel.font = SYSTEMFONT(13); + listBtn.layer.cornerRadius = 14.0; + listBtn.layer.masksToBounds = true; + listBtn.tag = 1000 + index; + [self.view addSubview:listBtn]; + if (index == 0 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.width = kRealValue(90); + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + [self.buttonArray addObject:listBtn]; + + } + + + + self.homeTable = [[QuestionRecoredTable alloc] initWithFrame:CGRectMake(0, 50, kScreenWidth, kScreenHeight - kTopHeight - kRealValue(110) ) style:UITableViewStyleGrouped]; + self.homeTable.detailBlock = ^(NSString * _Nonnull recordID, NSString * _Nonnull imID, NSString * _Nonnull memberId, RecordIMListDateModel * _Nonnull model) { + + DoctorMainViewController * doctorVC = [[DoctorMainViewController alloc] init]; + doctorVC.yuyue_id = imID; + doctorVC.popType = 1; + [self.navigationController pushViewController:doctorVC animated:YES]; + }; + [self.view addSubview:self.homeTable]; + + + + + __weak __typeof(self) weakSelf = self; + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 1; + + [weakSelf createData]; + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + [weakSelf createData]; + }]; + + + self.homeTable = [[QuestionRecoredTable alloc] initWithFrame:CGRectMake(0, 50, kScreenWidth, kScreenHeight - kTopHeight - kRealValue(110)) style:UITableViewStyleGrouped]; + self.homeTable.detailBlock = ^(NSString * _Nonnull recordID, NSString * _Nonnull imID, NSString * _Nonnull memberId, RecordIMListDateModel * _Nonnull model) { + + +// DoctorMainViewController * doctorVC = [[DoctorMainViewController alloc] init]; +// doctorVC.yuyue_id = recordID; +// [self.navigationController pushViewController:doctorVC animated:YES]; + if ([TUILogin isUserLogined]) { + ChatViewController * chatVC = [[ChatViewController alloc] init]; + chatVC.isGroupID = YES; + chatVC.chatID = imID ; + chatVC.eableSendReport = true; + chatVC.eablehaveHelathData = false; + chatVC.navTitle = @"图文咨询"; + chatVC.isVideo = NO; + chatVC.pictureEnd_id = model.Record_id; + chatVC.questionType = 2; + chatVC.medicalRecordsId = memberId; + if ([model.contentStatus intValue] == 5) { + chatVC.isEveal = true; + }else + { + chatVC.isEveal = false; + } + if ([model.contentStatus intValue] >=4 ) { + chatVC.endRecordType = 100; + } + [self.navigationController pushViewController:chatVC animated:YES]; + }else + { + [self loginImAccount]; + } + + }; + [self.view addSubview:self.homeTable]; + + + + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 0; + if ([ESCTUIManager TUIUserStatus] == false) { + + [self loginImAccount]; + } + if ([self.type integerValue] == 3) + { + [self getChatList]; + } + else + { + [weakSelf createData]; + } + + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + if ([ESCTUIManager TUIUserStatus] == false) { + + [self loginImAccount]; + } + if ([self.type integerValue] == 3) + { + [self getChatList]; + } + else + { + [weakSelf createData]; + } + }]; + +} + +//获取腾讯im会话列表 + +- (void)getChatList { + + + V2TIMConversationListFilter *filter = [[V2TIMConversationListFilter alloc] init]; +// filter.type = V2TIM_C2C; //拉取单聊会话 + filter.type = V2TIM_GROUP; //拉取群聊会话 + [[V2TIMManager sharedInstance] getConversationListByFilter:filter nextSeq:self.pageNo count:50 succ:^(NSArray *list, uint64_t nextSeq, BOOL isFinished) { + // 获取会话列表成功,list 为会话列表 + if (self.pageNo == 0) { + [self.groupIDArray removeAllObjects]; + } + DLog(@"%@",list); + [self.redCountArray addObjectsFromArray:list]; + + for (V2TIMConversation * v2Model in list) { + [self.groupIDArray addObject: v2Model.groupID]; + + + } + [self postGroupArray:self.groupIDArray]; + } fail:^(int code, NSString *desc) { + // 获取会话列表失败 + }]; + +// //获取所以会话的未读总数 +// // filter.type = V2TIM_GROUP; //拉取群聊会话 +// +// [[V2TIMManager sharedInstance] getUnreadMessageCountByFilter:filter succ:^(UInt64 totalUnreadCount) { +// self.totalCount = totalUnreadCount; +// } fail:^(int code, NSString *desc) { +// +// }]; + +} + + +#pragma mark:上传id数组 +- (void)postGroupArray:(NSArray *)array { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:array forKey:@"imIds"]; + [self showMBProgressHUDWithString:@"加载中,请稍候..." autoHidden:false]; + JKCQAPI * recordApi = [[JKCQAPI alloc] init:self tag:@"GROUPID" NeedToken:@""]; + [recordApi PostGroupIDArray:parmDic]; +} + + +- (void)createData { + // type : 1 图文 2 音视频 + [self showMBProgressHUDWithString:@"加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + [parmDic setObject:self.type forKey:@"status"]; + [parmDic setObject:@"1" forKey:@"type"]; + //status 1 3 4 5 //4 代评价 + JKCQAPI * recordApi = [[JKCQAPI alloc] init:self tag:@"RECORD" NeedToken:@""]; + [recordApi GetQuestionRecordList:parmDic]; + //getMineQuestionRecord +} + +- (void)loginImAccount { + + + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"IMAPI" NeedToken:nil]; + [proctocolApi GetIMLoginAccount:nil]; + + + +} + + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + [self hiddenAllMBProgressHUD]; + if ([tag isEqualToString:@"RECORD"]) { + if (self.pageNo == 0) { + [self.dataArray removeAllObjects]; + } + NSArray * array = response ; + + for (NSDictionary * dic in array) { + + RecordIMListDateModel * model = [ RecordIMListDateModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; + + } + if ([tag isEqualToString:@"IMAPI"]) { + [self hiddenAllMBProgressHUD]; + + NSDictionary * pamrDic = response; + + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + + // 1. 从即时通信 IM 控制台获取应用 SDKAppID。 + // 2. 初始化 config 对象 + V2TIMSDKConfig *config = [[V2TIMSDKConfig alloc] init]; + // 3. 指定 log 输出级别。 + config.logLevel = V2TIM_LOG_INFO; + // 4. 添加 V2TIMSDKListener 的事件监听器,self 是 id 的实现类,如果您不需要监听 IM SDK 的事件,这个步骤可以忽略。 + [[V2TIMManager sharedInstance] addIMSDKListener:self]; + // 5. 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 + [[V2TIMManager sharedInstance] initSDK:[model.sdkAppId intValue] config:config]; + + // 1. 从即时通信 IM 控制台获取应用 SDKAppID。 + // 2. 初始化 config 对象 + + // 3. 指定 log 输出级别。 + config.logLevel = V2TIM_LOG_INFO; + // 4. 添加 V2TIMSDKListener 的事件监听器,self 是 id 的实现类,如果您不需要监听 IM SDK 的事件,这个步骤可以忽略。 + // 5. 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 + + [TUILogin login:[model.sdkAppId intValue] userID:model.userId userSig:model.userSig succ:^{ + + [self getChatList]; + + } fail:^(int code, NSString *msg) { + + [EasyTextView showErrorText:msg]; + + }]; + + + + + } + if ([tag isEqualToString:@"GROUPID"]) { + [self hiddenAllMBProgressHUD]; + NSArray * array = response; + [self.jingxingArray removeAllObjects]; + for (NSDictionary * parmDic in array) { + + RecordIMListDateModel * model = [ RecordIMListDateModel modelWithDictionary:parmDic]; + + for (V2TIMConversation * v2Model in self.redCountArray) { + + if ([v2Model.groupID isEqualToString:model.imId]) + { + model.unredCount = v2Model.unreadCount; + } + } + + [self.jingxingArray addObject:model]; + } + self.homeTable.dataArray = self.jingxingArray; +// self.homeTable.totalCount + } +} + +- (void)statusChange:(UIButton *)statusBtn { + + [self.dataArray removeAllObjects]; + + if (statusBtn.tag == 1000) { + self.type = @"3"; //进行中 + [self getChatList]; + + } + if (statusBtn.tag == 1001) { + self.type = @"5"; //已评价 + [self createData]; + } + if (statusBtn.tag == 1002) { + self.type = @""; //全部 历史 + [self createData]; + } + for (UIButton * titBtn in self.buttonArray) { + + if (titBtn == statusBtn) { + + titBtn.selected = YES; + titBtn.backgroundColor = UIColorHex(#21BEBD); + + }else + { + titBtn.selected = NO; + titBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } + +} + +//在线时票据过期:此时您需要生成新的 userSig,并再次重新调用初始化。 +- (void)onKickedOffline { + + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + [ESCTUIManager outLoginTUISDK]; + KPostNotification(KNotificationLoginStateChange, @NO); + +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionCompleteViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionCompleteViewController.h new file mode 100644 index 0000000..02275e9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionCompleteViewController.h @@ -0,0 +1,16 @@ +// +// QuestionCompleteViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionCompleteViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionCompleteViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionCompleteViewController.m new file mode 100644 index 0000000..0c621d3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionCompleteViewController.m @@ -0,0 +1,196 @@ +// +// QuestionCompleteViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "QuestionCompleteViewController.h" +#import "QuestionRecoredTable.h" +#import "QuestionRecordModel.h" + +@interface QuestionCompleteViewController () + +@property (nonatomic, strong) QuestionRecoredTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * buttonArray; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, assign) NSInteger pageNo; + +@property (nonatomic, copy) NSString * type; + +@end + +@implementation QuestionCompleteViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + + } + return _dataArray; + +} + +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + + _buttonArray = [[NSMutableArray alloc] init]; + + } + return _buttonArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.pageNo = 1; + self.type = @"1"; + [self createUI]; + [self createData]; +} + +- (void)createUI { + + NSArray * array = @[@"图文咨询",@"视频咨询"]; + [self.buttonArray removeAllObjects]; + CGFloat w = kRealValue(80); + for (int index = 0; index < array.count; index ++) { + + UIButton * listBtn = [[UIButton alloc] init]; + + listBtn.frame = CGRectMake(kRealValue(15) + (w + kRealValue(13)) * index , kRealValue(15), w, 27); + [listBtn setTitle:array[index] forState:UIControlStateNormal]; + [listBtn setTitleColor:KWhiteColor forState:UIControlStateSelected]; + [listBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + [listBtn addTarget:self action:@selector(statusChange:) forControlEvents:UIControlEventTouchUpInside]; + listBtn.titleLabel.font = SYSTEMFONT(13); + listBtn.layer.cornerRadius = 14.0; + listBtn.layer.masksToBounds = true; + listBtn.tag = 1000 + index; + [self.view addSubview:listBtn]; + if (index == 0 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.width = kRealValue(90); + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + [self.buttonArray addObject:listBtn]; + + } + + + + self.homeTable = [[QuestionRecoredTable alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + [self.view addSubview:self.homeTable]; + + [self.homeTable mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(@50); + make.bottom.left.right.mas_offset(0); + }]; + + + __weak __typeof(self) weakSelf = self; + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 1; + + [weakSelf createData]; + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + [weakSelf createData]; + }]; + +} + +- (void)createData { + // type : 1 图文 2 音视频 + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + [parmDic setObject:@"5" forKey:@"status"]; + [parmDic setObject:self.type forKey:@"type"]; + + JKCQAPI * recordApi = [[JKCQAPI alloc] init:self tag:@"RECORD" NeedToken:@""]; + [recordApi GetQuestionRecordList:parmDic]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + if ([tag isEqualToString:@"RECORD"]) { + if (self.pageNo == 1) { + [self.dataArray removeAllObjects]; + } + NSArray * array = response ; + + for (NSDictionary * dic in array) { + + QuestionRecordModel * model = [QuestionRecordModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; + + } +} + +- (void)statusChange:(UIButton *)statusBtn { + + if (statusBtn.tag == 1000) { + self.type = @"1"; + } + if (statusBtn.tag == 1001) { + self.type = @"2"; + } + for (UIButton * titBtn in self.buttonArray) { + + if (titBtn == statusBtn) { + + titBtn.selected = YES; + titBtn.backgroundColor = UIColorHex(#21BEBD); + + }else + { + titBtn.selected = NO; + titBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionJingxingViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionJingxingViewController.h new file mode 100644 index 0000000..b29432a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionJingxingViewController.h @@ -0,0 +1,16 @@ +// +// QuestionJingxingViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionJingxingViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionJingxingViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionJingxingViewController.m new file mode 100644 index 0000000..ed6df0a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QuestionJingxingViewController.m @@ -0,0 +1,196 @@ +// +// QuestionJingxingViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "QuestionJingxingViewController.h" +#import "QuestionRecoredTable.h" +#import "QuestionRecordModel.h" + +@interface QuestionJingxingViewController () + +@property (nonatomic, strong) QuestionRecoredTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * buttonArray; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, assign) NSInteger pageNo; + +@property (nonatomic, copy) NSString * type; + +@end + +@implementation QuestionJingxingViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + + } + return _dataArray; + +} + +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + + _buttonArray = [[NSMutableArray alloc] init]; + + } + return _buttonArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.pageNo = 1; + self.type = @"1"; + [self createUI]; + [self createData]; +} + +- (void)createUI { + + NSArray * array = @[@"图文咨询",@"视频咨询"]; + [self.buttonArray removeAllObjects]; + CGFloat w = kRealValue(80); + for (int index = 0; index < array.count; index ++) { + + UIButton * listBtn = [[UIButton alloc] init]; + + listBtn.frame = CGRectMake(kRealValue(15) + (w + kRealValue(13)) * index , kRealValue(15), w, 27); + [listBtn setTitle:array[index] forState:UIControlStateNormal]; + [listBtn setTitleColor:KWhiteColor forState:UIControlStateSelected]; + [listBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + [listBtn addTarget:self action:@selector(statusChange:) forControlEvents:UIControlEventTouchUpInside]; + listBtn.titleLabel.font = SYSTEMFONT(13); + listBtn.layer.cornerRadius = 14.0; + listBtn.layer.masksToBounds = true; + listBtn.tag = 1000 + index; + [self.view addSubview:listBtn]; + if (index == 0 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.width = kRealValue(90); + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + [self.buttonArray addObject:listBtn]; + + } + + + + self.homeTable = [[QuestionRecoredTable alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + [self.view addSubview:self.homeTable]; + + [self.homeTable mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(@50); + make.bottom.left.right.mas_offset(0); + }]; + + + __weak __typeof(self) weakSelf = self; + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 1; + + [weakSelf createData]; + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + [weakSelf createData]; + }]; + +} + +- (void)createData { + // type : 1 图文 2 音视频 + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + [parmDic setObject:@"3" forKey:@"status"]; + [parmDic setObject:self.type forKey:@"type"]; + + JKCQAPI * recordApi = [[JKCQAPI alloc] init:self tag:@"RECORD" NeedToken:@""]; + [recordApi GetQuestionRecordList:parmDic]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + if ([tag isEqualToString:@"RECORD"]) { + if (self.pageNo == 1) { + [self.dataArray removeAllObjects]; + } + NSArray * array = response ; + + for (NSDictionary * dic in array) { + + QuestionRecordModel * model = [QuestionRecordModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; + + } +} + +- (void)statusChange:(UIButton *)statusBtn { + + if (statusBtn.tag == 1000) { + self.type = @"1"; + } + if (statusBtn.tag == 1001) { + self.type = @"2"; + } + for (UIButton * titBtn in self.buttonArray) { + + if (titBtn == statusBtn) { + + titBtn.selected = YES; + titBtn.backgroundColor = UIColorHex(#21BEBD); + + }else + { + titBtn.selected = NO; + titBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionRecordViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionRecordViewController.h new file mode 100644 index 0000000..b6c59bf --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionRecordViewController.h @@ -0,0 +1,16 @@ +// +// QustionRecordViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QustionRecordViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionRecordViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionRecordViewController.m new file mode 100644 index 0000000..21827d5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionRecordViewController.m @@ -0,0 +1,272 @@ +// +// QustionRecordViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "QustionRecordViewController.h" +#import "AudioVideoRecordViewController.h" +#import "PictureRecordViewController.h" +#import "QuestionCompleteViewController.h" +#import "QustionWaitEvlaViewController.h" +#import "QuestionJingxingViewController.h" +#import "QustionWaitEvlaViewController.h" + +@interface QustionRecordViewController () + +/** 顶部控件*/ +@property (nonatomic, weak) UIScrollView *topView; +/** 下划线 */ +@property (nonatomic, weak) UIView *lineView; +/** 滚动视图 */ +@property (nonatomic, weak) UICollectionView *collectionView; +/** 当前选中的按钮 */ +@property (nonatomic, weak) UIButton *selectButton; +/** 按钮数组 */ +@property (nonatomic, strong) NSMutableArray *titleButtons; + +@end + +@implementation QustionRecordViewController + +#pragma mark - 懒加载 +- (NSMutableArray *)titleButtons { + if (_titleButtons==nil) { + _titleButtons = [NSMutableArray array]; + } + return _titleButtons; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = NO; + self.navigationItem.title = @"我的咨询"; + self.view.backgroundColor = UIColorBackground; +// [self addNavigationItemWithImageNames:@[@"backIcon@2x"] isLeft:YES target:self action:@selector(popVc) tags:@[@"100"]]; + [self createUI]; + +} + +#pragma mark:返回 +- (void)popVc +{ + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)createUI +{ + [self setupNavgationBar]; + + // 添加底部内容view + [self setupBottomContentView]; + + // 添加所有子控制器 + [self setupAllChildViewController]; + + [self setupAllTitle]; + + // 不添加额外滚动区域 + self.automaticallyAdjustsScrollViewInsets = NO; +} + +#pragma mark - 添加所有的子控制器 +- (void)setupAllChildViewController { + + PictureRecordViewController * pictureVc = [[PictureRecordViewController alloc] init]; + pictureVc.view.backgroundColor = UIColorBackground; + pictureVc.navigationItem.title = @"图文咨询"; + [self addChildViewController:pictureVc]; + + // + AudioVideoRecordViewController * videoVc = [[AudioVideoRecordViewController alloc] init]; + videoVc.view.backgroundColor = UIColorBackground; + videoVc.navigationItem.title = @"视频咨询"; + [self addChildViewController:videoVc]; + // +// QuestionJingxingViewController * jingxingVc = [[QuestionJingxingViewController alloc] init]; +// jingxingVc.view.backgroundColor = UIColorBackground; +// jingxingVc.navigationItem.title = @"进行中"; +// [self addChildViewController:jingxingVc]; +// // +// QustionWaitEvlaViewController * evlVc = [[QustionWaitEvlaViewController alloc] init]; +// evlVc.view.backgroundColor = UIColorBackground; +// evlVc.navigationItem.title = @"待评价"; +// [self addChildViewController:evlVc]; +// // +// QuestionCompleteViewController * completeVc = [[QuestionCompleteViewController alloc] init]; +// completeVc.view.backgroundColor = UIColorBackground; +// completeVc.navigationItem.title = @"已完成"; +// [self addChildViewController:completeVc]; +} + +#pragma mark - 设置导航条内容 +- (void)setupNavgationBar { + UIScrollView *topView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 1, kScreenWidth, kRealValue(48))]; + topView.backgroundColor = [UIColor whiteColor]; + _topView = topView; + [self.view addSubview:topView]; +} + +#pragma mark - 按钮被点击 +- (void)titleClick:(UIButton *)titleButton{ + + NSInteger i = titleButton.tag; + // 重复点击标题按钮的时候,刷新当前界面 + if (titleButton == _selectButton) { + } + + [self selButton:titleButton]; + + //滚动collectionView 修改偏移量 + CGFloat offsetX = i * kScreenWidth; + _collectionView.contentOffset = CGPointMake(offsetX, 0); +} + +#pragma mark - 选中标题按钮 +- (void)selButton:(UIButton *)titleButton{ + + _selectButton.selected = NO; + titleButton.selected = YES; + _selectButton = titleButton; + + // 移动下划线的位置 + [UIView animateWithDuration:0.25 animations:^{ + _lineView.centerX = titleButton.centerX; + }]; +} + +#pragma mark - 添加标题 +- (void)setupAllTitle{ + + NSUInteger count = self.childViewControllers.count; + CGFloat btnX = 0; + CGFloat btnW = kScreenWidth/count; + CGFloat btnH = _topView.height; + for (int i = 0; i < count; i++) { + UIButton *titleButton = [UIButton buttonWithType:UIButtonTypeCustom]; + titleButton.tag = i; + + UIViewController *vc = self.childViewControllers[i]; + [titleButton setTitle:vc.navigationItem.title forState:UIControlStateNormal]; + // 设置标题颜色 + [titleButton setTitleColor:RGBA(34, 34, 34, 1) forState:UIControlStateSelected]; + [titleButton setTitleColor:RGBA(102, 102, 102, 1) forState:UIControlStateNormal]; + + // 设置标题字体 + titleButton.titleLabel.font = MEDIUMFONT(14); + + btnX = i * btnW; + + titleButton.frame = CGRectMake(btnX, 0, btnW, btnH); + + // 监听按钮点击 + [titleButton addTarget:self action:@selector(titleClick:) forControlEvents:UIControlEventTouchUpInside]; + + [_topView addSubview:titleButton]; + + if (i == 0) { + // 添加下划线 + // 下划线宽度 = 按钮文字宽度 + // 下划线中心点x = 按钮中心点x + CGFloat h = 5; + CGFloat y = kRealValue(45) ; + UIView *lineView =[[UIView alloc] init]; + // 位置和尺寸 + lineView.height = h; + // 先计算文字尺寸,在给label去赋值 + [titleButton.titleLabel sizeToFit]; + lineView.width = kRealValue(28); + lineView.centerX = titleButton.centerX; + lineView.mj_y = y; + lineView.backgroundColor = UIColorHex(#21BEBD); + _lineView = lineView; + [_topView addSubview:lineView]; + + [self titleClick:titleButton]; + } + [self.titleButtons addObject:titleButton]; + } +} + +#pragma mark - 添加底部内容view +- (void)setupBottomContentView +{ + // 创建一个流水布局 + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.itemSize = CGSizeMake(kScreenWidth, kScreenHeight-44); + + // 设置水平滚动方向 + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.minimumInteritemSpacing = 0; + layout.minimumLineSpacing = 0; + + // 创建UICollectionView + UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0,kRealValue(48), kScreenWidth, kScreenHeight - kRealValue(48) ) collectionViewLayout:layout]; + collectionView.backgroundColor = [UIColor whiteColor]; + [self.view addSubview:collectionView]; + _collectionView = collectionView; + collectionView.scrollsToTop = NO; + collectionView.scrollEnabled = YES; + // 开启分页 + collectionView.pagingEnabled = YES; + collectionView.showsHorizontalScrollIndicator = NO; + collectionView.bounces = YES; + + // 展示cell + collectionView.dataSource = self; + collectionView.delegate = self; + + // 注册cell + [collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"COUPCELLID"]; +} + +#pragma mark - UICollectionViewDelegate +// 滚动完成的时候就会调用 +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ + // 获取角标 + NSInteger i = scrollView.contentOffset.x / kScreenWidth; + + // 获取选中标题 + UIButton *selButton = self.titleButtons[i]; + + // 选中标题 + [self selButton:selButton]; +} + +#pragma mark - UICollectionViewDataSource +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ + + return self.childViewControllers.count; +} + +// 只要有新的cell出现的时候才会调用 +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ + + UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"COUPCELLID" forIndexPath:indexPath]; + + // 移除之前子控制器view + [cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + + // 取出对应的子控制器添加到对应cell上 + UIViewController *vc = self.childViewControllers[indexPath.row]; + + [cell.contentView addSubview:vc.view]; + + return cell; +} + + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionWaitEvlaViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionWaitEvlaViewController.h new file mode 100644 index 0000000..38e533f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionWaitEvlaViewController.h @@ -0,0 +1,16 @@ +// +// QustionWaitEvlaViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QustionWaitEvlaViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionWaitEvlaViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionWaitEvlaViewController.m new file mode 100644 index 0000000..f38c4ba --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/QusetionRecord(咨询记录)/QustionWaitEvlaViewController.m @@ -0,0 +1,196 @@ +// +// QustionWaitEvlaViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "QustionWaitEvlaViewController.h" +#import "QuestionRecoredTable.h" +#import "QuestionRecordModel.h" + +@interface QustionWaitEvlaViewController () + +@property (nonatomic, strong) QuestionRecoredTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * buttonArray; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, assign) NSInteger pageNo; + +@property (nonatomic, copy) NSString * type; + +@end + +@implementation QustionWaitEvlaViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + + } + return _dataArray; + +} + +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + + _buttonArray = [[NSMutableArray alloc] init]; + + } + return _buttonArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.pageNo = 1; + self.type = @"1"; + [self createUI]; + [self createData]; +} + +- (void)createUI { + + NSArray * array = @[@"图文咨询",@"视频咨询"]; + [self.buttonArray removeAllObjects]; + CGFloat w = kRealValue(80); + for (int index = 0; index < array.count; index ++) { + + UIButton * listBtn = [[UIButton alloc] init]; + + listBtn.frame = CGRectMake(kRealValue(15) + (w + kRealValue(13)) * index , kRealValue(15), w, 27); + [listBtn setTitle:array[index] forState:UIControlStateNormal]; + [listBtn setTitleColor:KWhiteColor forState:UIControlStateSelected]; + [listBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + [listBtn addTarget:self action:@selector(statusChange:) forControlEvents:UIControlEventTouchUpInside]; + listBtn.titleLabel.font = SYSTEMFONT(13); + listBtn.layer.cornerRadius = 14.0; + listBtn.layer.masksToBounds = true; + listBtn.tag = 1000 + index; + [self.view addSubview:listBtn]; + if (index == 0 ) { + listBtn.selected = YES; + listBtn.backgroundColor = UIColorHex(#21BEBD); + }else{ + listBtn.width = kRealValue(90); + listBtn.backgroundColor = UIColorHex(#DDDDDD); + } + [self.buttonArray addObject:listBtn]; + + } + + + + self.homeTable = [[QuestionRecoredTable alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + [self.view addSubview:self.homeTable]; + + [self.homeTable mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(@50); + make.bottom.left.right.mas_offset(0); + }]; + + + __weak __typeof(self) weakSelf = self; + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 1; + + [weakSelf createData]; + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + [weakSelf createData]; + }]; + +} + +- (void)createData { + // type : 1 图文 2 音视频 + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + [parmDic setObject:@"4" forKey:@"status"]; + [parmDic setObject:self.type forKey:@"type"]; + + JKCQAPI * recordApi = [[JKCQAPI alloc] init:self tag:@"RECORD" NeedToken:@""]; + [recordApi GetQuestionRecordList:parmDic]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + if ([tag isEqualToString:@"RECORD"]) { + if (self.pageNo == 1) { + [self.dataArray removeAllObjects]; + } + NSArray * array = response ; + + for (NSDictionary * dic in array) { + + QuestionRecordModel * model = [QuestionRecordModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; + + } +} + +- (void)statusChange:(UIButton *)statusBtn { + + if (statusBtn.tag == 1000) { + self.type = @"1"; + } + if (statusBtn.tag == 1001) { + self.type = @"2"; + } + for (UIButton * titBtn in self.buttonArray) { + + if (titBtn == statusBtn) { + + titBtn.selected = YES; + titBtn.backgroundColor = UIColorHex(#21BEBD); + + }else + { + titBtn.selected = NO; + titBtn.backgroundColor = UIColorHex(#DDDDDD); + } + + } +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomDoctorRecordsVC.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomDoctorRecordsVC.h new file mode 100644 index 0000000..35996e7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomDoctorRecordsVC.h @@ -0,0 +1,16 @@ +// +// RoomDoctorRecordsVC.h +// QinghaiProject +// +// Created by Apple on 2024/7/5. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface RoomDoctorRecordsVC : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomDoctorRecordsVC.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomDoctorRecordsVC.m new file mode 100644 index 0000000..59c8175 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomDoctorRecordsVC.m @@ -0,0 +1,302 @@ +// +// RoomDoctorRecordsVC.m +// QinghaiProject +// +// Created by Apple on 2024/7/5. +// + +#import "RoomDoctorRecordsVC.h" +#import "AllRoomRecordsCell.h" +#import "HomeQusetionRecordsModel.h" + +@interface RoomDoctorRecordsVC () + +@property (nonatomic, strong) UITableView * homeTable; +@property (nonatomic, strong) NSMutableArray * dataArray; +@property (nonatomic, assign) NSInteger page; +@property (nonatomic, assign) NSInteger totalCount; + + +@end + +@implementation RoomDoctorRecordsVC + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = true; + self.view.backgroundColor = CViewBgColor; + [self createUI]; + [self createData]; + +} + + +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + + [self.homeTable.mj_header beginRefreshing]; + +} + +- (void)createUI +{ + + UIImageView * topBackImage = [[UIImageView alloc] init]; + topBackImage.image = [UIImage imageNamed:@"roomTopImg"]; + topBackImage.userInteractionEnabled = true; + [self.view addSubview:topBackImage]; + + [topBackImage mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.left.right.mas_offset(0); + make.height.mas_offset(331); + }]; + + + + // 创建标题标签 + UILabel * titleLabel = [[UILabel alloc] init]; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.text = @"全科医生咨询记录"; + titleLabel.textColor = KWhiteColor; + titleLabel.font = [UIFont boldSystemFontOfSize:18]; + [topBackImage addSubview:titleLabel]; + + [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_offset(kStatusBarHeight+kRealValue(15)); + make.left.right.mas_offset(0); + make.height.mas_offset(kRealValue(30)); + }]; + + // 创建左边按钮 + UIButton * backButton = [[UIButton alloc] init]; + [backButton setImage:[UIImage imageNamed:@"whiteBack_icon"] forState:UIControlStateNormal]; + [backButton addTarget:self action:@selector(backOnclick) forControlEvents:UIControlEventTouchUpInside]; + [topBackImage addSubview:backButton]; + + [backButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_offset(kStatusBarHeight+kRealValue(15)); + make.left.mas_offset(kRealValue(15)); + make.height.width.mas_offset(kRealValue(30)); + }]; + + + + self.homeTable = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; + self.homeTable.backgroundColor = KClearColor; + [self.view addSubview:self.homeTable]; + + if (@available(iOS 11.0, *)) { + self.homeTable.estimatedRowHeight = 0; + self.homeTable.estimatedSectionFooterHeight = 0; + self.homeTable.estimatedSectionHeaderHeight = 0; + self.homeTable.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.homeTable.delegate = self; + self.homeTable.dataSource = self; + self.homeTable.separatorStyle = UITableViewCellSeparatorStyleNone; + self.homeTable.showsVerticalScrollIndicator = NO; + self.homeTable.estimatedRowHeight = 60; + self.homeTable.rowHeight = UITableViewAutomaticDimension; + [self.view addSubview:self.homeTable]; + [self.homeTable mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_offset(kStatusBarHeight+kRealValue(60)); + make.left.right.bottom.mas_offset(0); + + }]; + + __weak __typeof(self) weakSelf = self; + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + self.page = 1; + [weakSelf createData]; + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + self.page++; + [weakSelf createData]; + }]; + + //初始化一个emptyView + LYEmptyView *emptyView = [LYEmptyView emptyViewWithImage:[UIImage imageNamed:@"noQuetionList"] + titleStr:@"暂无咨询记录" detailStr:@""]; + + //元素竖直方向的间距 + emptyView.titleLabMargin = kRealValue(5); + emptyView.contentViewY = kRealValue(450); + + emptyView.imageSize = CGSizeMake(kRealValue(101), kRealValue(60)); + //标题颜色 + emptyView.titleLabTextColor =UIColorHex(#14BEBE); + //描述字体 + emptyView.titleLabFont = [UIFont systemFontOfSize:15]; + //按钮背景色 + //设置空内容占位图 + self.homeTable.ly_emptyView = emptyView; + + V2TIMConversationListFilter *filter = [[V2TIMConversationListFilter alloc] init]; +// filter.type = V2TIM_C2C; //拉取单聊会话 + filter.type = V2TIM_GROUP; //拉取群聊会话 + + +// //获取所以会话的未读总数 +// // filter.type = V2TIM_GROUP; //拉取群聊会话 +// + [[V2TIMManager sharedInstance] getUnreadMessageCountByFilter:filter succ:^(UInt64 totalUnreadCount) { + self.totalCount = totalUnreadCount; + } fail:^(int code, NSString *desc) { + + }]; + + +} + +- (void)backOnclick { + + + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)createData { + + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(self.page) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"RECOMMEND" NeedToken:@""]; + [searchApi GetAllDoctorRecordsList:parmDic]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + +} + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + if ([tag isEqualToString:@"RECOMMEND"]) { + [self hiddenAllMBProgressHUD]; + NSArray * array = response ; + + if (self.page == 1) { + [self.dataArray removeAllObjects]; + } + int i = 0; + for (NSDictionary * dic in array) { + + HomeQusetionRecordsModel * model = [HomeQusetionRecordsModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + i ++; + + } + [self.homeTable reloadData];; + + } + +} + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return 1; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + static NSString * cellID = @"cellID"; + + AllRoomRecordsCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[AllRoomRecordsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.backgroundColor = KClearColor; + cell.model = self.dataArray[indexPath.section]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + HomeQusetionRecordsModel * model = self.dataArray[indexPath.section]; + + if ([TUILogin isUserLogined]) { + ChatViewController * chatVC = [[ChatViewController alloc] init]; + chatVC.isGroupID = YES; + chatVC.chatID = model.imId ; + chatVC.eableSendReport = true; + chatVC.eablehaveHelathData = false; + chatVC.navTitle = @"全科医生咨询"; + chatVC.isVideo = NO; + chatVC.pictureEnd_id =model.records_id ; + chatVC.questionType = 2; + chatVC.medicalRecordsId = model.memberId; + if ([model.contentStatus intValue] == 5) { + chatVC.isEveal = true; + }else + { + chatVC.isEveal = false; + } + if ([model.contentStatus intValue] >=4 ) { + chatVC.endRecordType = 100; + } + [self.navigationController pushViewController:chatVC animated:YES]; + }else + { + [EasyTextView showErrorText:@"登录过期,请重新登录!"]; + } +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return kRealValue(15); +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return kRealValue(15);; +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + return [[UIView alloc] init]; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomSearchResultViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomSearchResultViewController.h new file mode 100644 index 0000000..0e716f0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomSearchResultViewController.h @@ -0,0 +1,18 @@ +// +// RoomSearchResultViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/10/20. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface RoomSearchResultViewController : HQBaseViewController + +@property (nonatomic, copy) NSString * keyWord; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomSearchResultViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomSearchResultViewController.m new file mode 100644 index 0000000..1396ac7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/RoomSearchResultViewController.m @@ -0,0 +1,134 @@ +// +// RoomSearchResultViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/10/20. +// + +#import "RoomSearchResultViewController.h" +#import "DoctorRoomCollectionView.h" +#import "SearchZhuangJiaViewController.h" +#import "FoundExpertModel.h" +#import "HQSearchView.h" + +@interface RoomSearchResultViewController () + +@property (nonatomic, strong) DoctorRoomCollectionView * collectView; + +@property (nonatomic, strong) NSMutableArray * dataArray; +@end + +@implementation RoomSearchResultViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; +} +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.view.backgroundColor = KWhiteColor; + self.navigationItem.title = @"按科室找专家"; + [self createUI]; + [self createData]; +} + +- (void)createUI { + + HQSearchView * seacrhView = [[HQSearchView alloc] initWithFrame:CGRectMake(0, 8, kScreenWidth, 35)]; + seacrhView.backgroundColor = KWhiteColor; + seacrhView.searchPlacehold = @"输入科室名称"; + MJWeakSelf; + seacrhView.searchBlock = ^(NSString * _Nonnull fieldtext) { + if (!ValidStr(fieldtext)) { + weakSelf.keyWord = fieldtext; + [self createData]; + }else + { + [EasyTextView showErrorText:@"请输入关键字搜索"]; + } + + + }; + [self.view addSubview:seacrhView]; + + //找专家 + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; + layout.itemSize = CGSizeMake((kScreenWidth - 30)/2,95); + layout.scrollDirection = UICollectionViewScrollDirectionVertical; + layout.sectionInset = UIEdgeInsetsMake(10, 10, 0, 10); + layout.minimumInteritemSpacing =10; + layout.minimumLineSpacing =10; + + self.collectView = [[DoctorRoomCollectionView alloc]initWithFrame:CGRectMake(0, seacrhView.bottom +8,kScreenWidth, kScreenHeight - kTopHeight - seacrhView.height - 16) collectionViewLayout:layout]; + [self.view addSubview:self.collectView]; + ; + self.collectView.roomBlock = ^(NSString * _Nonnull deparmentID, NSString * _Nonnull deparmentName) { + SearchZhuangJiaViewController * searvc = [[SearchZhuangJiaViewController alloc] init]; + searvc.departmentId = deparmentID; + searvc.departmentName = deparmentName; + searvc.sickId = @""; + searvc.hospitalId = @""; + searvc.doctorName = @""; + searvc.hospitalName = @""; + [weakSelf.navigationController pushViewController:searvc animated:YES]; + }; + +} + +- (void)createData { + + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:@"100" forKey:@"pageSize"]; + [dic setObject:@"1" forKey:@"pageNumber"]; + [dic setObject:self.keyWord forKey:@"search"]; + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"ROOMAPI" NeedToken:@""]; +// GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/es/searchConDepartment?search=%E5%86%85%E7%A7%91&pageNumber=1&pageSize=100 HTTP/1.1 + [searchApi getSearchRoomListData:dic]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + + if ([tag isEqualToString:@"ROOMAPI"]) { + + NSArray * array = response ; + + + + for (NSDictionary * dic in array) { + + DepartmentModel * model = [DepartmentModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + self.collectView.dataArray = self.dataArray; +// + } +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertSubViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertSubViewController.h new file mode 100644 index 0000000..dae9643 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertSubViewController.h @@ -0,0 +1,20 @@ +// +// FoundExpertSubViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import "HQBaseViewController.h" +#import "FoundExpertSubCollection.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FoundExpertSubViewController : HQBaseViewController + +@property (nonatomic, copy) NSString * searchWord; +@property (nonatomic, strong) FoundExpertSubCollection * collectView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertSubViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertSubViewController.m new file mode 100644 index 0000000..495e789 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertSubViewController.m @@ -0,0 +1,108 @@ +// +// FoundExpertSubViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import "FoundExpertSubViewController.h" +#import "HQSearchView.h" +#import "FoundExpertModel.h" +#import "SearchZhuangJiaViewController.h" +@interface FoundExpertSubViewController () + + +@end + +@implementation FoundExpertSubViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = KWhiteColor; + self.isHidenNaviBar = false; + self.navigationItem.title = @"按疾病找专家"; + [self createUI]; + [self searchSikc]; +} + +- (void)createUI { + + HQSearchView * seacrhView = [[HQSearchView alloc] initWithFrame:CGRectMake(0, 8, kScreenWidth, 35)]; + seacrhView.backgroundColor = KWhiteColor; + seacrhView.searchPlacehold = @"输入关键字"; + seacrhView.searchField.text = self.searchWord; + seacrhView.searchBlock = ^(NSString * _Nonnull fieldtext) { + + }; + [self.view addSubview:seacrhView]; + + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; + layout.itemSize = CGSizeMake((kScreenWidth - 30)/2,26); + layout.scrollDirection = UICollectionViewScrollDirectionVertical; + layout.sectionInset = UIEdgeInsetsMake(10, 10, 0, 10); + layout.minimumInteritemSpacing =10; + layout.minimumLineSpacing =10; + MJWeakSelf + self.collectView = [[FoundExpertSubCollection alloc]initWithFrame:CGRectMake(0, seacrhView.bottom + 5,kScreenWidth, kScreenHeight - kTopHeight - 50) collectionViewLayout:layout]; + self.collectView.sickBlock = ^(SicksModel * _Nonnull model) { + SearchZhuangJiaViewController * searVC = [[SearchZhuangJiaViewController alloc] init]; + searVC.sickId = model.sick_id; + searVC.sickName = model.sicksName; + searVC.departmentId = @""; + searVC.hospitalId = @""; + searVC.doctorName = @""; + [weakSelf.navigationController pushViewController:searVC animated:YES]; + }; + [self.view addSubview:self.collectView]; +} + +#pragma mark:找疾病 +- (void)searchSikc { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:self.searchWord forKey:@"search"]; + [dic setObject:@(1) forKey:@"pageNumber"]; + [dic setObject:@(100) forKey:@"pageSize"]; + + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"SicksSEARCH" NeedToken:@""]; + + [searchApi getSearchSicksListData:dic]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"SicksSEARCH"]) { + + NSMutableArray * sickArray = [[NSMutableArray alloc] init]; + for (NSDictionary * dic in response) { + + SicksModel * model = [SicksModel modelWithDictionary:dic]; + [sickArray addObject:model]; + } + self.collectView.dataArray = sickArray; + + } + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertViewController.h new file mode 100644 index 0000000..19f3c05 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertViewController.h @@ -0,0 +1,16 @@ +// +// FoundExpertViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FoundExpertViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertViewController.m new file mode 100644 index 0000000..7be4ff0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundExpertViewController.m @@ -0,0 +1,476 @@ +// +// FoundExpertViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import "FoundExpertViewController.h" +#import "HQSearchView.h" +#import "hospitalListTableView.h" +#import "HospitalInfoModel.h" +#import "DoctorRoomCollectionView.h" +#import "ZHTagListView.h" +#import "FoundExpertSubViewController.h" +#import "FoundRoomsViewController.h" +#import "FoundHospitalViewController.h" +#import "MainSearchViewController.h" +#import "FoundExpertModel.h" +#import "FoundJIBingViewController.h" +#import "SearchZhuangJiaViewController.h" +#import "HospitalMainViewController.h" +#import "SearchZhuangJiaViewController.h" + +@interface FoundExpertViewController () + +@property (nonatomic, strong) UIScrollView * mainScrollview; + +@property (nonatomic, strong) hospitalListTableView * homeTable; + +@property (nonatomic, strong)DoctorRoomCollectionView * collectView; + +@property (nonatomic, strong) UIView * hospatilview; + +@property (nonatomic, strong) UIView * roomView; + +@property (nonatomic, strong) UIView * diseaView; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, strong) ZHTagListView * tagList; + +@property (nonatomic, strong) UILabel * hospatilTitLabel; +@property (nonatomic, strong) UILabel * roomTitLabel; +@property (nonatomic, strong) UILabel * sickTitLabel; + +@property (nonatomic, strong) NSMutableArray * sicksDataArray; + +@end + +@implementation FoundExpertViewController + + +- (NSMutableArray *)sicksDataArray { + + if (!_sicksDataArray) { + + _sicksDataArray = [[NSMutableArray alloc] init]; + + } + return _sicksDataArray; +} + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = KWhiteColor; + self.isHidenNaviBar = false; + self.navigationItem.title = @"找专家"; + [self createUI]; + [self getFoundData]; +} + + + +- (void)createUI { + + self.mainScrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]; + [self.view addSubview:self.mainScrollview]; + + + HQSearchView * seacrhView = [[HQSearchView alloc] initWithFrame:CGRectMake(0, 8, kScreenWidth, 35)]; + seacrhView.backgroundColor = KWhiteColor; + seacrhView.searchPlacehold = @"请输入关键字"; + seacrhView.searchBlock = ^(NSString * _Nonnull fieldtext) { + if (ValidStr(fieldtext)) { + [self showMBProgressHUDOnlyWithString:@"请输入关键字"]; + return; + } + MainSearchViewController * searchVC = [[MainSearchViewController alloc] init]; + searchVC.keywordString = fieldtext; + [self.navigationController pushViewController:searchVC animated:YES]; + + }; + [self.mainScrollview addSubview:seacrhView]; + + // 按医院找专家视图 + [self createHospitalView]; + + // 按科室找专家 + [self createRoomView]; + + // 按疾病找专家 + [self createDoctorView]; + + // 滚动范围 + +} + +#pragma mark:按医院找专家 +- (void)createHospitalView { + + CGFloat hositalH = 200; + + self.hospatilview = [[UIView alloc] initWithFrame:CGRectMake(0, kRealValue(64), kScreenWidth, hositalH)]; + [self.mainScrollview addSubview:self.hospatilview]; + + UILabel * titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), 0 , 110, 15)]; + titleLabel.text = @"按医院找专家"; + titleLabel.font = MEDIUMFONT(15); + titleLabel.textAlignment = NSTextAlignmentLeft; + titleLabel.textColor = CFontColor1; + self.hospatilTitLabel = titleLabel; + [self.hospatilview addSubview:titleLabel]; + + YYLabel * moreLabel = [[YYLabel alloc]initWithFrame:CGRectMake(kScreenWidth - 130,0, 120, 17)]; + moreLabel.text = @"全部医院 "; + moreLabel.textColor = UIColorHex(#999999); + [self.hospatilview addSubview:moreLabel]; + + UIImage *image = [UIImage imageNamed:@"ic_more_info"]; + + NSMutableAttributedString * attri = [[NSMutableAttributedString alloc] initWithString:moreLabel.text]; + + NSMutableAttributedString * attachText = [NSMutableAttributedString attachmentStringWithContent:image contentMode:UIViewContentModeCenter attachmentSize:CGSizeMake(6, 11) alignToFont:[UIFont boldSystemFontOfSize:13] alignment:YYTextVerticalAlignmentCenter]; //content:内容  size:图片尺寸 alignToFont:字符串内字体的格式 + [attri appendAttributedString:attachText]; + + moreLabel.attributedText = attri; + + moreLabel.textAlignment = NSTextAlignmentRight; + + [moreLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + + [self allHospation]; + }]; +// table + self.homeTable = [[hospitalListTableView alloc] initWithFrame:CGRectMake(0, moreLabel.bottom + 10, kScreenWidth, 240) style:UITableViewStyleGrouped]; + +// self.homeTable.backgroundColor = KRedColor; + MJWeakSelf + self.homeTable.hospatalBlock = ^(NSString * _Nonnull hopsitalID, NSString * _Nonnull hopatialName) { + + HospitalMainViewController * mainVC = [[HospitalMainViewController alloc] init]; + mainVC.hospitalID = hopsitalID; + [weakSelf.navigationController pushViewController:mainVC animated:YES]; + }; + + self.homeTable.scrollEnabled =NO; + + [self.hospatilview addSubview:self.homeTable]; + + hositalH = self.homeTable.bottom; + + self.hospatilview.height = hositalH; + +} + + +- (void)createRoomView { + + + CGFloat roomH = 200; + + self.roomView = [[UIView alloc] initWithFrame:CGRectMake(0, self.hospatilview.bottom + kRealValue(19), kScreenWidth, roomH)]; + [self.mainScrollview addSubview:self.roomView]; + + UILabel * roomLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), 0 , 110, 15)]; + roomLabel.text = @"按科室找专家"; + roomLabel.font = MEDIUMFONT(15); + self.roomTitLabel = roomLabel; + roomLabel.textAlignment = NSTextAlignmentLeft; + roomLabel.textColor = CFontColor1; + [self.roomView addSubview:roomLabel]; + + YYLabel * allRoomLabel = [[YYLabel alloc]initWithFrame:CGRectMake(kScreenWidth - 130, 0, 120, 17)]; + allRoomLabel.text = @"全部科室 "; + allRoomLabel.textColor = UIColorHex(#999999); + [self.roomView addSubview:allRoomLabel]; + + + UIImage *image = [UIImage imageNamed:@"ic_more_info"]; + + NSMutableAttributedString * roomAttri = [[NSMutableAttributedString alloc] initWithString:allRoomLabel.text]; + + NSMutableAttributedString * roomAttachText = [NSMutableAttributedString attachmentStringWithContent:image contentMode:UIViewContentModeCenter attachmentSize:CGSizeMake(6, 11) alignToFont:[UIFont boldSystemFontOfSize:13] alignment:YYTextVerticalAlignmentCenter]; //content:内容  size:图片尺寸 alignToFont:字符串内字体的格式 + [roomAttri appendAttributedString:roomAttachText]; + + allRoomLabel.attributedText = roomAttri; + + allRoomLabel.textAlignment = NSTextAlignmentRight; + + [allRoomLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + + [self foundRoomsAction]; + }]; + + //找专家 + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; + layout.itemSize = CGSizeMake((kScreenWidth - 30)/2,95); + layout.scrollDirection = UICollectionViewScrollDirectionVertical; + layout.minimumInteritemSpacing = 10; // 设置每个单元格之间的水平间距 + layout.minimumLineSpacing = 10; // 设置每个单元格之间的垂直间距 + layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10); // 设置左右边距为10 + self.collectView = [[DoctorRoomCollectionView alloc]initWithFrame:CGRectMake(0, allRoomLabel.bottom + 5,kScreenWidth, 95 * 4 + 60) collectionViewLayout:layout]; + self.collectView.scrollEnabled = NO; + [self.roomView addSubview:self.collectView]; + MJWeakSelf; + self.collectView.roomBlock = ^(NSString * _Nonnull deparmentID, NSString * _Nonnull deparmentName) { + SearchZhuangJiaViewController * searvc = [[SearchZhuangJiaViewController alloc] init]; + searvc.departmentId = deparmentID; + searvc.departmentName = deparmentName; + searvc.sickId = @""; + searvc.hospitalId = @""; + searvc.doctorName = @""; + searvc.hospitalName = @""; + [weakSelf.navigationController pushViewController:searvc animated:YES]; + }; + roomH = self.collectView.bottom + kRealValue(10); + + self.roomView.height = roomH; + +} + +#pragma mark:按疾病找专家 + +- (void)createDoctorView { + + CGFloat disH = 200; + + self.diseaView = [[UIView alloc] initWithFrame:CGRectMake(0, self.roomView.bottom + 5, kScreenWidth, disH)]; + [self.mainScrollview addSubview:self.diseaView]; + + UILabel * roomLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), 0 , 110, 15)]; + roomLabel.text = @"按疾病找专家"; + roomLabel.font = MEDIUMFONT(15); + self.sickTitLabel = roomLabel; + roomLabel.textAlignment = NSTextAlignmentLeft; + roomLabel.textColor = CFontColor1; + [self.diseaView addSubview:roomLabel]; + + YYLabel * allRoomLabel = [[YYLabel alloc]initWithFrame:CGRectMake(kScreenWidth - 130, 0, 120, 17)]; + allRoomLabel.text = @"全部疾病 "; + allRoomLabel.textColor = UIColorHex(#999999); + [self.diseaView addSubview:allRoomLabel]; + + + UIImage *image = [UIImage imageNamed:@"ic_more_info"]; + + NSMutableAttributedString * roomAttri = [[NSMutableAttributedString alloc] initWithString:allRoomLabel.text]; + + NSMutableAttributedString * roomAttachText = [NSMutableAttributedString attachmentStringWithContent:image contentMode:UIViewContentModeCenter attachmentSize:CGSizeMake(6, 11) alignToFont:[UIFont boldSystemFontOfSize:13] alignment:YYTextVerticalAlignmentCenter]; //content:内容  size:图片尺寸 alignToFont:字符串内字体的格式 + [roomAttri appendAttributedString:roomAttachText]; + + allRoomLabel.attributedText = roomAttri; + + allRoomLabel.textAlignment = NSTextAlignmentRight; + + [allRoomLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + + [self allSickes]; + }]; + + NSMutableArray *_dataSource = @[].mutableCopy; + + ZHTagListConfiguration *config = [ZHTagListConfiguration defaultConfiguration]; + config.tagTextColor = CFontColor1; + config.tagTextMargin = 11; + config.tagHeight = 27; + config.tagTextFont = SYSTEMFONT(14); + config.tagMaxWidth = kScreenWidth; + config.tagListViewInset = UIEdgeInsetsMake(15, 15, 15, 10); + + ZHTagListView *tagList = [[ZHTagListView alloc] initWithFrame:CGRectMake(0, roomLabel.bottom, self.view.frame.size.width, 0) configuration:config tagTexts:_dataSource]; + self.tagList = tagList; + tagList.backgroundColor = KWhiteColor; + [self.diseaView addSubview:tagList]; + [tagList.tagButtonList enumerateObjectsUsingBlock:^(UIButton * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { +// if (idx == 6) { +// [obj setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; +// *stop = YES; +// } + }]; + [tagList setTagClickHandler:^(ZHTagListView *tagListView, NSString *tagText, NSUInteger index) { + + SicksModel * model = self.sicksDataArray[index]; + + [self selectDiseaAction:model.sicksName withID:model.sick_id]; + }]; + + disH = tagList.bottom ; + + self.diseaView.height = disH+ kRealValue(10); +} + + + +#pragma mark:请求数据 +- (void)getHospitalData { + + + NSArray * array = @[@{@"imageName":@"",@"lvString":@"二甲",@"hospitalName":@"西京医院",@"address":@"14.1km | 西安市未央凤城八路8888号"}, + @{@"imageName":@"",@"lvString":@"二甲",@"hospitalName":@"陕西省人民医院",@"address":@"14.1km | 西安市碑林区黄雁村8888号"}, + ]; + + for (NSDictionary * dic in array) { + + HospitalInfoModel * model = [HospitalInfoModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; +} + + +#pragma mark:全部医院 + +-(void)allHospation { + + FoundHospitalViewController * hospitalVC = [[FoundHospitalViewController alloc] init]; + + [self.navigationController pushViewController:hospitalVC animated:YES]; + +} + +- (void)allSickes { + + FoundJIBingViewController * jibingvC = [[FoundJIBingViewController alloc] init]; + + [self.navigationController pushViewController:jibingvC animated:YES]; + + +} +#pragma mark:寻找科室 + +- (void)foundRoomsAction { + + FoundRoomsViewController * foundVC = [[FoundRoomsViewController alloc] init]; + + [self.navigationController pushViewController:foundVC animated:true]; + +} + + +#pragma mark:疾病点击 + +- (void)selectDiseaAction:(NSString *)deparmentName withID:(NSString *)deparmentID { + +// FoundExpertSubViewController * foundVC = [[FoundExpertSubViewController alloc] init]; +// +// [self.navigationController pushViewController:foundVC animated:true]; + SearchZhuangJiaViewController * searvc = [[SearchZhuangJiaViewController alloc] init]; + searvc.departmentId = @""; + searvc.departmentName = @""; + searvc.sickName = deparmentName; + searvc.sickId = deparmentID; + searvc.hospitalId = @""; + searvc.doctorName = @""; + searvc.hospitalName = @""; + [self.navigationController pushViewController:searvc animated:YES]; + +} + +#pragma mark:数据 +- (void)getFoundData { + + [self showMBProgressHUDWithString:@"加载中..." autoHidden:NO]; + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"FOUND" NeedToken:@""]; + [api getFoundExpertHomeData:dic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + [self showMBProgressHUDOnlyWithString:message]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + NSDictionary * dic = response ; + if ([tag isEqualToString:@"FOUND"]) { + [self hiddenAllMBProgressHUD]; + FoundExpertModel * model = [FoundExpertModel modelWithDictionary:dic]; + + CGFloat numHeight = 0; + for (HospitalInfoModel * hosmodel in model.hospitalList) { + UILabel * lab = [[UILabel alloc] init]; + CGFloat labH = [HQCommonUtils getSpaceLabelHeight:lab withStr:hosmodel.address withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:kScreenWidth - 120 withLineSpacing:5]; + + if (ValidStr(hosmodel.keyDepartments)) { + + numHeight = numHeight + labH + 80; + + }else + { + numHeight = numHeight + labH + 100 ; + } + } + + + + self.homeTable.dataArray = model.hospitalList; + + self.hospatilTitLabel.text = [NSString stringWithFormat:@"按医院"]; + self.roomTitLabel.text = [NSString stringWithFormat:@"科室"]; + self.sickTitLabel.text = [NSString stringWithFormat:@"疾病"]; + + self.collectView.dataArray = model.DepartmentList; + + NSMutableArray * titleArray = [[NSMutableArray alloc] init]; + for (SicksModel * sicModel in model.SicksList) { + + NSString * sicks = [NSString stringWithFormat:@"%@",sicModel.sicksName]; + + [titleArray addObject:sicks]; + + [self.sicksDataArray addObject:sicModel]; + } + + self.tagList.tagDataArray = titleArray; + //布局 + self.homeTable.height = numHeight; + + self.hospatilview.height = self.homeTable.bottom; + if (model.DepartmentList.count%2 == 0) { + + self.collectView.height = model.DepartmentList.count / 2 * (73 + kRealValue(10))+ kRealValue(20); + + } + if (model.DepartmentList.count%2 != 0 ) { + + self.collectView.height = (model.DepartmentList.count / 2 + 1) * (73 + kRealValue(10)) + kRealValue(20); + + } + self.roomView.frame = CGRectMake(0, self.hospatilview.bottom + kRealValue(19), kScreenWidth, self.collectView.bottom + kRealValue(10)); + self.diseaView.frame = CGRectMake(0, self.roomView.bottom + 5, kScreenWidth, 200); + self.diseaView.height = self.tagList.bottom + kRealValue(10); + self.mainScrollview.contentSize = CGSizeMake(kScreenWidth ,self.diseaView.bottom + kRealValue(50)); + + } +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundHospitalViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundHospitalViewController.h new file mode 100644 index 0000000..4d688be --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundHospitalViewController.h @@ -0,0 +1,16 @@ +// +// FoundHospitalViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FoundHospitalViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundHospitalViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundHospitalViewController.m new file mode 100644 index 0000000..d5d17f4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundHospitalViewController.m @@ -0,0 +1,196 @@ +// +// FoundHospitalViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "FoundHospitalViewController.h" +#import "HQSearchView.h" +#import "hospitalListTableView.h" +#import "HospitalInfoModel.h" +#import "HospitalMainViewController.h" +#import "SearchZhuangJiaViewController.h" +@interface FoundHospitalViewController () + +@property (nonatomic, strong) hospitalListTableView * homeTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, assign) NSInteger pageNumber; +@property (nonatomic, assign) NSInteger pageSize; +@property (nonatomic, assign) BOOL isSearch; +@property (nonatomic, copy) NSString * keyword; + +@end + +@implementation FoundHospitalViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + + return _dataArray; + +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.view.backgroundColor = KWhiteColor; + self.navigationItem.title = @"按医院"; + self.pageNumber = 0; + self.isSearch = false; + [self createUI]; + [self getHospitalData]; +} + +- (void)createUI { + + HQSearchView * seacrhView = [[HQSearchView alloc] initWithFrame:CGRectMake(0, 8, kScreenWidth, 35)]; + seacrhView.backgroundColor = KWhiteColor; + seacrhView.searchPlacehold = @"输入医院名称"; + MJWeakSelf; + seacrhView.searchBlock = ^(NSString * _Nonnull fieldtext) { + self.pageNumber = 1; + if (!ValidStr(fieldtext)) { + weakSelf.isSearch = true; + weakSelf.keyword = fieldtext; + [self searchHospital:fieldtext]; + }else + { + [EasyTextView showErrorText:@"请输入关键字搜索"]; + } + + + }; + [self.view addSubview:seacrhView]; + + self.homeTable = [[hospitalListTableView alloc] initWithFrame:CGRectMake(0, seacrhView.bottom + 10, kScreenWidth, kScreenHeight - kTopHeight - 63 ) style:UITableViewStyleGrouped]; + self.homeTable.hospatalBlock = ^(NSString * _Nonnull hopsitalID, NSString * _Nonnull hopatialName) { + +// HospitalMainViewController * mainVC = [[HospitalMainViewController alloc] init]; +// mainVC.hospitalID = hopsitalID; +// [weakSelf.navigationController pushViewController:mainVC animated:YES]; + if (weakSelf.isSearch) { + SearchZhuangJiaViewController * searVC = [[SearchZhuangJiaViewController alloc] init]; + searVC.type= 2; + searVC.departmentId = @""; + searVC.departmentName = @""; + searVC.sickId = @""; + searVC.hospitalId =hopsitalID; + searVC.doctorName = @""; + searVC.hospitalName = hopatialName; + [weakSelf.navigationController pushViewController:searVC animated:YES]; + }else + { + HospitalMainViewController * mainVC = [[HospitalMainViewController alloc] init]; + mainVC.hospitalID = hopsitalID; + [weakSelf.navigationController pushViewController:mainVC animated:YES]; + } + + }; + [self.view addSubview:self.homeTable]; + + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + + weakSelf.pageNumber = 0; + if (self.isSearch== true) { + [weakSelf searchHospital:weakSelf.keyword]; + }else + { + [weakSelf getHospitalData]; + } + + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNumber ++; + + if (self.isSearch== true) { + [weakSelf searchHospital:weakSelf.keyword]; + }else + { + [weakSelf getHospitalData]; + } + }]; + +} + +#pragma mark:请求数据 +- (void)getHospitalData { + + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + + [dic setObject:@(20) forKey:@"pageSize"]; + [dic setObject:@(self.pageNumber) forKey:@"pageNumber"]; + + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"HospitalAPI" NeedToken:@""]; + + [searchApi getAllHospatilData:dic]; +} + +- (void)searchHospital:(NSString *)keyword { + + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + + [dic setObject:@(20) forKey:@"pageSize"]; + [dic setObject:@(self.pageNumber) forKey:@"pageNumber"]; + [dic setObject:keyword forKey:@"search"]; + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"HospitalAPI" NeedToken:@""]; + + [searchApi getSearchHospatilData:dic]; +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + if ([tag isEqualToString:@"HospitalAPI"]) { + + NSArray * array = response ; + + if (self.pageNumber == 1) { + + [self.dataArray removeAllObjects]; + } + + for (NSDictionary * dic in array) { + + HospitalInfoModel * model = [HospitalInfoModel modelWithDictionary:dic]; + + [self.dataArray addObject:model]; + } + self.homeTable.dataArray = self.dataArray; + + } +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundJIBingViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundJIBingViewController.h new file mode 100644 index 0000000..84dce0b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundJIBingViewController.h @@ -0,0 +1,16 @@ +// +// FoundJIBingViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/12. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FoundJIBingViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundJIBingViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundJIBingViewController.m new file mode 100644 index 0000000..f68e809 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundJIBingViewController.m @@ -0,0 +1,237 @@ +// +// FoundJIBingViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/12. +// + +#import "FoundJIBingViewController.h" +#import "FoundLeftTableView.h" +#import "FoundRightTableView.h" +#import "SearchRoomModel.h" +#import "SearchSicksModel.h" +#import "SearchZhuangJiaViewController.h" +#import "HQSearchView.h" +#import "FoundExpertSubViewController.h" + + +@interface FoundJIBingViewController () + +@property (nonatomic, strong) FoundLeftTableView * leftTable; + +@property (nonatomic, strong) FoundRightTableView * rightTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, strong) NSMutableArray * rightDataArray; + +@property (nonatomic, strong) NSString * sicks_id; + +@property (nonatomic, copy) NSString * CustomdepartmentName; + + +@end + +@implementation FoundJIBingViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + + return _dataArray; + +} + +- (NSMutableArray *)rightDataArray { + + if (!_rightDataArray) { + + _rightDataArray = [[NSMutableArray alloc] init]; + } + + return _rightDataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.navigationItem.title = @"按疾病找专家"; + self.view.backgroundColor = KWhiteColor; + [self createUI]; + [self createData]; + + +} + +- (void)createUI { + + HQSearchView * seacrhView = [[HQSearchView alloc] initWithFrame:CGRectMake(0, 8, kScreenWidth, 35)]; + seacrhView.backgroundColor = KWhiteColor; + seacrhView.searchPlacehold = @"输入疾病名称"; + MJWeakSelf; + seacrhView.searchBlock = ^(NSString * _Nonnull fieldtext) { + + FoundExpertSubViewController * foundVC = [[FoundExpertSubViewController alloc] init]; + foundVC.searchWord = fieldtext; + [weakSelf.navigationController pushViewController:foundVC animated:YES]; + + }; + [self.view addSubview:seacrhView]; + + + self.leftTable = [[FoundLeftTableView alloc] initWithFrame:CGRectMake(0, seacrhView.bottom + 10, kRealValue(160), kScreenHeight - kTopHeight -43) style:UITableViewStyleGrouped]; + self.leftTable.leftDelegate = self; + self.leftTable.backgroundColor = UIColorHex(#F3F3F3); + [self.view addSubview:self.leftTable]; + + self.rightTable = [[FoundRightTableView alloc] initWithFrame:CGRectMake(self.leftTable.right, seacrhView.bottom + 10,kScreenWidth - kRealValue(160), kScreenHeight - kTopHeight -43) style:UITableViewStyleGrouped]; + self.rightTable.rightBlock = ^(NSString * _Nonnull roomID, NSString * _Nonnull roomName) { + SearchZhuangJiaViewController * searVC = [[SearchZhuangJiaViewController alloc] init]; + searVC.sickId = roomID; + searVC.sickName = roomName; + searVC.departmentId = @""; + searVC.hospitalId = @""; + searVC.doctorName = @""; + [weakSelf.navigationController pushViewController:searVC animated:YES]; + }; + + [self.view addSubview:self.rightTable]; + +} + +#pragma mark:数据 + +- (void)createData { + + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:@"0" forKey:@"parentId"]; + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"FOUND" NeedToken:@""]; + [api getSearchjibingListLeftData:dic]; + +} + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + NSArray * array = response ; + if ([tag isEqualToString:@"FOUND"]) { + [self hiddenAllMBProgressHUD]; + [self.dataArray removeAllObjects]; + + int i = 0; + for (NSDictionary * dic in array) { + + SearchRoomModel * model = [SearchRoomModel modelWithDictionary:dic]; + model.type = @"2"; + if (i == 0) { + model.isSelected = YES; + }else + { + model.isSelected = false; + } + [self.dataArray addObject:model]; + i ++; + } + + self.leftTable.dataArray = self.dataArray; + + if (self.dataArray.count > 0) { + + SearchRoomModel * roomModel = self.dataArray[0]; + self.sicks_id = roomModel.room_Id; + self.CustomdepartmentName = roomModel.departmentName; + [self createRightData:roomModel.room_Id]; + + } + } + + if ([tag isEqualToString:@"RightFound"]) + { + [self hiddenAllMBProgressHUD]; + [self.rightDataArray removeAllObjects]; + + NSMutableDictionary * respDic = [[NSMutableDictionary alloc] init]; + + [respDic setObject:self.sicks_id forKey:@"id"]; + NSInteger doctorNumber = 0; + for (NSDictionary * dic in array) { + + SearchSicksModel * rightModel = [SearchSicksModel modelWithDictionary:dic]; + int number = [rightModel.doctorNum intValue]; + doctorNumber = doctorNumber + number; + } + [respDic setObject:[NSString stringWithFormat:@"全部医生"] forKey:@"sicksName"]; + [respDic setObject:[NSString stringWithFormat:@"%lu",doctorNumber] forKey:@"doctorNum"]; + [respDic setObject:[NSString stringWithFormat:@"%@",self.CustomdepartmentName] forKey:@"CustomdepartmentName"]; + + NSMutableArray * customArray = [[NSMutableArray alloc] initWithArray:array]; + + [customArray insertObject:respDic atIndex:0]; + + + int i = 0 ; + + for (NSDictionary * dic in customArray) { + + SearchSicksModel * rightModel = [SearchSicksModel modelWithDictionary:dic]; + if (i == 0) { + rightModel.isSelected = YES; + }else + { + rightModel.isSelected = false; + } + [self.rightDataArray addObject:rightModel]; + i ++; + } + self.rightTable.searchType = 2; + self.rightTable.rightDataArray = self.rightDataArray; + } +} + + +- (void)createRightData:(NSString *)parentId { + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:parentId forKey:@"departmentId"]; + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"RightFound" NeedToken:@""]; + [api getSearchjibingListRightData:dic]; + +} +#pragma mark: 左边点击 + +- (void)leftCellAction:(NSInteger)index { + + SearchRoomModel * model = self.dataArray[index]; + + self.sicks_id = model.room_Id; + self.CustomdepartmentName = model.departmentName; + [self createRightData:model.room_Id]; + + + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundRoomsViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundRoomsViewController.h new file mode 100644 index 0000000..c11d41f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundRoomsViewController.h @@ -0,0 +1,16 @@ +// +// FoundRoomsViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FoundRoomsViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundRoomsViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundRoomsViewController.m new file mode 100644 index 0000000..a0191eb --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/FoundRoomsViewController.m @@ -0,0 +1,232 @@ +// +// FoundRoomsViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import "FoundRoomsViewController.h" +#import "HQSearchView.h" +#import "FoundRightTableView.h" +#import "FoundLeftTableView.h" +#import "SearchZhuangJiaViewController.h" +#import "SearchRoomModel.h" +#import "RoomSearchResultViewController.h" + + +@interface FoundRoomsViewController () + +@property (nonatomic, strong) FoundLeftTableView * leftTable; + +@property (nonatomic, strong) FoundRightTableView * rightTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, strong) NSMutableArray * rightDataArray; + +@property (nonatomic, strong) NSString * parentId; + +@property (nonatomic, copy) NSString * rightCustom_id; + +@property (nonatomic, copy) NSString * doctorNumber; + +@end + +@implementation FoundRoomsViewController + + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + + return _dataArray; + +} + +- (NSMutableArray *)rightDataArray { + + if (!_rightDataArray) { + + _rightDataArray = [[NSMutableArray alloc] init]; + } + + return _rightDataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.navigationItem.title = @"找科室"; + self.view.backgroundColor = KWhiteColor; + [self createUI]; + [self createData]; +} + +- (void)createUI { + + HQSearchView * seacrhView = [[HQSearchView alloc] initWithFrame:CGRectMake(0, 8, kScreenWidth, 35)]; + seacrhView.backgroundColor = KWhiteColor; + seacrhView.searchPlacehold = @"请输入科室名称"; + seacrhView.searchBlock = ^(NSString * _Nonnull fieldtext) { + RoomSearchResultViewController * resultVC = [[RoomSearchResultViewController alloc] init]; + resultVC.keyWord = fieldtext; + [self.navigationController pushViewController:resultVC animated:YES]; + [EasyTextView showText:@"发起搜索"]; + }; + [self.view addSubview:seacrhView]; + + self.leftTable = [[FoundLeftTableView alloc] initWithFrame:CGRectMake(0, seacrhView.bottom + kRealValue(10), kRealValue(160), kScreenHeight - kTopHeight - 53) style:UITableViewStyleGrouped]; + self.leftTable.leftDelegate = self; + self.leftTable.backgroundColor = UIColorHex(#F3F3F3); + [self.view addSubview:self.leftTable]; + + self.rightTable = [[FoundRightTableView alloc] initWithFrame:CGRectMake(self.leftTable.right, seacrhView.bottom + kRealValue(10),kScreenWidth - kRealValue(160), kScreenHeight - kTopHeight - 53) style:UITableViewStyleGrouped]; + MJWeakSelf + self.rightTable.rightBlock = ^(NSString * _Nonnull roomID, NSString * _Nonnull roomName) { + + SearchZhuangJiaViewController * searVC = [[SearchZhuangJiaViewController alloc] init]; + searVC.departmentId = roomID; + searVC.departmentName = roomName; + searVC.sickId = @""; + searVC.hospitalId = @""; + searVC.doctorName = @""; + [weakSelf.navigationController pushViewController:searVC animated:YES]; + }; + [self.view addSubview:self.rightTable]; + +} + +#pragma mark:数据 + +- (void)createData { + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:@"0" forKey:@"parentId"]; + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"FOUND" NeedToken:@""]; + [api getSearchRoomListLeftData:dic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + NSArray * array = response ; + if ([tag isEqualToString:@"FOUND"]) { + [self.dataArray removeAllObjects]; + [self hiddenAllMBProgressHUD]; + int i = 0 ; + + NSDictionary * responDic = response; + + if ([responDic.allKeys containsObject:@"list"]) { + NSArray * array = [responDic objectForKey:@"list"]; + + for (NSDictionary * dic in array) { + + SearchRoomModel * model = [SearchRoomModel modelWithDictionary:dic]; + + if (i == 0) { + model.isSelected = YES; + }else + { + model.isSelected = false; + } + [self.dataArray addObject:model]; + i ++; + } + + self.leftTable.dataArray = self.dataArray; + + if (self.dataArray.count > 0) { + + SearchRoomModel * roomModel = self.dataArray[0]; + self.rightCustom_id = roomModel.room_Id; + self.doctorNumber = [NSString stringWithFormat:@"%@",roomModel.doctorNum]; + [self createRightData:roomModel.room_Id]; + + } + } + } + + if ([tag isEqualToString:@"RightFound"]) + { + [self.rightDataArray removeAllObjects]; + int i = 0 ; + NSDictionary * responDic = response; + + if ([responDic.allKeys containsObject:@"list"]) { + + NSArray * array = [responDic objectForKey:@"list"]; + + NSMutableDictionary * respDic = [[NSMutableDictionary alloc] init]; + + [respDic setObject:self.rightCustom_id forKey:@"id"]; + [respDic setObject:[NSString stringWithFormat:@"全部医生"] forKey:@"departmentName"]; + [respDic setObject:[NSString stringWithFormat:@"%@",self.doctorNumber] forKey:@"doctorNum"]; + NSMutableArray * customArray = [[NSMutableArray alloc] initWithArray:array]; + [customArray insertObject:respDic atIndex:0]; + + + for (NSDictionary * dic in customArray) { + + SearchRoomModel * rightModel = [SearchRoomModel modelWithDictionary:dic]; + + + if (i == 0) { + rightModel.isSelected = YES; + }else + { + rightModel.isSelected = false; + } + [self.rightDataArray addObject:rightModel]; + i ++; + } + self.rightTable.searchType = 1; + + self.rightTable.rightDataArray = self.rightDataArray; + } + } +} + + +- (void)createRightData:(NSString *)parentId { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:parentId forKey:@"parentId"]; + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"RightFound" NeedToken:@""]; + [api getSearchRoomListLeftData:dic]; + +} +#pragma mark: 左边点击 + +- (void)leftCellAction:(NSInteger)index { + + SearchRoomModel * model = self.dataArray[index]; + self.rightCustom_id = model.room_Id; + self.doctorNumber = [NSString stringWithFormat:@"%@",model.doctorNum]; + [self createRightData:model.room_Id]; + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/MainSearchViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/MainSearchViewController.h new file mode 100644 index 0000000..b3ac5dc --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/MainSearchViewController.h @@ -0,0 +1,18 @@ +// +// MainSearchViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/25. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MainSearchViewController : HQBaseViewController + +@property (nonatomic, copy) NSString * keywordString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/MainSearchViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/MainSearchViewController.m new file mode 100644 index 0000000..56645e8 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/MainSearchViewController.m @@ -0,0 +1,767 @@ +// +// MainSearchViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/25. +// + +#import "MainSearchViewController.h" +#import "HQSearchView.h" +#import "MainSearchTable.h" +#import "ZHTagListView.h" +#import "DoctorRoomCollectionView.h" +#import "hospitalListTableView.h" +#import "HospitalMainViewController.h" +#import "SearchZhuangjiaTable.h" +#import "SearchZhuangJiaViewController.h" +#import "HospitalMainViewController.h" +#import "ExpertMainViewController.h" +#import "QuestionMustKnowViewController.h" +#import "SelectedQuestionViewController.h" +#import "SelectedDoctorTimeVC.h" +#import "ZongheZhuangjiaTableViewCell.h" +#import "SelectedQuestionViewController.h" +#import "SelectedDoctorTimeVC.h" +#import "SearchZhuangJiaViewController.h" +@interface MainSearchViewController () + +@property (nonatomic, strong) NSMutableArray * btnArray; +@property (nonatomic, strong) NSMutableArray * lineArray; +@property (nonatomic, strong) NSMutableArray * DoctorArray; +@property (nonatomic, strong) NSMutableArray * hospatilArray; + +@property (nonatomic, strong) MainSearchTable * homeTable; +@property (nonatomic, assign) NSInteger pageNumber; +@property (nonatomic, assign) NSInteger pageSize; +@property (nonatomic, assign) NSInteger type; +@property (nonatomic, strong) HQSearchView * searchView; +@property (nonatomic, strong) UIView * jibingView; +@property (nonatomic, strong) ZHTagListView *tagList; +@property (nonatomic, strong) UIView * roomView; +@property (nonatomic, strong) DoctorRoomCollectionView * collectView; +@property (nonatomic, assign) NSInteger questionType; +@property (nonatomic, strong) NSString * doctorId; + +@property (nonatomic, strong) NSMutableArray * sickArray; + +#pragma mark:医院视图 +@property (nonatomic, strong) hospitalListTableView * hospitalView; +#pragma mark:专家 +@property (nonatomic, strong) SearchZhuangjiaTable * zhuanjiaView; +@end + +@implementation MainSearchViewController + +- (NSMutableArray *)btnArray { + + if(!_btnArray) { + _btnArray = [[NSMutableArray alloc] init]; + } + + return _btnArray; + +} + +- (NSMutableArray *)DoctorArray { + + if(!_DoctorArray) { + _DoctorArray = [[NSMutableArray alloc] init]; + } + + return _DoctorArray; + +} + +- (NSMutableArray *)sickArray { + + if(!_sickArray) { + _sickArray = [[NSMutableArray alloc] init]; + } + + return _sickArray; + +} + + +- (NSMutableArray *)hospatilArray { + + if(!_hospatilArray) { + _hospatilArray = [[NSMutableArray alloc] init]; + } + + return _hospatilArray; + +} + + +- (NSMutableArray *)lineArray { + + if(!_lineArray) { + _lineArray = [[NSMutableArray alloc] init]; + } + + return _lineArray; + +} + + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = false; + self.view.backgroundColor = KWhiteColor; + self.navigationItem.title = @"搜索"; + self.pageNumber = 1; + self.type = 1; + [self createUI]; + // Do any additional setup after loading the view. + [self createData]; +} + +- (void)createUI { + + HQSearchView * searchView = [[HQSearchView alloc] initWithFrame:CGRectMake(0, 7, kScreenWidth, 40)]; + searchView.searchField.text = self.keywordString; + searchView.searchPlacehold = @"请输入关键字"; + searchView.searchBlock = ^(NSString * _Nonnull fieldtext) { + self.keywordString = fieldtext; + [self.DoctorArray removeAllObjects]; + [self.hospatilArray removeAllObjects]; + self.pageNumber = 1; + if (self.type == 1) { + + [self createData]; + } + if (self.type == 2) { + [self searchDoctor]; + } + if (self.type == 3) { + [self searchHospatil]; + } + if (self.type == 4) { + [self searchSikc]; + } + if (self.type == 6) { + [self searchRoom ]; + } + }; + self.searchView = searchView; + [self.view addSubview:searchView]; + + UIView * topView = [[UIView alloc] initWithFrame:CGRectMake(0, searchView.bottom, kScreenWidth, 41)]; + [self.view addSubview:topView]; + + NSArray * array = @[@"综合",@"专家",@"医院",@"疾病",@"科室"]; + + for (int i = 0; i < array.count; i ++) { + + UIButton * titBtn = [[UIButton alloc] initWithFrame:CGRectMake(18 + 70 * i,kRealValue(10), 55, 28)]; + [titBtn setTitle:array[i] forState:UIControlStateNormal]; + [titBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateSelected]; + [titBtn setTitleColor:UIColorHex(#666666) forState:UIControlStateNormal]; + titBtn.titleLabel.font = SYSTEMFONT(14); + titBtn.tag = 10 + i; + titBtn.selected = i ==0 ? true:false; + [titBtn addTarget:self action:@selector(topOnClick:) forControlEvents:UIControlEventTouchUpInside]; + [topView addSubview:titBtn]; + + UIView * linV = [[UIView alloc] initWithFrame:CGRectMake(0, titBtn.bottom, 13, 2)]; + linV.backgroundColor = UIColorHex(#21BEBD); + linV.centerX = titBtn.centerX; + linV.tag = 100 + i; + [topView addSubview:linV]; + linV.hidden = i ==0 ? false:true; + + [self.btnArray addObject:titBtn]; + [self.lineArray addObject:linV]; + } + self.homeTable = [[MainSearchTable alloc] initWithFrame:CGRectMake(15, topView.bottom, kScreenWidth - 30, kScreenHeight - topView.bottom - kTopHeight) style:UITableViewStyleGrouped]; + self.homeTable.backgroundColor = KWhiteColor; + self.homeTable.zongheZhuangjiaDelegate = self; + MJWeakSelf + self.homeTable.mainBlock = ^(NSString * _Nonnull type, NSString * _Nonnull needID) { + if ([type isEqualToString:@"医生"]) { + + ExpertMainViewController * mainVC = [[ExpertMainViewController alloc] init]; + mainVC.doctorId = needID; + [weakSelf.navigationController pushViewController:mainVC animated:YES]; + + } + if ([type isEqualToString:@"医院"]) { + + HospitalMainViewController * mainVC = [[HospitalMainViewController alloc] init]; + mainVC.hospitalID = needID; + [weakSelf.navigationController pushViewController:mainVC animated:YES]; + } + }; + self.homeTable.doctorSearBlock = ^(NSString * _Nonnull deparmentID, NSString * _Nonnull deparmentName) { + SearchZhuangJiaViewController * searvc = [[SearchZhuangJiaViewController alloc] init]; + searvc.departmentId = deparmentID; + searvc.departmentName = deparmentName; + searvc.sickId = @""; + searvc.hospitalId = @""; + searvc.doctorName = @""; + searvc.hospitalName = @""; + [weakSelf.navigationController pushViewController:searvc animated:YES]; + }; + self.homeTable.sicksSearBlock = ^(SicksModel * _Nonnull model) { + [weakSelf selectDiseaAction:model.sicksName withID:model.sick_id]; + + }; + //6月6日新增更多功能不需要 +// self.homeTable.doctorBlock = ^{ +// +// UIButton * doctorBtn = [weakSelf.view viewWithTag:11]; +// +// [weakSelf topOnClick:doctorBtn]; +// +// }; +// +// self.homeTable.hospitalBlock = ^{ +// UIButton * doctorBtn = [weakSelf.view viewWithTag:12]; +// +// [weakSelf topOnClick:doctorBtn]; +// }; +// +// self.homeTable.roomsBlock = ^{ +// [weakSelf moreRoomsOnClick]; +// }; +// +// self.homeTable.sicksBlock = ^{ +// [weakSelf moreSicksOnClick]; +// }; + self.homeTable.type = 1; + [self.view addSubview:self.homeTable]; + + //专家 + + self.zhuanjiaView = [[SearchZhuangjiaTable alloc] initWithFrame:CGRectMake(0, topView.bottom, kScreenWidth,kScreenHeight - topView.bottom - kTopHeight) style:UITableViewStyleGrouped]; + self.zhuanjiaView.hidden = YES; + self.zhuanjiaView.zhuangjiaListDelegate = self; + self.zhuanjiaView.backgroundColor = KWhiteColor; + [self.view addSubview:self.zhuanjiaView]; + self.zhuanjiaView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + + weakSelf.pageNumber = 1; + + [weakSelf searchDoctor]; + + + }]; + self.zhuanjiaView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + + weakSelf.pageNumber ++; + + [weakSelf searchDoctor]; + }]; + + //医院 + self.hospitalView = [[hospitalListTableView alloc] initWithFrame:CGRectMake(0, topView.bottom, kScreenWidth, kScreenHeight - topView.bottom - kTopHeight ) style:UITableViewStyleGrouped]; + self.hospitalView.hospatalBlock = ^(NSString * _Nonnull hopsitalID, NSString * _Nonnull hopatialName) { + + HospitalMainViewController * mainVC = [[HospitalMainViewController alloc] init]; + + [weakSelf.navigationController pushViewController:mainVC animated:YES]; + }; + self.hospitalView.hidden = YES; + [self.view addSubview:self.hospitalView]; + + self.hospitalView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNumber = 1; + + [weakSelf searchHospatil]; + + + }]; + self.hospitalView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNumber ++; + + [weakSelf searchHospatil]; + }]; + + + //疾病试图 + self.jibingView = [[UIView alloc] initWithFrame:CGRectMake(0, self.searchView.bottom + 41, kScreenWidth, 100)]; + self.jibingView.hidden = YES; + [self.view addSubview:self.jibingView]; + UILabel * canselLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(10) , 110, 15)]; + canselLabel.text = @"疾病"; + canselLabel.font = MEDIUMFONT(15); + canselLabel.textAlignment = NSTextAlignmentLeft; + canselLabel.textColor = CFontColor1; + [self.jibingView addSubview:canselLabel]; + + + + + NSMutableArray *_dataSource = @[ + ].mutableCopy; + + + ZHTagListConfiguration *config = [ZHTagListConfiguration defaultConfiguration]; + config.tagTextColor = CFontColor1; + config.tagTextMargin = 11; + config.tagHeight = 27; + config.tagTextFont = SYSTEMFONT(13); + config.tagListViewInset = UIEdgeInsetsMake(15, 15, 15, 10); + + ZHTagListView *tagList = [[ZHTagListView alloc] initWithFrame:CGRectMake(0, canselLabel.bottom, kScreenWidth , 0) configuration:config tagTexts:_dataSource]; + tagList.backgroundColor = KWhiteColor; + self.tagList = tagList; + [self.jibingView addSubview:tagList]; + [tagList.tagButtonList enumerateObjectsUsingBlock:^(UIButton * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (idx == 6) { + [obj setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; + *stop = YES; + } + }]; + [tagList setTagClickHandler:^(ZHTagListView *tagListView, NSString *tagText, NSUInteger index) { + + SicksModel * model = self.sickArray[index]; + [weakSelf selectDiseaAction:model.sicksName withID:model.sick_id]; + }]; + + //科室 + UIView * roomView = [[UIView alloc] initWithFrame:CGRectMake(0, self.searchView.bottom + 41, kScreenWidth, 200)]; + self.roomView = roomView; + roomView.hidden = YES; + [self.view addSubview:roomView]; + + UILabel * roomLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(10) , 110, 15)]; + roomLabel.text = @"科室"; + roomLabel.font = MEDIUMFONT(15); + roomLabel.textAlignment = NSTextAlignmentLeft; + roomLabel.textColor = CFontColor1; + [roomView addSubview:roomLabel]; + + //找专家 + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; + layout.scrollDirection = UICollectionViewScrollDirectionVertical; + layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10); + layout.minimumLineSpacing = 10; + layout.minimumInteritemSpacing = 10; + + self.collectView = [[DoctorRoomCollectionView alloc]initWithFrame:CGRectMake(0, roomLabel.bottom + 15, kScreenWidth , 95 * 4 + 60) collectionViewLayout:layout]; + self.collectView.type = 1; + self.collectView.scrollEnabled = NO; + self.collectView.roomBlock = ^(NSString * _Nonnull deparmentID, NSString * _Nonnull deparmentName) { + + SearchZhuangJiaViewController * searvc = [[SearchZhuangJiaViewController alloc] init]; + searvc.departmentId = deparmentID; + searvc.departmentName = deparmentName; + searvc.sickId = @""; + searvc.hospitalId = @""; + searvc.doctorName = @""; + searvc.hospitalName = @""; + [weakSelf.navigationController pushViewController:searvc animated:YES]; + }; + + [roomView addSubview:self.collectView]; + + + roomView.height = self.collectView.bottom + kRealValue(10);; + +} + +- (void)topOnClick:(UIButton *)topBtn { + + for (UIButton * titBtn in self.btnArray) { + if (topBtn == titBtn) { + + titBtn.selected = true; + } + else + { + titBtn.selected = false; + } + } + + for (UIView * linV in self.lineArray) { + + if (linV.tag - 100 == topBtn.tag - 10) { + linV.hidden = false; + }else + { + linV.hidden = true; + } + } + //综合 + // 找医生 + if (topBtn.tag - 10 == 0) + { + self.type = 1; + self.pageNumber = 1; + self.jibingView.hidden = YES; + self.roomView.hidden = YES; + self.hospitalView.hidden = YES; + self.zhuanjiaView.hidden = YES; + self.homeTable.hidden = false; + [self createData]; + } + // 找医生 + if (topBtn.tag - 10 == 1) + { + self.type = 2; + self.pageNumber = 1; + self.jibingView.hidden = YES; + self.homeTable.hidden = YES; + self.hospitalView.hidden = YES; + self.roomView.hidden = YES; + self.zhuanjiaView.hidden = NO; + [self searchDoctor]; + } + // 找医院 + if (topBtn.tag - 10 == 2) + { + self.type = 3; + self.pageNumber = 1; + self.jibingView.hidden = YES; + self.homeTable.hidden = YES; + self.zhuanjiaView.hidden = YES; + self.hospitalView.hidden = NO; + self.roomView.hidden = YES; + [self searchHospatil]; + + } + // 找疾病 + if (topBtn.tag - 10 == 3 ) { + self.type = 4; + self.jibingView.hidden = false; + self.homeTable.hidden = YES; + self.roomView.hidden = YES; + self.hospitalView.hidden = YES; + self.zhuanjiaView.hidden = YES; + [self searchSikc]; + } + // 找疾病 + if (topBtn.tag - 10 == 4 ) { + self.type = 5; + self.jibingView.hidden = YES; + self.roomView.hidden = false; + self.homeTable.hidden = YES; + self.hospitalView.hidden = YES; + self.zhuanjiaView.hidden = YES; + [self searchRoom]; + } + +} + +#pragma mark:找科室 +- (void)searchRoom { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:self.searchView.searchField.text forKey:@"search"]; + [dic setObject:@(self.pageNumber) forKey:@"pageNumber"]; + [dic setObject:@(10) forKey:@"pageSize"]; + + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"RoomSEARCH" NeedToken:@""]; + + [searchApi getSearchRoomListData:dic]; +} + +#pragma mark:找疾病 +- (void)searchSikc { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:self.keywordString forKey:@"search"]; + [dic setObject:@(self.pageNumber) forKey:@"pageNumber"]; + [dic setObject:@(10) forKey:@"pageSize"]; + + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"SicksSEARCH" NeedToken:@""]; + + [searchApi getSearchSicksListData:dic]; +} + +#pragma mark:找专家 +- (void)searchDoctor { + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:self.keywordString forKey:@"search"]; + [dic setObject:@(self.pageNumber) forKey:@"pageNumber"]; + [dic setObject:@(10) forKey:@"pageSize"]; + + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"DoctorSEARCH" NeedToken:@""]; + + [searchApi getSearchDoctorData:dic]; + + +} + +#pragma mark:找医院 +- (void)searchHospatil { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:self.keywordString forKey:@"search"]; + [dic setObject:@(self.pageNumber) forKey:@"pageNumber"]; + [dic setObject:@(10) forKey:@"pageSize"]; + + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"HOSPATILSEARCH" NeedToken:@""]; + + [searchApi getSearchHospatilData:dic]; +} + + + +- (void)createData { + + [self showMBProgressHUDWithString:@"正在搜索中,请稍候..." autoHidden:false]; + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + + [dic setObject:self.keywordString forKey:@"search"]; + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"SEARCH" NeedToken:@""]; + + [searchApi getSearchZongheData:dic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.zhuanjiaView.mj_footer endRefreshing]; + [self.zhuanjiaView.mj_header endRefreshing]; + [self.hospitalView.mj_footer endRefreshing]; + [self.hospitalView.mj_header endRefreshing]; + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + + + if ([tag isEqualToString:@"SEARCH"]) { + NSDictionary * dic = response ; + + FoundExpertModel * model = [FoundExpertModel modelWithDictionary:dic]; + + [self hiddenAllMBProgressHUD]; + self.homeTable.type = 1; //找专家 + self.homeTable.model = model; + + } + if ([tag isEqualToString:@"DoctorSEARCH"]) { + [self.zhuanjiaView.mj_footer endRefreshing]; + [self.zhuanjiaView.mj_header endRefreshing]; + NSArray * responseArray = response; + if (self.pageNumber == 1) { + [self.DoctorArray removeAllObjects]; + } + for (NSDictionary * resDic in responseArray) { + + DoctorListModel * model = [DoctorListModel modelWithDictionary:resDic]; + + if (!ValidStr(model.goodAt)) { + NSMutableAttributedString * att = [[NSMutableAttributedString alloc] initWithString:model.goodAt]; + NSInteger lins = [self getNumberOfLinesWithText:att andLabelWidth:kScreenWidth - 123]; + if (lins >=3) { + model.cellHeight = 300; + }else + { + UILabel * lab = [[UILabel alloc] init]; + + + CGFloat labH = [HQCommonUtils getSpaceLabelHeight:lab withStr:model.goodAt withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:kScreenWidth - 123 withLineSpacing:5]; + model.cellHeight = 120 + labH + 110; + } + }else + { + model.cellHeight = 120 + 15 + 110; + } + + [self.DoctorArray addObject:model]; + } + self.homeTable.type = 2; + + self.zhuanjiaView.dataArray = self.DoctorArray; + } + if ([tag isEqualToString:@"HOSPATILSEARCH"]) { + [self.hospitalView.mj_footer endRefreshing]; + [self.hospitalView.mj_header endRefreshing]; + NSArray * responseArray = response; + if (self.pageNumber == 1) { + [self.hospatilArray removeAllObjects]; + } + for (NSDictionary * resDic in responseArray) { + + HospitalInfoModel * model = [HospitalInfoModel modelWithDictionary:resDic]; + + [self.hospatilArray addObject:model]; + } + self.hospitalView.dataArray = self.hospatilArray; + } + + if ([tag isEqualToString:@"SicksSEARCH"]) { + + [self.sickArray removeAllObjects]; + NSMutableArray * sickNameArray = [[NSMutableArray alloc] init]; + for (NSDictionary * dic in response) { + + SicksModel * model = [SicksModel modelWithDictionary:dic]; + [sickNameArray addObject:model.sicksName]; + [self.sickArray addObject:model]; + } + self.tagList.tagDataArray = sickNameArray; + + } + + if ([tag isEqualToString:@"RoomSEARCH"]) { + + NSMutableArray * roomArray = [[NSMutableArray alloc] init]; + for (NSDictionary * dic in response) { + + DepartmentModel * model = [DepartmentModel modelWithDictionary:dic]; + [roomArray addObject:model]; + } + self.collectView.dataArray = roomArray; + + } + if ([tag isEqualToString:@"xuzhi"]) { + + NSDictionary * parmDic = response; + if ( ValidDict(parmDic)) + { + //cv大侠 + if (self.questionType == 1) //图文 + { + QuestionMustKnowViewController * questionVC = [[QuestionMustKnowViewController alloc] init]; + questionVC.doctorId = self.doctorId; + questionVC.popType = 1; //1 图文 0 音视频 2 用户须知 + [self.navigationController pushViewController:questionVC animated:YES]; + } + if (self.questionType == 2) //音视频 + { + QuestionMustKnowViewController * questionVC = [[QuestionMustKnowViewController alloc] init]; + questionVC.doctorId = self.doctorId; + questionVC.popType = 0; //1 图文 0 音视频 2 用户须知 + [self.navigationController pushViewController:questionVC animated:YES]; + } + } + else + { + if (self.questionType == 1) //图文 + { + SelectedQuestionViewController * questionVC = [[SelectedQuestionViewController alloc] init]; + questionVC.doctorID = self.doctorId; + questionVC.questionType = self.questionType ; + [self.navigationController pushViewController:questionVC animated:YES]; + } + if (self.questionType == 2) //音视频 + { + SelectedDoctorTimeVC * timeVC = [[SelectedDoctorTimeVC alloc] init]; + timeVC.doctorId = self.doctorId; + [self.navigationController pushViewController:timeVC animated:YES]; + } + } + } + +} + +#pragma mark:综合专家点击 +- (void)zongheZhuangjiaPictureAction:(NSString *)doctorID { + self.questionType = 1; + + self.doctorId = doctorID; + [self questionPictureAction:1]; + + +} + +- (void)zongheZhuangjiaVideoAction:(NSString *)doctorID { + self.doctorId = doctorID; + self.questionType = 2; + [self questionPictureAction:0]; + +} + +- (void)questionPictureAction:(NSInteger )type { + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + +// [parmDic setObject:self.memberId forKey:@"memberId"]; +// 1 图文 0 音视频 2 用户须知 + [parmDic setObject:@(type) forKey:@"type"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"xuzhi" NeedToken:@""]; + + [detailApi getFoundPopConnetResult :parmDic]; + + +} +//获取文本行数 +- (int)getNumberOfLinesWithText:(NSMutableAttributedString *)text andLabelWidth:(CGFloat)width { + CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)text); + CGMutablePathRef Path = CGPathCreateMutable(); + CGPathAddRect(Path, NULL ,CGRectMake(0 , 0 , width, INT_MAX)); + CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), Path, NULL); + // 得到字串在frame中被自动分成了多少个行。 + CFArrayRef rows = CTFrameGetLines(frame); + // 实际行数 + int numberOfLines = CFArrayGetCount(rows); + CFRelease(frame); + CGPathRelease(Path); + CFRelease(framesetter); + return numberOfLines; +} + +#pragma mark:疾病点击 + +- (void)selectDiseaAction:(NSString *)deparmentName withID:(NSString *)deparmentID { + +// FoundExpertSubViewController * foundVC = [[FoundExpertSubViewController alloc] init]; +// +// [self.navigationController pushViewController:foundVC animated:true]; + SearchZhuangJiaViewController * searvc = [[SearchZhuangJiaViewController alloc] init]; + searvc.departmentId = @""; + searvc.departmentName = @""; + searvc.sickName = deparmentName; + searvc.sickId = deparmentID; + searvc.hospitalId = @""; + searvc.doctorName = @""; + searvc.hospitalName = @""; + [self.navigationController pushViewController:searvc animated:YES]; + +} + +#pragma mark:更多疾病 + +- (void)moreSicksOnClick { + + UIButton * sickBtn = [self.view viewWithTag:13]; + + [self topOnClick:sickBtn]; + +} + +- (void)moreRoomsOnClick { + + UIButton * roomBtn = [self.view viewWithTag:14]; + + [self topOnClick:roomBtn]; + +} + +//- (void)zongheZhuangjiaVideoAction:(NSString *)doctorID { +// +// self.doctorId = doctorID; +// self.questionType = 2; +// [self questionPictureAction:0]; +//} +// +//-(void)zongheZhuangjiaPictureAction:(NSString *)doctorID { +// self.questionType = 1; +// +// self.doctorId = doctorID; +// [self questionPictureAction:1]; +// +//} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/SearchZhuangJiaViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/SearchZhuangJiaViewController.h new file mode 100644 index 0000000..27c2faa --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/SearchZhuangJiaViewController.h @@ -0,0 +1,28 @@ +// +// SearchJibingViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SearchZhuangJiaViewController : HQBaseViewController + +@property (nonatomic, copy) NSString * doctorName; +@property (nonatomic, copy) NSString * hospitalId; +@property (nonatomic, copy) NSString * departmentId; +@property (nonatomic, copy) NSString * sickId; +@property (nonatomic, copy) NSString * tfSort; + +@property (nonatomic, assign) NSInteger type; +@property (nonatomic, copy) NSString * departmentName; +@property (nonatomic, copy) NSString * sickName; +@property (nonatomic, copy) NSString * hospitalName; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/SearchZhuangJiaViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/SearchZhuangJiaViewController.m new file mode 100644 index 0000000..d059bab --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/Search(搜索页面)/SearchZhuangJiaViewController.m @@ -0,0 +1,883 @@ +// +// SearchZhuangJiaViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + +#import "SearchZhuangJiaViewController.h" +#import "ExpertMainViewController.h" +#import "HQSearchView.h" +#import "SearchConetShowTable.h" +#import "SearchZhuangjiaTable.h" +#import "SearchRoomModel.h" +#import "FoundExpertModel.h" +#import "SearchSicksModel.h" +//筛选 +#import "AllRoomsConditionView.h" +#import "AllHospitalConditionView.h" +#import "AllSicksConditionView.h" +#import "QuestionMustKnowViewController.h" +#import "SelectedQuestionViewController.h" +#import "SelectedDoctorTimeVC.h" + +@interface SearchZhuangJiaViewController () + +@property (nonatomic, strong) NSMutableArray * buttonArray; +@property (nonatomic, strong) NSMutableArray * topButtonArray; +@property (nonatomic, strong) SearchZhuangjiaTable * homeTable; + +@property (nonatomic, assign) NSInteger pageNo; +@property (nonatomic, assign) NSInteger pageSize; +@property (nonatomic, assign) NSInteger questionType; +@property (nonatomic, strong) NSString * doctorId; + +@property (nonatomic, strong) NSMutableArray * DoctorArray; + +#pragma mark:科室 +@property (nonatomic, strong) AllRoomsConditionView * roomsView; +@property (nonatomic, strong) NSMutableArray * roomsArray; +@property (nonatomic, strong) NSMutableArray * roomsRightArray; +@property (nonatomic, strong) NSString * room_Id; + +#pragma mark:医院 +@property (nonatomic, strong) AllHospitalConditionView * hospitalView; +@property (nonatomic, strong) NSMutableArray * hospitalArray; +#pragma mark:疾病 +@property (nonatomic, strong) AllSicksConditionView * sickConditionView; +@property (nonatomic, strong) NSMutableArray * sickArray; +@property (nonatomic, strong) NSMutableArray * sickRightArray; +@property (nonatomic, strong) NSString * sick_Id; + +@end + +@implementation SearchZhuangJiaViewController + +#pragma mark:懒加载 + +- (AllRoomsConditionView *)roomsView { + + if (!_roomsView) { + + _roomsView = [[AllRoomsConditionView alloc] initWithFrame:CGRectMake(0, 78 + kRealValue(13), kScreenWidth, kScreenHeight - 78 - kRealValue(13))]; + _roomsView.roomLeftDelegate = self; + } + + return _roomsView; +} + +- (AllHospitalConditionView *)hospitalView { + + if (!_hospitalView) { + + _hospitalView = [[AllHospitalConditionView alloc] initWithFrame:CGRectMake(0, 78 + kRealValue(13), kScreenWidth, kScreenHeight - 78 - kRealValue(13))]; + _hospitalView.hospitalDelegate = self; + } + + return _hospitalView; +} + +- (AllSicksConditionView *)sickConditionView { + + if (!_sickConditionView) { + + _sickConditionView = [[AllSicksConditionView alloc] initWithFrame:CGRectMake(0, 78 + kRealValue(13), kScreenWidth, kScreenHeight - 78 - kRealValue(13))]; + _sickConditionView.sicksLeftDelegate = self; + + } + + return _sickConditionView; +} + + +- (NSMutableArray *)roomsArray { + + if (!_roomsArray) { + + _roomsArray = [[NSMutableArray alloc] init]; + } + return _roomsArray; +} + +- (NSMutableArray *)roomsRightArray { + + if (!_roomsRightArray) { + + _roomsRightArray = [[NSMutableArray alloc] init]; + } + return _roomsRightArray; +} + +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + + _buttonArray = [[NSMutableArray alloc] init]; + } + + return _buttonArray; +} + +- (NSMutableArray *)DoctorArray { + + if (!_DoctorArray) { + + _DoctorArray = [[NSMutableArray alloc] init]; + } + + return _DoctorArray; + +} + +- (NSMutableArray *)hospitalArray { + + if (!_hospitalArray) { + + _hospitalArray = [[NSMutableArray alloc] init]; + } + + return _hospitalArray; +} + +- (NSMutableArray *)sickArray { + + if (!_sickArray) { + + _sickArray = [[NSMutableArray alloc] init]; + } + return _sickArray; + +} + +- (NSMutableArray *)sickRightArray { + + if (!_sickRightArray) { + + _sickRightArray = [[NSMutableArray alloc] init]; + } + return _sickRightArray; + +} + +- (NSMutableArray *)topButtonArray { + + if (!_topButtonArray) { + + _topButtonArray = [[NSMutableArray alloc] init]; + } + return _topButtonArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = KWhiteColor; + self.isHidenNaviBar = false; + if (self.type == 2) { + self.navigationItem.title = self.hospitalName; + }else{ + self.navigationItem.title = @"找专家"; + } + self.pageNo = 1; + self.tfSort = @"1"; + [self createUI]; + [self createData]; + [self createRoomsData]; + [self createAllHospiatlData]; + [self createAllSicksData]; + +} + +- (void)createUI { + MJWeakSelf + HQSearchView * searchView = [[HQSearchView alloc] initWithFrame:CGRectMake(0, 7, kScreenWidth, 40)]; + searchView.searchBlock = ^(NSString * _Nonnull fieldtext) { + [weakSelf.DoctorArray removeAllObjects]; + weakSelf.doctorName = fieldtext; + [weakSelf createData]; + }; + searchView.searchPlacehold = @"请输入关键字"; + [self.view addSubview:searchView]; + + CGFloat contW = (kScreenWidth - kRealValue(60))/3; + NSArray * titleArray; + if (self.type == 2) { + + titleArray = @[@"全部科室",@"全部疾病"]; + }else + { + titleArray = @[@"全部医院",@"全部科室",@"全部疾病"]; + } + + for (int i = 0; i < titleArray.count ; i++) { + + UIButton * hospatilBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(15) + (kRealValue(15) + contW) * i, searchView.bottom + kRealValue(13), contW, 31)]; + hospatilBtn.layer.cornerRadius = 5; + hospatilBtn.layer.masksToBounds = YES; + hospatilBtn.layer.borderWidth = 1.0; + hospatilBtn.layer.borderColor = UIColorHex(#DDDDDD).CGColor; + [hospatilBtn setTitle:titleArray[i] forState:UIControlStateNormal]; + [hospatilBtn setSemanticContentAttribute:UISemanticContentAttributeForceRightToLeft]; + [hospatilBtn setImage:[UIImage imageNamed:@"garyDown"] forState:UIControlStateNormal]; + [hospatilBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + [hospatilBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateSelected]; + if (self.type == 2) { + hospatilBtn.tag = 101 + i; + }else + { + hospatilBtn.tag = 100 + i; + } + hospatilBtn.titleLabel.font = SYSTEMFONT(14); + hospatilBtn.selected = false; + [hospatilBtn addTarget:self action:@selector(contAction:) forControlEvents:UIControlEventTouchUpInside]; + [hospatilBtn setImage:[UIImage imageNamed:@"upAccow_gary"] forState:UIControlStateSelected]; + + + if(!ValidStr(self.departmentName)) { + if (i == 1) { + [hospatilBtn setTitle:self.departmentName forState:UIControlStateNormal]; + [hospatilBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + + + } + } + if(!ValidStr(self.sickName)) { + if (i == 2) { + [hospatilBtn setTitle:self.sickName forState:UIControlStateNormal]; + [hospatilBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + + + } + } + [self.view addSubview:hospatilBtn]; + [self.buttonArray addObject:hospatilBtn]; + } + + NSArray * contArray = @[@"好评优先",@"热度优先",@"回复率"]; + + for (int i = 0; i < contArray.count ; i++) { + + UIButton * homeBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth/3 * i, searchView.bottom + kRealValue(13) + 50, kScreenWidth/3, 40)]; + [homeBtn setTitle:contArray[i] forState:UIControlStateNormal]; + [homeBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + [homeBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateSelected]; + homeBtn.tag = 200 + i; + homeBtn.titleLabel.font = SYSTEMFONT(14); + [homeBtn addTarget:self action:@selector(topListcontAction:) forControlEvents:UIControlEventTouchUpInside]; + if (i == 0) { + homeBtn.selected = YES; + } + [self.topButtonArray addObject:homeBtn]; + [self.view addSubview:homeBtn]; + } + + + + self.homeTable = [[SearchZhuangjiaTable alloc] initWithFrame:CGRectMake(0, searchView.bottom + kRealValue(13) + 90, kScreenWidth, kScreenHeight - searchView.bottom - kRealValue(13) - 90 - kTopHeight ) style:UITableViewStyleGrouped]; + self.homeTable.zhuangjiaDelegate = self; + self.homeTable.zhuangjiaListDelegate = self; + [self.view addSubview:self.homeTable]; + + self.homeTable.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + self.pageNo = 1; + [weakSelf createData]; + + }]; + self.homeTable.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + + [weakSelf createData]; + }]; + + //初始化一个emptyView + LYEmptyView *emptyView = [LYEmptyView emptyViewWithImageStr:@"noDataBox" titleStr:@"暂无数据" detailStr:@""]; + //元素竖直方向的间距 + emptyView.subViewMargin = 20.f; + //标题颜色 + emptyView.titleLabTextColor = [UIColor blackColor]; + //描述字体 + emptyView.detailLabFont = [UIFont systemFontOfSize:17]; + //按钮背景色 + emptyView.actionBtnBackGroundColor = KWhiteColor; + emptyView.actionBtnWidth = CGFLOAT_MIN; + emptyView.actionBtnHeight = CGFLOAT_MIN; + + //设置空内容占位图 + self.homeTable.ly_emptyView = emptyView; + + +} + +- (void)createData { + + [self showMBProgressHUDWithString:@"数据加载中,请稍候..." autoHidden:false]; + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:self.doctorName forKey:@"doctorName"]; + [dic setObject:self.hospitalId forKey:@"hospitalId"]; + [dic setObject:self.departmentId forKey:@"departmentId"]; + [dic setObject:self.sickId forKey:@"sickId"]; + [dic setObject:self.tfSort forKey:@"tfSort"]; + [dic setObject:@(self.pageNo) forKey:@"pageNo"]; + [dic setObject:@(20) forKey:@"pageSize"]; + +// GET http://cqyt.dev.yg.dt.io/health-consultation/api/consult/conDoctor/selectDictListByNHDS?doctorName=&hospitalId=&departmentId=27424429373915145&sickId=&tfSort=1&pageNo=1&pageSize=100 HTTP/1.1 + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"SEARCH" NeedToken:@""]; + + [searchApi getSearchConditionsData:dic]; + +} + + +#pragma mark:全部科室 + +- (void)createRoomsData { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:@"0" forKey:@"parentId"]; + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"FOUND" NeedToken:@""]; + [api getSearchRoomListLeftData:dic]; + +} +#pragma mark:全部科室: 右边数据 +- (void)createRoomsRightData:(NSString *)parentId { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:parentId forKey:@"parentId"]; + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"RightFound" NeedToken:@""]; + [api getSearchRoomListLeftData:dic]; + +} +#pragma mark:全部医院 + +- (void)createAllHospiatlData { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + + + JKCQAPI * searchApi = [[JKCQAPI alloc] init:self tag:@"HospitalAPI" NeedToken:@""]; + [searchApi getConnditionHospitalData:dic]; + +} +#pragma mark:全部疾病 + +- (void)createAllSicksData { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:@"0" forKey:@"parentId"]; + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"SICKFOUND" NeedToken:@""]; + [api getSearchjibingListLeftData:dic]; + + +} +#pragma mark:全部疾病: 右边数据 +- (void)createSicksRightData:(NSString *)parentId { + + NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; + [dic setObject:parentId forKey:@"departmentId"]; + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"SickRight" NeedToken:@""]; + [api getSearchjibingListRightData:dic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + [self.homeTable.mj_footer endRefreshing]; + [self.homeTable.mj_header endRefreshing]; + + if ([tag isEqualToString:@"SEARCH"]) { + [self hiddenAllMBProgressHUD]; + NSArray * responseArray = response; + if (self.pageNo == 1) { + [self.DoctorArray removeAllObjects]; + } + for (NSDictionary * resDic in responseArray) { + + DoctorListModel * model = [DoctorListModel modelWithDictionary:resDic]; + + [self.DoctorArray addObject:model]; + } + self.homeTable.dataArray = self.DoctorArray; + } + + + if ([tag isEqualToString:@"FOUND"]) { + NSDictionary * responDic = response ; + [self.roomsArray removeAllObjects]; + + if ([responDic.allKeys containsObject:@"list"]) { + NSArray * array = [responDic objectForKey:@"list"]; + int i = 0 ; + SearchRoomModel * customModel = [[SearchRoomModel alloc] init]; + customModel.departmentName = @"全部科室"; + customModel.room_Id = @"0"; + customModel.isSelected = true; + [self.roomsArray insertObject:customModel atIndex:0]; + + for (NSDictionary * dic in array) { + + SearchRoomModel * model = [SearchRoomModel modelWithDictionary:dic]; + +// if (i == 0) { +// model.isSelected = false; +// }else +// { + model.isSelected = false; +// } + [self.roomsArray addObject:model]; + i ++; + } + + + + self.roomsView.leftArray = self.roomsArray; + + if (self.roomsArray.count > 0) { + + SearchRoomModel * roomModel = self.roomsArray[0]; + + [self createRoomsRightData:roomModel.room_Id]; + + } + } + } + + if ([tag isEqualToString:@"RightFound"]) + { + NSDictionary * responDic = response; + if ([responDic.allKeys containsObject:@"list"]) { + + NSArray * array = [responDic objectForKey:@"list"]; + + [self.roomsRightArray removeAllObjects]; + int i = 0 ; + int doctorNumber = 0; + for (NSDictionary * dic in array) { + + SearchRoomModel * rightModel = [SearchRoomModel modelWithDictionary:dic]; +// if (i == 0) { 以前默认选中 +// rightModel.isSelected = false; +// }else +// { +// rightModel.isSelected = false; +// } + rightModel.isSelected = false; + doctorNumber = [rightModel.doctorNum intValue] + doctorNumber; + [self.roomsRightArray addObject:rightModel]; + i ++; + } + if ([self.room_Id integerValue] == 0) { + self.roomsView.searchType = 1; + SearchRoomModel * customModel = [[SearchRoomModel alloc] init]; + customModel.departmentName = @"全部医生"; + customModel.room_Id = @"0"; + customModel.doctorNum = [NSString stringWithFormat:@"%d",doctorNumber]; + [self.roomsRightArray insertObject:customModel atIndex:0]; + } + self.roomsView.rightArray = self.roomsRightArray; + } + } + //医院 + if ([tag isEqualToString:@"HospitalAPI"]) { + + NSDictionary * dic = response; + NSArray * array; + if ([dic containsObjectForKey:@"hostitalList"]) { + + array = [dic objectForKey:@"hostitalList"]; + } + + for (NSDictionary * dic in array) { + + HospitalInfoModel * model = [HospitalInfoModel modelWithDictionary:dic]; + + [self.hospitalArray addObject:model]; + } + + HospitalInfoModel * hospitalModel = [[HospitalInfoModel alloc] init]; + hospitalModel.resourceName = @"全部医院"; + hospitalModel.hositalId = @"0"; + [self.hospitalArray insertObject:hospitalModel atIndex:0]; + self.hospitalView.dataArray = self.hospitalArray; + } + + if ([tag isEqualToString:@"SICKFOUND"]) { + [self.sickArray removeAllObjects]; + NSArray * array = response; + + SearchRoomModel * customModel = [[SearchRoomModel alloc] init]; + customModel.departmentName = @"全部疾病"; + customModel.room_Id = @"0"; + customModel.isSelected = true; + [self.sickArray insertObject:customModel atIndex:0]; + int i = 0 ; + for (NSDictionary * dic in array) { + + SearchRoomModel * model = [SearchRoomModel modelWithDictionary:dic]; + +// if (i == 0) { +// model.isSelected = YES; +// +// }else +// { + model.isSelected = false; +// } + [self.sickArray addObject:model]; + i ++; + } + + + + self.sickConditionView.leftArray = self.sickArray; + + if (self.sickArray.count > 0) { + + SearchRoomModel * roomModel = self.sickArray[0]; + + [self createSicksRightData:roomModel.room_Id]; + + } + } + + if ([tag isEqualToString:@"SickRight"]) + { + NSArray * array = response ; + [self.sickRightArray removeAllObjects]; + int i = 0 ; + + for (NSDictionary * dic in array) { + + SearchSicksModel * rightModel = [SearchSicksModel modelWithDictionary:dic]; +// if (i == 0) { +// rightModel.isSelected = YES; +// }else +// { + rightModel.isSelected = false; +// } + [self.sickRightArray addObject:rightModel]; + i ++; + } + if ([self.sick_Id integerValue] == 0) { + SearchSicksModel * customModel = [[SearchSicksModel alloc] init]; + customModel.sicksName = [NSString stringWithFormat:@"全部疾病"] ; + customModel.doctorNum = [NSString stringWithFormat:@"%ld",self.sickRightArray.count] ; + + customModel.sicks_id = @"0"; + [self.sickRightArray insertObject:customModel atIndex:0]; + } + self.sickConditionView.searchType = 2; + self.sickConditionView.rightArray = self.sickRightArray; + } + if ([tag isEqualToString:@"xuzhi"]) { + + NSDictionary * parmDic = response; + if ( ValidDict(parmDic)) + { + //cv大侠 + if (self.questionType == 1) //图文 + { + QuestionMustKnowViewController * questionVC = [[QuestionMustKnowViewController alloc] init]; + questionVC.doctorId = self.doctorId; + questionVC.popType = 1; //1 图文 0 音视频 2 用户须知 + [self.navigationController pushViewController:questionVC animated:YES]; + } + if (self.questionType == 2) //音视频 + { + QuestionMustKnowViewController * questionVC = [[QuestionMustKnowViewController alloc] init]; + questionVC.doctorId = self.doctorId; + questionVC.popType = 0; //1 图文 0 音视频 2 用户须知 + [self.navigationController pushViewController:questionVC animated:YES]; + } + } + else + { + if (self.questionType == 1) //图文 + { + SelectedQuestionViewController * questionVC = [[SelectedQuestionViewController alloc] init]; + questionVC.doctorID = self.doctorId; + questionVC.questionType = self.questionType ; + [self.navigationController pushViewController:questionVC animated:YES]; + } + if (self.questionType == 2) //音视频 + { + SelectedDoctorTimeVC * timeVC = [[SelectedDoctorTimeVC alloc] init]; + timeVC.doctorId = self.doctorId; + [self.navigationController pushViewController:timeVC animated:YES]; + } + } + } +} + +- (void)topListcontAction:(UIButton *)btn { + + self.tfSort = [NSString stringWithFormat:@"%ld",btn.tag - 200 + 1]; + btn.selected = !btn.selected; + + for (UIButton * topBtn in self.topButtonArray) { + + if (topBtn == btn) { + + topBtn.selected = topBtn.selected; + }else + { + topBtn.selected = NO; + } + } + [self createData]; +} + + +- (void)contAction:(UIButton *)actionBtn { + + + + actionBtn.selected = !actionBtn.selected; + + + switch (actionBtn.tag) { + case 100: //全部医院 + { + [self.roomsView removeFromSuperview]; + [self.sickConditionView removeFromSuperview]; + + if (actionBtn.selected == true) { + [self.view addSubview:self.hospitalView]; + }else + { + [self.hospitalView removeFromSuperview]; + + } + if ([actionBtn.currentTitle containsString:@"全部"]) { + [actionBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + [actionBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateSelected]; + } + } + break; + case 101: //全部科室 + { + [self.hospitalView removeFromSuperview]; + [self.sickConditionView removeFromSuperview]; + if (actionBtn.selected == true) { + [self.view addSubview:self.roomsView]; + }else + { + [self.roomsView removeFromSuperview]; + } + if ([actionBtn.currentTitle containsString:@"全部"]) { + [actionBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + [actionBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateSelected]; + } + } + break; + case 102: //全部疾病 + { + [self.roomsView removeFromSuperview]; + [self.hospitalView removeFromSuperview]; + + if (actionBtn.selected == true) { + [self.view addSubview:self.sickConditionView]; + }else + { + [self.sickConditionView removeFromSuperview]; + } + if ([actionBtn.currentTitle containsString:@"全部"]) { + [actionBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + [actionBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateSelected]; + } + } + break; + + default: + break; + } + + + +} + +#pragma mark:科室左边点击 + +- (void)roomsLeftAction:(NSInteger)index { + + SearchRoomModel * model = self.roomsArray[index]; + self.room_Id = model.room_Id; + [self createRoomsRightData:model.room_Id]; +} + +- (void)roomsRightAction:(NSString *)roomID { + + self.departmentId = roomID; + if ([self.departmentId integerValue] == 0) { + self.departmentId = @""; + } + for (UIButton * conntBtn in self.buttonArray) { + + if (conntBtn.tag == 101) { + for (SearchRoomModel * model in self.roomsRightArray) { + + if ([roomID isEqualToString:model.room_Id]) { + + [conntBtn setTitle:model.departmentName forState:UIControlStateNormal]; + [conntBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + if ([conntBtn.currentTitle containsString:@"全部"]) { + [conntBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + } + conntBtn.selected = NO; + } + } + } + if (conntBtn.tag == 102) { + conntBtn.selected = false; + self.sickId = @""; + [conntBtn setTitle:@"全部科室" forState:UIControlStateNormal]; + + [conntBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + } + } + [self createData]; + [self.roomsView removeFromSuperview]; +} + +#pragma mark:疾病左边点击 + +- (void)sicksLeftAction:(NSInteger)index { + + SearchRoomModel * model = self.sickArray[index]; + + self.sick_Id = model.room_Id; + + [self createSicksRightData:model.room_Id]; + +} + +- (void)sicksRightAction:(NSString *)roomID { + + self.sickId = roomID; + if ([self.sickId integerValue] == 0) { + self.sickId = @""; + } + + for (UIButton * conntBtn in self.buttonArray) { + + + if (conntBtn.tag == 102) { + for (SearchSicksModel * model in self.sickRightArray) { + + if ([roomID isEqualToString:model.sicks_id]) { + + [conntBtn setTitle:model.sicksName forState:UIControlStateNormal]; + [conntBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + conntBtn.selected = NO; + if ([conntBtn.currentTitle containsString:@"全部"]) { + [conntBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + } + } + } + } + + + } + [self createData]; + [self.sickConditionView removeFromSuperview]; +} + +- (void)hospitalListAction:(NSString *)hospitalName withID:(NSString *)hospitalID { + + self.hospitalId = hospitalID; + if ([self.hospitalId integerValue] == 0) { + self.hospitalId = @""; + } + for (UIButton * conntBtn in self.buttonArray) { + + if (conntBtn.tag == 100) { + conntBtn.selected = false; + [conntBtn setTitle:hospitalName forState:UIControlStateNormal]; + [conntBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + if ([conntBtn.currentTitle containsString:@"全部"]) { + [conntBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + } + + } + if (conntBtn.tag == 101) { +// [conntBtn setTitle:hospitalName forState:UIControlStateNormal]; +// [conntBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [conntBtn setTitle:@"全部科室" forState:UIControlStateNormal]; + [conntBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + + self.departmentId = @""; + conntBtn.selected = false; + } + if (conntBtn.tag == 102) { +// [conntBtn setTitle:hospitalName forState:UIControlStateNormal]; +// [conntBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [conntBtn setTitle:@"全部疾病" forState:UIControlStateNormal]; + [conntBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + self.sickId = @""; + conntBtn.selected = false; + } + } + [self createData]; + [self.hospitalView removeFromSuperview]; +} + +- (void)zhuangjiaJumpDetail:(NSString *)memberID { + + ExpertMainViewController * mainVC = [[ExpertMainViewController alloc] init]; + mainVC.doctorId = memberID; + [self.navigationController pushViewController:mainVC animated:YES]; + +} + +#pragma mark:综合专家点击 +- (void)zongheZhuangjiaPictureAction:(NSString *)doctorID { + self.questionType = 1; + + self.doctorId = doctorID; + [self questionPictureAction:1]; + + +} + +- (void)zongheZhuangjiaVideoAction:(NSString *)doctorID { + self.doctorId = doctorID; + self.questionType = 2; + [self questionPictureAction:0]; + +} + +- (void)questionPictureAction:(NSInteger )type { + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + +// [parmDic setObject:self.memberId forKey:@"memberId"]; +// 1 图文 0 音视频 2 用户须知 + [parmDic setObject:@(type) forKey:@"type"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"xuzhi" NeedToken:@""]; + + [detailApi getFoundPopConnetResult :parmDic]; + + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SearchMainViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SearchMainViewController.h new file mode 100644 index 0000000..885ef41 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SearchMainViewController.h @@ -0,0 +1,16 @@ +// +// SearchMainViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/10. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SearchMainViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SearchMainViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SearchMainViewController.m new file mode 100644 index 0000000..9c51b00 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SearchMainViewController.m @@ -0,0 +1,53 @@ +// +// SearchMainViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/10. +// + +#import "SearchMainViewController.h" +#import "HQSearchView.h" + +@interface SearchMainViewController () + +@end + +@implementation SearchMainViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = KWhiteColor; + self.isHidenNaviBar = false; + self.navigationItem.title = @"搜索"; + [self createUI]; +} + +- (void)createUI { + + HQSearchView * searchView = [[HQSearchView alloc] initWithFrame:CGRectMake(0, 7, kScreenWidth, 35)]; + + [self.view addSubview:searchView]; + + NSArray * dataArray = @[@"综合",@"专家",@"医院",@"疾病",@"科室"]; + for (int i = 0 ; i < dataArray.count ; i ++) { + + UIButton * titleBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(21) + i * 55, searchView.bottom + kRealValue(21), 50, 15)]; + [titleBtn setTitle:dataArray[i] forState:UIControlStateNormal]; + titleBtn.titleLabel.font = SYSTEMFONT(14); + [self.view addSubview:titleBtn]; + } + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectFIleDateDetailViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectFIleDateDetailViewController.h new file mode 100644 index 0000000..d1671f9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectFIleDateDetailViewController.h @@ -0,0 +1,18 @@ +// +// SelectFIleDateDetailViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "HQBaseViewController.h" +#import "QuestionDiseaseInfoModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface SelectFIleDateDetailViewController : HQBaseViewController + +@property (nonatomic, strong) QuestionDiseaseInfoModel * infomodel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectFIleDateDetailViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectFIleDateDetailViewController.m new file mode 100644 index 0000000..e67dbc1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectFIleDateDetailViewController.m @@ -0,0 +1,636 @@ +// +// SelectFIleDateDetailViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "SelectFIleDateDetailViewController.h" +#import "DetailTitleView.h" +#import "DetailUserInfoView.h" +#import "FileDataDeatilCenterView.h" +#import "BasicHealthInfoView.h" +#import "SelectedFileDateCenterView.h" +#import "QuestionItemTable.h" +#import "HQPhotoCollectView.h" +#import "FileDataModel.h" + +#import "TZPhotoPreviewController.h" +#import +#import "TZImagePickerController.h" +#import "TZImageManager.h" +#import +#import "TZAssetModel.h" +#define maxPhotoesCount 9 +#define maxColumnNum 4 + + +@interface SelectFIleDateDetailViewController () +{ + + + BOOL _isSelectOriginalPhoto; + +} +@property (nonatomic, strong) UIImagePickerController *imagePickerVc;//图片选择器 +@property (nonatomic, strong) UIAlertController *sheetVC;//选择框 +@property (nonatomic, strong) NSMutableArray * selectedPhotos;//选择的照片数 +@property (nonatomic, strong) NSMutableArray * selectedAssets; +@property (nonatomic, strong) NSMutableArray * imageUrlArray; +@property (nonatomic, assign) NSInteger chixuTime; + +@property (nonatomic, assign) NSInteger number; +@property (nonatomic, strong) SelectedFileDateCenterView * detailView ; +@property (nonatomic, strong) UIButton * bottomBtn ; +@property (nonatomic, strong) UIScrollView * mainScrollView; +@end + +@implementation SelectFIleDateDetailViewController + +#pragma mark:懒加载 + +- (NSMutableArray *)selectedAssets +{ + if (!_selectedAssets) + { + _selectedAssets = [[NSMutableArray alloc] init]; + } + return _selectedAssets; +} + +- (NSMutableArray *)selectedPhotos +{ + if (!_selectedPhotos) + { + _selectedPhotos = [[NSMutableArray alloc] init]; + } + return _selectedPhotos; +} + +- (NSMutableArray *)imageUrlArray { + + if (!_imageUrlArray) + { + _imageUrlArray = [[NSMutableArray alloc] init]; + } + return _imageUrlArray; + +} + +-(UIAlertController *)sheetVC{ + + if (!_sheetVC) { + + _sheetVC=[UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; + + UIAlertAction *takePhoto=[UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [self takePhoto]; + }]; + UIAlertAction *chosePhoto=[UIAlertAction actionWithTitle:@"去相册中选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [self pushImagePickerController]; + }]; + UIAlertAction *cancel=[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + + [_sheetVC addAction:takePhoto]; + [_sheetVC addAction:chosePhoto]; + [_sheetVC addAction:cancel]; + } + return _sheetVC; + +} + +- (UIImagePickerController *)imagePickerVc { + if (_imagePickerVc == nil) { + _imagePickerVc = [[UIImagePickerController alloc] init]; + _imagePickerVc.delegate = self; + // set appearance / 改变相册选择页的导航栏外观 + _imagePickerVc.navigationBar.barTintColor = self.navigationController.navigationBar.barTintColor; + _imagePickerVc.navigationBar.tintColor = self.navigationController.navigationBar.tintColor; + UIBarButtonItem *tzBarItem, *BarItem; + if (kiOS9Later) { + tzBarItem = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[TZImagePickerController class]]]; + BarItem = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UIImagePickerController class]]]; + } else { + tzBarItem = [UIBarButtonItem appearanceWhenContainedIn:[TZImagePickerController class], nil]; + BarItem = [UIBarButtonItem appearanceWhenContainedIn:[UIImagePickerController class], nil]; + } + NSDictionary *titleTextAttributes = [tzBarItem titleTextAttributesForState:UIControlStateNormal]; + [BarItem setTitleTextAttributes:titleTextAttributes forState:UIControlStateNormal]; + } + return _imagePickerVc; +} + +- (void)takePhoto { + AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; + if ((authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied)) { + // 无相机权限 做一个友好的提示 + UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"无法使用相机" message:@"请在iPhone的""设置-隐私-相机""中允许访问相机" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"设置", nil]; + [alert show]; + // 拍照之前还需要检查相册权限 + } else if ([[TZImageManager manager] authorizationStatusAuthorized] == 2) { // 已被拒绝,没有相册权限,将无法保存拍的照片 + UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"设置", nil]; + alert.tag = 1; + [alert show]; + } else if ([[TZImageManager manager] authorizationStatusAuthorized] == 0) { // 正在弹框询问用户是否允许访问相册,监听权限状态 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + return [self takePhoto]; + }); + } else { // 调用相机 + UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera; + if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) { + self.imagePickerVc.sourceType = sourceType; + _imagePickerVc.modalPresentationStyle = UIModalPresentationOverCurrentContext; + [self presentViewController:_imagePickerVc animated:YES completion:nil]; + } else { + } + } +} + +#pragma mark - TZImagePickerController + +- (void)pushImagePickerController { + + TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:maxPhotoesCount columnNumber:maxColumnNum delegate:self pushPhotoPickerVc:YES]; + +#pragma mark - 四类个性化设置,这些参数都可以不传,此时会走默认设置 + imagePickerVc.isSelectOriginalPhoto = _isSelectOriginalPhoto; + + // 1.设置目前已经选中的图片数组 + imagePickerVc.selectedAssets = _selectedAssets; // 目前已经选中的图片数组 + imagePickerVc.allowTakePicture =NO; // 不允许在内部显示拍照按钮 + + // 3. 设置是否可以选择视频/图片/原图 + imagePickerVc.allowPickingVideo = NO; + imagePickerVc.allowPickingImage = YES; + imagePickerVc.allowPickingOriginalPhoto = YES; + imagePickerVc.allowPickingGif = NO; + + // 4. 照片排列按修改时间升序 + imagePickerVc.sortAscendingByModificationDate = YES; + + + /// 5. 单选模式,maxImagesCount为1时才生效 + imagePickerVc.showSelectBtn = NO; + imagePickerVc.allowCrop = NO; + imagePickerVc.needCircleCrop =NO; + imagePickerVc.circleCropRadius = 100; + /* + [imagePickerVc setCropViewSettingBlock:^(UIView *cropView) { + cropView.layer.borderColor = [UIColor redColor].CGColor; + cropView.layer.borderWidth = 2.0; + }];*/ + + //imagePickerVc.allowPreview = NO; +#pragma mark - 到这里为止 + + // You can get the photos by block, the same as by delegate. + // 你可以通过block或者代理,来得到用户选择的照片. + [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray *photos, NSArray *assets, BOOL isSelectOriginalPhoto) { + + }]; + + [self presentViewController:imagePickerVc animated:YES completion:nil]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = UIColorHex(#F3F3F5); + self.isHidenNaviBar = false; + self.navigationItem.title = @"档案详情"; + [self createUI]; + + //网络状态监听 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(detailViewFrameChage:) + name:@"FrameChage" + object:nil]; + // Do any additional setup after loading the view. +} + +- (void)createUI { + + UIImageView * topImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 200)]; + topImage.image = [UIImage imageNamed:@"questionDetailBack"]; + [self.view addSubview:topImage]; + + + + UIScrollView * mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, kScreenWidth - kRealValue(30), kScreenHeight - kTopHeight )]; + mainScrollView.showsVerticalScrollIndicator = false; + mainScrollView.showsHorizontalScrollIndicator = false; + mainScrollView.layer.cornerRadius = 8.0; + mainScrollView.layer.masksToBounds = true; + self.mainScrollView = mainScrollView; + mainScrollView.backgroundColor = KClearColor; + [self.view addSubview:mainScrollView]; + + DetailTitleView * titleview = [[DetailTitleView alloc] initWithFrame:CGRectMake(0, 0, mainScrollView.width, 33)]; + [mainScrollView addSubview:titleview]; + + //个人信息 + DetailUserInfoView * infoView = [[DetailUserInfoView alloc] initWithFrame:CGRectMake(0, titleview.bottom, kScreenWidth - kRealValue(30), kRealValue(103))]; + infoView.backgroundColor = KWhiteColor; + infoView.model = self.infomodel; + [mainScrollView addSubview:infoView]; + //问题 + SelectedFileDateCenterView * detailView = [[SelectedFileDateCenterView alloc] initWithFrame:CGRectMake(0, infoView.bottom + kRealValue(10), mainScrollView.width, 500)]; + detailView.questionOneDelegate = self; + detailView.photoDelegate = self; + [mainScrollView addSubview:detailView]; + detailView.height = detailView.questionH; + detailView.layer.cornerRadius = 10; + self.detailView = detailView; + [HQCommonUtils addShadowToView:detailView]; + +// BasicHealthInfoView * healthView = [[BasicHealthInfoView alloc] initWithFrame:CGRectMake(0,detailView.bottom + kRealValue(15), kScreenWidth - kRealValue(30), kRealValue(280))]; +// healthView.backgroundColor = [UIColor whiteColor]; +// healthView.layer.cornerRadius = 10.0; +// [HQCommonUtils addShadowToView:healthView]; +// [mainScrollView addSubview:healthView]; + + + UIButton * bottomBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth/2 - 75, detailView.bottom + kRealValue(28), 150, 35)]; + [bottomBtn addTarget:self action:@selector(sureAction:) forControlEvents:UIControlEventTouchUpInside]; + bottomBtn.backgroundColor = KWhiteColor; +// bottomBtn.centerX = self.mainScrollView.centerX; + [bottomBtn setTitle:@"提交" forState:UIControlStateNormal]; + bottomBtn.layer.cornerRadius = 17; + bottomBtn.layer.masksToBounds = YES; + bottomBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + bottomBtn.layer.borderWidth = 1.0; + bottomBtn.titleLabel.font = SYSTEMFONT(14); + [bottomBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.bottomBtn = bottomBtn; + [self.mainScrollView addSubview:bottomBtn]; + + mainScrollView.contentSize = CGSizeMake(kScreenWidth- kRealValue(30), bottomBtn.bottom + 50); + + + +} + +- (void)detailViewFrameChage:(NSNotification *)nofi { + + self.detailView.height = [nofi.object floatValue]; + self.bottomBtn.top = self.detailView.bottom + kRealValue(28); + self.mainScrollView.contentSize = CGSizeMake(kScreenWidth- kRealValue(30), self.bottomBtn.bottom + 50); + +} + +- (void)questionOneSelectedResult:(NSString *)result { + if ([result containsString:@"一周内"]) { + self.chixuTime = 1; + } + if ([result containsString:@"一个月内"]) { + self.chixuTime = 2; + } + if ([result containsString:@"半年内"]) { + self.chixuTime = 3; + } + if ([result containsString:@"半年以上"]) { + self.chixuTime = 4; + } + + +} + + +- (void)choosePhotoCell:(NSIndexPath *)index withCollectview:(UICollectionView *)collectView withIntab:(NSInteger )tableAtNumber +{ + + if (self.selectedPhotos.count == 9) + { + return; + } + + if (index.row == _selectedPhotos.count) { + [self presentViewController:self.sheetVC animated:YES completion:nil]; + + } else { // preview photos or video / 预览照片或者视频 + id asset = self.selectedAssets[index.row]; + BOOL isVideo = NO; + if ([asset isKindOfClass:[PHAsset class]]) { + PHAsset *phAsset = asset; + isVideo = phAsset.mediaType == PHAssetMediaTypeVideo; + } else if ([asset isKindOfClass:[ALAsset class]]) { + ALAsset *alAsset = asset; + isVideo = [[alAsset valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]; + } + if ([[asset valueForKey:@"filename"] containsString:@"GIF"]) { + return; + } else if (isVideo) { // perview video / 预览视频 + return; + } else { // preview photos / 预览照片 + TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithSelectedAssets:_selectedAssets selectedPhotos:_selectedPhotos index:index.row]; + imagePickerVc.maxImagesCount = maxPhotoesCount; + imagePickerVc.allowPickingOriginalPhoto = YES; + imagePickerVc.isSelectOriginalPhoto = _isSelectOriginalPhoto; + [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray *photos, NSArray *assets, BOOL isSelectOriginalPhoto) { + self.selectedPhotos = [NSMutableArray arrayWithArray:photos]; + self.selectedAssets = [NSMutableArray arrayWithArray:assets]; + _isSelectOriginalPhoto = isSelectOriginalPhoto; + self.detailView.photoArray = self.selectedPhotos; +// collectView.contentSize = CGSizeMake(self.selectedPhotos.count * ( 12 + 60), 84); + }]; + [self presentViewController:imagePickerVc animated:YES completion:nil]; + } + } + + +} + + +#pragma mark--- UIImageImagePickerController delegate + +- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + [picker dismissViewControllerAnimated:YES completion:nil]; + NSString *type = [info objectForKey:UIImagePickerControllerMediaType]; + if ([type isEqualToString:@"public.image"]) { + TZImagePickerController *tzImagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:self]; + tzImagePickerVc.sortAscendingByModificationDate = YES; + [tzImagePickerVc showProgressHUD]; + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + // save photo and get asset / 保存图片,获取到asset + [[TZImageManager manager] savePhotoWithImage:image completion:^(PHAsset *asset, NSError *error) { + if (error) { + [tzImagePickerVc hideProgressHUD]; + } else { + + [[TZImageManager manager] getCameraRollAlbum:NO allowPickingImage:YES needFetchAssets:NO completion:^(TZAlbumModel *model) { + [[TZImageManager manager] getAssetsFromFetchResult:model.result allowPickingVideo:NO allowPickingImage:YES completion:^(NSArray *models) { + [tzImagePickerVc hideProgressHUD]; + TZAssetModel *assetModel = [models firstObject]; + if (tzImagePickerVc.sortAscendingByModificationDate) { + assetModel = [models lastObject]; + } + [self refreshCollectionViewWithAddedAsset:assetModel.asset image:image]; + }]; + }]; + } + }]; + + + } +} + + +- (void)refreshCollectionViewWithAddedAsset:(id)asset image:(UIImage *)image { + [self.selectedAssets addObject:asset]; + [self.selectedPhotos addObject:image]; + +// .pictureArray = [NSMutableArray arrayWithArray:self.selectedPhotos]; +// model.assetArray = [NSMutableArray arrayWithArray:self.selectedAssets]; +// [self.dataArray replaceObjectAtIndex:self.number withObject:model]; + self.detailView.photoArray = self.selectedPhotos; +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { + if ([picker isKindOfClass:[UIImagePickerController class]]) { + [picker dismissViewControllerAnimated:YES completion:nil]; + } +} + + +#pragma mark - TZImagePickerControllerDelegate + +/// User click cancel button +/// 用户点击了取消 +- (void)tz_imagePickerControllerDidCancel:(TZImagePickerController *)picker { +} + +// The picker should dismiss itself; when it dismissed these handle will be called. +// If isOriginalPhoto is YES, user picked the original photo. +// You can get original photo with asset, by the method [[TZImageManager manager] getOriginalPhotoWithAsset:completion:]. +// The UIImage Object in photos default width is 828px, you can set it by photoWidth property. +// 这个照片选择器会自己dismiss,当选择器dismiss的时候,会执行下面的代理方法 +// 如果isSelectOriginalPhoto为YES,表明用户选择了原图 +// 你可以通过一个asset获得原图,通过这个方法:[[TZImageManager manager] getOriginalPhotoWithAsset:completion:] +// photos数组里的UIImage对象,默认是828像素宽,你可以通过设置photoWidth属性的值来改变它 +- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto { + self.selectedPhotos = [NSMutableArray arrayWithArray:photos]; + self.selectedAssets = [NSMutableArray arrayWithArray:assets]; + _isSelectOriginalPhoto = isSelectOriginalPhoto; + +// [self.dataArray replaceObjectAtIndex:self.number withObject:model]; + self.detailView.photoArray = self.selectedPhotos; + // 1.打印图片名字 + [self printAssetsName:assets]; +} + + + +#pragma mark - Private + +/// 打印图片名字 +- (void)printAssetsName:(NSArray *)assets { + NSString *fileName; + for (id asset in assets) { + if ([asset isKindOfClass:[PHAsset class]]) { + PHAsset *phAsset = (PHAsset *)asset; + fileName = [phAsset valueForKey:@"filename"]; + } else if ([asset isKindOfClass:[ALAsset class]]) { + ALAsset *alAsset = (ALAsset *)asset; + fileName = alAsset.defaultRepresentation.filename;; + } + } +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + return UIInterfaceOrientationMaskPortrait; +} + +#pragma mark===按钮点击方法 + +//删除按钮 +- (void)delectUserChoosePhoto:(NSInteger)indexTag withIntab:(NSInteger)tableAtNumber +{ + [self.selectedPhotos removeObjectAtIndex:indexTag]; + self.detailView.photoArray = self.selectedPhotos; + +} + +//提交按钮 +-(void)sureAction:(UIButton *)sender{ + + + + if (ValidStr(self.detailView.fileNameField.text)) { + [EasyTextView showErrorText:@"请输入档案名称"]; + return; + } + NSString * fileName = self.detailView.fileNameField.text; + //本次问题持续多久 + if (self.chixuTime <= 0) { + [EasyTextView showErrorText:@"请选择持续时间"]; + return; + } + //描述问题 + if (ValidStr(self.detailView.inputQuestion1View.text)) { + [EasyTextView showErrorText:@"请输入问题描述"]; + return; + } + NSString * questionString = self.detailView.inputQuestion1View.text; + //图片 + + NSString * imageString = [ self.imageUrlArray componentsJoinedByString:@","]; + //是否就诊过 + if (self.detailView.jiuzhenIsAction == NO ) { + [EasyTextView showErrorText:@"请选择是否就诊过"]; + return; + } + //就诊过医院 + //诊断结果 + //期待得到的帮助 + //是否允许专家查看体检报告 +// if (self.detailView.reportIsAction == NO ) { +// [EasyTextView showErrorText:@"请选择是否允许查看报告"]; +// return; +// } + + if (self.selectedPhotos.count <= 0) { //没图片直接上传 + + [self submitFileIpputData]; + + } + + + else + { + [self showMBProgressHUDWithString:@"上传中" autoHidden:NO]; + JKCQAPI * upApi = [[JKCQAPI alloc] init:self tag:@"UPLOADAPI" NeedToken:@""]; + + [upApi postImageArrayUpload:self.selectedPhotos withParmDic:@{@"biz":@""} ]; + } + + + + +} +#pragma mark - 网络请求 + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + + if ([tag isEqualToString:@"UPLOADAPI"]) + { + + NSArray * array = response; + + [self.imageUrlArray addObjectsFromArray:array]; + [self hiddenAllMBProgressHUD]; + [self submitFileIpputData]; + } + + if ([tag isEqualToString:@"ADDFILE"]) + { + [EasyTextView showSuccessText:response]; + [self hiddenAllMBProgressHUD]; + [self.navigationController popViewControllerAnimated:YES]; + } + + +} + +- (void)submitFileIpputData { + + + //档案名称 + if (ValidStr(self.detailView.fileNameField.text)) { + [EasyTextView showErrorText:@"请输入档案名称"]; + return; + } + NSString * fileName = self.detailView.fileNameField.text; + //本次问题持续多久 + if (self.chixuTime <= 0) { + [EasyTextView showErrorText:@"请选择持续时间"]; + return; + } + self.chixuTime; + //描述问题 + if (ValidStr(self.detailView.inputQuestion1View.text)) { + [EasyTextView showErrorText:@"请输入问题描述"]; + return; + } + NSString * questionString = self.detailView.inputQuestion1View.text; + //图片 + NSString * imageString ; + if (self.imageUrlArray.count > 0) { + imageString = [ self.imageUrlArray componentsJoinedByString:@","]; + }else + { + imageString=@""; + } + //是否就诊过 + if (self.detailView.jiuzhenIsAction == NO ) { + [EasyTextView showErrorText:@"请选择是否就诊过"]; + return; + } + NSString * isJiuzhen = self.detailView.jiuzhenSelected == YES ? @"1":@"0"; + //就诊过医院 + NSString * hospationString = self.detailView.hospitalField.text ; + //诊断结果 + NSString * hospationResult = self.detailView.sicksField.text; + //期待得到的帮助 + NSString * helpString = self.detailView.helpInputView.text; + //是否允许专家查看体检报告 +// if (self.detailView.reportIsAction == NO ) { +// [EasyTextView showErrorText:@"请选择是否允许查看报告"]; +// return; +// } +// BOOL lookReport = self.detailView.reportSelected; + NSString * lookReport = @"0"; + +// //是否允许专家查看你的基本信息 +// if (self.detailView.healthIsAction == NO ) { +// [EasyTextView showErrorText:@"请选择是否允许专家查看基本健康信息"]; +// return; +// } +// BOOL basicHealth = self.detailView.healthSelected; + //成员id + + [self showMBProgressHUDWithString:@"新增档案中,请稍候..." autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:fileName forKey:@"recordsName"]; + [parmDic setObject:questionString forKey:@"medicalDescribe"]; + [parmDic setObject:imageString forKey:@"image"]; + [parmDic setObject:@(self.chixuTime) forKey:@"haveTime"]; + [parmDic setObject:helpString forKey:@"desire"]; + [parmDic setObject:self.infomodel.memberId_id forKey:@"memberId"]; + [parmDic setObject:isJiuzhen forKey:@"tfLook"]; + [parmDic setObject:lookReport forKey:@"tfPermission"]; + [parmDic setObject:hospationString forKey:@"lookOffice"]; + [parmDic setObject:hospationResult forKey:@"lookMedicalName"]; + + + + JKCQAPI * addApi = [[JKCQAPI alloc] init:self tag:@"ADDFILE" NeedToken:@""]; + + [addApi PostMemberShipFileData:parmDic]; + + +} + + + +//点击屏幕空白处 +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + //回收键盘,两者方式 + //UITextView *textView = (UITextView*)[self.view viewWithTag:1001]; + //[textView resignFirstResponder]; + [self.view endEditing:YES]; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedDoctorTimeVC.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedDoctorTimeVC.h new file mode 100644 index 0000000..de49173 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedDoctorTimeVC.h @@ -0,0 +1,18 @@ +// +// SelectedDoctorTimeVC.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/21. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SelectedDoctorTimeVC : HQBaseViewController + +@property (nonatomic, copy) NSString * doctorId; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedDoctorTimeVC.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedDoctorTimeVC.m new file mode 100644 index 0000000..d14f1d9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedDoctorTimeVC.m @@ -0,0 +1,488 @@ +// +// SelectedDoctorTimeVC.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/21. +// + +#import "SelectedDoctorTimeVC.h" +#import "FSXBStarRateView.h" +#import "DoctorTimeSelectedCollectView.h" +#import "ZHTagListView.h" +#import "DoctorDetailModel.h" +#import "DoctorTimeModel.h" +#import "DoctorMainViewController.h" +#import "SelectedQuestionViewController.h" + +@interface SelectedDoctorTimeVC () + +@property (nonatomic, strong) UIScrollView * mainScrollview; + +@property (nonatomic, strong) UIImageView * heardImage; + +@property (nonatomic, strong) UILabel * doctorLabel; + +@property (nonatomic, strong) UILabel * jobLabel; + +@property (nonatomic, strong) UILabel * hospitalLabel; + +@property (nonatomic, strong) FSXBStarRateView * starView; + +@property (nonatomic, strong) UIButton * collLoveBtn; + +@property (nonatomic, strong) UILabel * replyLabel; + +@property (nonatomic, strong) UILabel * satisfactionLabel; + +@property (nonatomic, strong) DoctorTimeSelectedCollectView * collectView; + +@property (nonatomic, strong) ZHTagListView * tagList; +@property (nonatomic, strong) UIImageView * starImg; +@property (nonatomic, strong) UILabel * evaluationLabel; +//@property (nonatomic, strong) UIView * hotView; +@property (nonatomic, strong) UIView * doctView; +@property (nonatomic, strong) NSString * schedulingDateId; +@end + +@implementation SelectedDoctorTimeVC + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.view.backgroundColor = KWhiteColor; + self.navigationItem.title = @"选择预约时间"; + [self addNavigationItemWithImageNames:@[@"whiteBack_icon"] isLeft:YES target:self action:@selector(popToVC) tags:@[@"10"]]; + [self createUI]; + [self createDoctorData]; + [self createData]; +} + +- (void)popToVC { + + [self.navigationController popViewControllerAnimated:YES]; + +} + +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + + //自定义navBar,根据当前的nav自定义 navBar + UINavigationBar *navBar = [UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[HQBaseNavigationController class]]]; + //设置导航条字体颜色和大小 +// self.navigationController.navigationBar + NSDictionary *dict = [NSDictionary dictionary]; + if (@available(iOS 13.0, *)) { + // iOS 13 之后,这样设置导航条的相关属性才正确。之前的做法已失效 + dict = @{NSForegroundColorAttributeName: [UIColor tertiarySystemBackgroundColor], NSFontAttributeName: [UIFont systemFontOfSize:18]}; + UINavigationBarAppearance *navBarAppearance = [[UINavigationBarAppearance alloc]init]; + [navBarAppearance configureWithOpaqueBackground]; //Opaque: 不透明 + navBarAppearance.backgroundColor = UIColorHex(#21BEBD); + [navBarAppearance setTitleTextAttributes: dict]; + navBar.standardAppearance = navBarAppearance; + navBar.scrollEdgeAppearance = navBarAppearance; + } else { + dict = @{NSForegroundColorAttributeName: KWhiteColor, NSFontAttributeName: [UIFont systemFontOfSize:18]}; + //设置导航条背景色 + navBar.barTintColor = KWhiteColor; + [navBar setTitleTextAttributes:dict]; + } + //设置导航条不透明 + navBar.translucent = NO; + //设置除导航条以外的其他字体颜色 + [navBar setTintColor:UIColorHex(#21BEBD)]; + [navBar setBackgroundImage:[UIImage imageWithColor:UIColorHex(#21BEBD)] forBarMetrics:UIBarMetricsDefault]; + [navBar setShadowImage:[UIImage new]]; +} + +- (void)createUI { + + UIView * doctView = [[UIView alloc] initWithFrame:CGRectMake(0, 1, kScreenWidth, 137)]; + doctView.backgroundColor = UIColorHex(#21BEBD); + self.doctView = doctView; + [self.view addSubview:doctView]; + + + self.heardImage = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(16), kRealValue(10), 60, 60)]; + self.heardImage.layer.cornerRadius = 30.0f; + self.heardImage.layer.masksToBounds = true; + [doctView addSubview:self.heardImage]; + + self.doctorLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.heardImage.right + kRealValue(20), kRealValue(24), 100, 22)]; + self.doctorLabel.text = @""; + self.doctorLabel.font = BOLDSYSTEMFONT(21); + self.doctorLabel.textColor = KWhiteColor; + self.doctorLabel.textAlignment = NSTextAlignmentLeft; + CGFloat nameW = [HQCommonUtils getLengthFromText:self.doctorLabel.text andFontSize:21]; + self.doctorLabel.width = nameW + kRealValue(5); + [doctView addSubview:self.doctorLabel]; + + self.jobLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.doctorLabel.right + kRealValue(12), kRealValue(30), 100, 13)]; + self.jobLabel.text = @""; + self.jobLabel.font = BOLDSYSTEMFONT(13); + self.jobLabel.textColor = KWhiteColor; + self.jobLabel.textAlignment = NSTextAlignmentLeft; + [doctView addSubview:self.jobLabel]; + + + self.collLoveBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth - kRealValue(15) - 60, kRealValue(24), 60, 25)]; + self.collLoveBtn.titleLabel.font = MEDIUMFONT(12); + self.collLoveBtn.layer.cornerRadius = 13.0; + self.collLoveBtn.layer.masksToBounds = true; + [self.collLoveBtn addTarget:self action:@selector(collectHosptal:) forControlEvents:UIControlEventTouchUpInside]; + [doctView addSubview:self.collLoveBtn]; + + self.hospitalLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.heardImage.right + kRealValue(18),self.jobLabel.bottom + kRealValue(15) ,kScreenWidth - self.heardImage.right - kRealValue(30), 13)]; + self.hospitalLabel.text = @""; + self.hospitalLabel.font = BOLDSYSTEMFONT(13); + self.hospitalLabel.textColor = KWhiteColor; + self.hospitalLabel.textAlignment = NSTextAlignmentLeft; + [doctView addSubview:self.hospitalLabel]; + + NSMutableArray *_dataSource = @[ + ].mutableCopy; + + ZHTagListConfiguration *config = [ZHTagListConfiguration defaultConfiguration]; + config.tagTextColor = UIColorHex(#21BEBD); + config.tagTextMargin = 11; + config.tagHeight = 18; + config.tagTextFont = BOLDSYSTEMFONT(11); + config.tagBackColor = KWhiteColor; +// config.tagListViewInset = UIEdgeInsetsMake(15, 15, 15, 10); + + ZHTagListView *tagList = [[ZHTagListView alloc] initWithFrame:CGRectMake(self.heardImage.right + kRealValue(12) , self.hospitalLabel.bottom + kRealValue(8), kScreenWidth - kRealValue(120) , 0) configuration:config tagTexts:_dataSource]; + self.tagList = tagList; + [doctView addSubview:tagList]; + [tagList.tagButtonList enumerateObjectsUsingBlock:^(UIButton * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + + }]; + + UIImageView * starImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(37), tagList.bottom + kRealValue(14), 15, 15)]; + starImg.image = [UIImage imageNamed:@"home_star"]; + self.starImg = starImg; + [doctView addSubview:starImg]; + + self.evaluationLabel = [[UILabel alloc] initWithFrame:CGRectMake(starImg.right + kRealValue(6), starImg.top + kRealValue(2), 50, 11)]; + self.evaluationLabel.font = SYSTEMFONT(13); + [doctView addSubview:self.evaluationLabel]; + +// UIView * hotView = [[UIView alloc] initWithFrame:CGRectMake(self.evaluationLabel.right + kRealValue(3), self.evaluationLabel.top, kRealValue(51), kRealValue(10))]; +// hotView.layer.cornerRadius = 5; +// hotView.layer.masksToBounds = YES; +// hotView.backgroundColor = UIColorHex(#ED2A26); +// self.hotView = hotView; +// [doctView addSubview:hotView]; +// +// UIView * currentHot = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kRealValue(51) * 0.4, kRealValue(10))]; +// currentHot.backgroundColor = UIColorHex(#FF7E31); +// currentHot.layer.cornerRadius = 5; +// currentHot.layer.masksToBounds = YES; +// [hotView addSubview:currentHot]; + + self.doctView.height = self.evaluationLabel.bottom + kRealValue(25); + + //添加滚动 + self.mainScrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, self.doctView.bottom , kScreenWidth, kScreenHeight - self.doctView.bottom - kTopHeight)]; + [self.view addSubview:self.mainScrollview]; + +// UIView * infoView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, kScreenWidth - kRealValue(30), 87.5)]; +// infoView.backgroundColor = KWhiteColor; +// infoView.layer.cornerRadius = 10.0f; +// [HQCommonUtils addShadowToView:infoView]; +// [self.mainScrollview addSubview:infoView]; +// +// UIImageView * replayImage = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(26), kRealValue(24), kRealValue(40), kRealValue(40))]; +// replayImage.image = [UIImage imageNamed:@"repay_Icon"]; +// [infoView addSubview:replayImage]; +// +// self.replyLabel = [[UILabel alloc] initWithFrame:CGRectMake(replayImage.right + kRealValue(12), kRealValue(28), 100, 16)]; +// self.replyLabel.text = @"89%"; +// self.replyLabel.font = BOLDSYSTEMFONT(17); +// self.replyLabel.textColor = CFontColor1; +// self.replyLabel.textAlignment = NSTextAlignmentLeft; +// [infoView addSubview:self.replyLabel]; +// +// UILabel * replyShowLabel = [[UILabel alloc] initWithFrame:CGRectMake(replayImage.right + kRealValue(12),self.replyLabel.bottom + kRealValue(8), kScreenWidth/2 - kRealValue(80), 11)]; +// replyShowLabel.text = @"24小时回复率"; +// replyShowLabel.font = MEDIUMFONT(11); +// replyShowLabel.textColor = UIColorHex(#666666); +// replyShowLabel.textAlignment = NSTextAlignmentLeft; +// [infoView addSubview:replyShowLabel]; +// +// +// UIImageView * satisfactionImage = [[UIImageView alloc] initWithFrame:CGRectMake(infoView.width/2 + kRealValue(22), kRealValue(24), kRealValue(40), kRealValue(40))]; +// satisfactionImage.image = [UIImage imageNamed:@"Satisfaction_icon"]; +// [infoView addSubview:satisfactionImage]; +// +// self.satisfactionLabel = [[UILabel alloc] initWithFrame:CGRectMake(satisfactionImage.right + kRealValue(12), kRealValue(28), 100, 16)]; +// self.satisfactionLabel.text = @"99%"; +// self.satisfactionLabel.font = BOLDSYSTEMFONT(17); +// self.satisfactionLabel.textColor = CFontColor1; +// self.satisfactionLabel.textAlignment = NSTextAlignmentLeft; +// [infoView addSubview:self.satisfactionLabel]; +// +// UILabel * satisShowLabel = [[UILabel alloc] initWithFrame:CGRectMake(satisfactionImage.right + kRealValue(12),self.replyLabel.bottom + kRealValue(8), kScreenWidth/2 - kRealValue(80), 11)]; +// satisShowLabel.text = @"在线服务满意度"; +// satisShowLabel.font = MEDIUMFONT(11); +// satisShowLabel.textColor = UIColorHex(#666666); +// satisShowLabel.textAlignment = NSTextAlignmentLeft; +// [infoView addSubview:satisShowLabel]; +// + //选择预约时间 + + UILabel * timeTitlelabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15),kRealValue(18), kScreenWidth/2, 14)]; + timeTitlelabel.text = @"选择预约时间"; + timeTitlelabel.font = BOLDSYSTEMFONT(14); + timeTitlelabel.textColor = UIColorHex(#333333); + timeTitlelabel.textAlignment = NSTextAlignmentLeft; + [self.mainScrollview addSubview:timeTitlelabel]; + + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; + layout.itemSize = CGSizeMake((kScreenWidth - 48)/2,75); + layout.scrollDirection = UICollectionViewScrollDirectionVertical; + layout.sectionInset = UIEdgeInsetsMake(10, 15, 0, 15); + layout.minimumInteritemSpacing =6; + layout.minimumLineSpacing =6; + + self.collectView = [[DoctorTimeSelectedCollectView alloc]initWithFrame:CGRectMake(0, timeTitlelabel.bottom + kRealValue(12),kScreenWidth, kScreenHeight - kTopHeight - timeTitlelabel.bottom - kRealValue(12) - 40 ) collectionViewLayout:layout]; + self.collectView.timeDelegate = self; + [self.mainScrollview addSubview:self.collectView]; + + self.mainScrollview.contentSize = CGSizeMake(kScreenWidth, kScreenHeight - self.doctView.bottom); + + UIButton * bottomBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(31.5), kScreenHeight - kTopHeight - 30 - 40 , kScreenWidth - kRealValue(66), 40)]; + [bottomBtn setTitle:@"立即预约" forState:UIControlStateNormal]; + [bottomBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + + bottomBtn.titleLabel.font = SYSTEMFONT(14); + bottomBtn.layer.cornerRadius = 20; + bottomBtn.layer.masksToBounds = true; + bottomBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + [bottomBtn addTarget:self action:@selector(submitAppointClick) forControlEvents:UIControlEventTouchUpInside]; + bottomBtn.layer.borderWidth = 1.0f; + [self.view addSubview:bottomBtn]; +} + +- (void)createDoctorData { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"DOCTORAPI" NeedToken:@""]; + + [detailApi getDoctorExpertMainData:parmDic]; + + +} + +- (void)createData { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + + JKCQAPI * timeApi = [[JKCQAPI alloc] init:self tag:@"TimeAPI" NeedToken:@""]; + + [timeApi getExpertDoctorHaveTimeData:parmDic]; + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"DOCTORAPI"]) { + + [self hiddenAllMBProgressHUD]; + + NSDictionary * parmDic = response; + + DoctorDetailModel * model = [DoctorDetailModel modelWithDictionary:parmDic]; + + if ([model.tfFollow integerValue] == 1) { + [self.collLoveBtn setTitle:@"已关注" forState:UIControlStateNormal]; + [self.collLoveBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [self.collLoveBtn setImage:[UIImage imageWithColor:UIColor.grayColor] forState:UIControlStateNormal]; + self.collLoveBtn.backgroundColor = RGBA(221, 221, 221, 1); + self.collLoveBtn.selected = true; + + }else + { + [self.collLoveBtn setTitle:@" 关注" forState:UIControlStateNormal]; + [self.collLoveBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [self.collLoveBtn setImage:IMAGE_NAMED(@"collectLove") forState:UIControlStateNormal]; + self.collLoveBtn.backgroundColor = KWhiteColor ; + self.collLoveBtn.selected = false; + + } + self.doctorLabel.text = model.doctorName; + self.jobLabel.text = model.doctorTitle; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,model.photo]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.heardImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:IMAGE_NAMED(@"doctorNoImage")]; + + //评分 + NSMutableAttributedString * firstPart = [[NSMutableAttributedString alloc] initWithString:@"综合评价:"]; + NSDictionary * firstAttributes = @{ NSFontAttributeName:[UIFont boldSystemFontOfSize:11],NSForegroundColorAttributeName:KWhiteColor}; + [firstPart setAttributes:firstAttributes range:NSMakeRange(0,firstPart.length)]; + + NSMutableAttributedString * secondPart = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ / ",model.overallMerit]]; + NSDictionary * secondAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:13],NSForegroundColorAttributeName:KWhiteColor}; + [secondPart setAttributes:secondAttributes range:NSMakeRange(0,secondPart.length)]; + [firstPart appendAttributedString:secondPart]; + + NSMutableAttributedString * thirdPart = [[NSMutableAttributedString alloc] initWithString:@"24小时回复率:"]; + NSDictionary * thirdAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:11],NSForegroundColorAttributeName:KWhiteColor}; + [thirdPart setAttributes:thirdAttributes range:NSMakeRange(0,thirdPart.length)]; + [firstPart appendAttributedString:thirdPart]; + + NSMutableAttributedString * fourPart = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ / ",model.responseRate]]; + NSDictionary * fourAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:13],NSForegroundColorAttributeName:KWhiteColor}; + [fourPart setAttributes:fourAttributes range:NSMakeRange(0,fourPart.length)]; + [firstPart appendAttributedString:fourPart]; + + NSMutableAttributedString * fivePart = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"咨询量:%@",model.messageNum]]; + NSDictionary * fiveAttributes = @{ NSFontAttributeName:[UIFont boldSystemFontOfSize:11],NSForegroundColorAttributeName:KWhiteColor}; + [fivePart setAttributes:fiveAttributes range:NSMakeRange(0,fivePart.length)]; + [firstPart appendAttributedString:fivePart]; + + + + self.evaluationLabel.attributedText = firstPart; + + NSMutableArray * sicksArray = [[NSMutableArray alloc] init]; + + for (DoctorGoodAtSicknessModel * sicModel in model.goodAtSicknessName) { + + [sicksArray addObject:sicModel.sicksName]; + } + self.tagList.tagDataArray = sicksArray; + + self.tagList.tagDataArray = sicksArray; + //布局 + self.doctorLabel.width = [HQCommonUtils getLengthFromText:model.doctorName andFontSize:23]; + self.jobLabel.left = self.doctorLabel.right + kRealValue(12); + self.hospitalLabel.text = [NSString stringWithFormat:@"%@ %@",model.resourceName,model.departmentName]; + self.starImg.top = self.tagList.bottom + kRealValue(14); + CGSize attSize = [firstPart boundingRectWithSize:CGSizeMake(kScreenWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil].size; + self.evaluationLabel.frame = CGRectMake(self.starImg.right + kRealValue(6), self.starImg.top + kRealValue(2), attSize.width, 11); +// self.hotView.left = self.evaluationLabel.right + kRealValue(5); +// self.hotView.top = self.evaluationLabel.top; + self.doctView.height = self.evaluationLabel.bottom + kRealValue(25); + self.mainScrollview.frame = CGRectMake(0, self.doctView.bottom , kScreenWidth, kScreenHeight - self.doctView.bottom - kTopHeight); + self.mainScrollview.contentSize = CGSizeMake(kScreenWidth, kScreenHeight - self.doctView.bottom); + + + } + if ([tag isEqualToString:@"TimeAPI"]) { + +// NSArray * array = response; + NSMutableArray * array = [[NSMutableArray alloc] initWithArray:response]; + NSMutableArray * dataArray = [[NSMutableArray alloc] init]; + + + for (NSDictionary * dic in array) { + + DoctorTimeModel * model = [DoctorTimeModel modelWithDictionary:dic]; + model.isAppment = false; + [dataArray addObject:model]; + } + self.collectView.dataArray = dataArray; + } + if ([tag isEqualToString:@"CollAPI"]) { + + [self hiddenAllMBProgressHUD]; + [self.collLoveBtn setTitle:@"已关注" forState:UIControlStateNormal]; + [self.collLoveBtn setTitleColor:KWhiteColor forState:UIControlStateSelected]; + self.collLoveBtn.backgroundColor = RGBA(221, 221, 221, 1); + [self.collLoveBtn setImage:[UIImage imageWithColor:UIColor.grayColor] forState:UIControlStateNormal]; + [EasyTextView showSuccessText:response]; + self.collLoveBtn.selected = true; + } + if ([tag isEqualToString:@"cancelAPI"]) { + [self hiddenAllMBProgressHUD]; + [self.collLoveBtn setTitle:@" 关注" forState:UIControlStateNormal]; + [self.collLoveBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [self.collLoveBtn setImage:IMAGE_NAMED(@"collectLove") forState:UIControlStateNormal]; + self.collLoveBtn.backgroundColor = KWhiteColor ; + self.collLoveBtn.selected = false; + [EasyTextView showSuccessText:response]; + + } +} + + + +- (void)collectHosptal:(UIButton *)collBtn { + + if (collBtn.selected == YES) { + + [self showMBProgressHUDWithString:@"取消关注,请稍候..." autoHidden:false ]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"cancelAPI" NeedToken:@""]; + + [detailApi getCancelCollectDoctorExpertData:parmDic]; + + }else + { + [self showMBProgressHUDWithString:@"关注中,请稍候..." autoHidden:false ]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.doctorId forKey:@"doctorId"]; + + JKCQAPI * detailApi = [[JKCQAPI alloc] init:self tag:@"CollAPI" NeedToken:@""]; + + [detailApi getCollectDoctorExpertData:parmDic]; + } +} + +- (void)doctorTimeSureAction:(NSString *)timeID { + + self.schedulingDateId = timeID; + +} + +- (void)submitAppointClick { + + if (ValidStr(self.schedulingDateId)) { + + [EasyTextView showErrorText:@"请选择预约时间"]; + return; + } + + SelectedQuestionViewController * questionVC = [[SelectedQuestionViewController alloc] init]; + questionVC.questionType = 2; + questionVC.schedulingDateId = self.schedulingDateId; + questionVC.doctorID = self.doctorId; + [self.navigationController pushViewController:questionVC animated:YES]; + + + +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedQuestionViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedQuestionViewController.h new file mode 100644 index 0000000..93c57dd --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedQuestionViewController.h @@ -0,0 +1,21 @@ +// +// SelectedQuestionViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SelectedQuestionViewController : HQBaseViewController + +@property (nonatomic, assign) NSInteger questionType; //1 图文 2音视频 +@property (nonatomic, copy) NSString * doctorID; +@property (nonatomic, copy) NSString * schedulingDateId; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedQuestionViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedQuestionViewController.m new file mode 100644 index 0000000..2fb7a5d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SelectedQuestionViewController.m @@ -0,0 +1,449 @@ +// +// SelectedQuestionViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "SelectedQuestionViewController.h" +#import "SelectedQuestionTableView.h" +#import "QuestionDiseaseInfoModel.h" +#import "SelectFIleDateDetailViewController.h" +#import "QuestionPeopleMangerVC.h" +#import "SelectedQuestionTypeTableCell.h" +#import "LookModficalFileViewController.h" +#import "SOSGroupIMModel.h" +#import "DoctorMainViewController.h" + +@interface SelectedQuestionViewController () + +@property (nonatomic, strong) SelectedQuestionTableView * tableView; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, assign) NSInteger pageNo; + +@property (nonatomic, assign) NSInteger isJump; + +@property (nonatomic, copy) NSString * data_ID; + +@property (nonatomic, strong) QuestionDiseaseInfoModel * disModel; +@end + +@implementation SelectedQuestionViewController + +#pragma mark:懒加载 + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + + _dataArray = [[NSMutableArray alloc] init]; + } + + return _dataArray; +} + + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.pageNo = 1; + self.isHidenNaviBar = false; + self.view.backgroundColor = UIColorHex(#F4F4F4); + self.navigationItem.title = @"选择咨询人"; + [self addNavigationItemWithTitles:@[@"管理"] isLeft:NO target:self action:@selector(questionManager) tags:@[@"1000"]]; + [self createUI]; + [self getQuestionInfo]; +} +- (void)viewWillAppear:(BOOL)animated { + + [super viewWillAppear:animated]; + [self.tableView.mj_header beginRefreshing]; + +} + +- (void)createUI { + + self.tableView = [[SelectedQuestionTableView alloc] initWithFrame:CGRectMake(kRealValue(10), kRealValue(10), kScreenWidth - kRealValue(20), kScreenHeight - kTopHeight - 57 - SafetyAreaHeight) style:UITableViewStyleGrouped]; + self.tableView.backgroundColor = UIColorHex(#F4F4F4); + self.tableView.addDelegate = self; + self.tableView.diseaseDelegate = self; + self.tableView.peopleDelegate = self; + [self.view addSubview:self.tableView]; + + __weak __typeof(self) weakSelf = self; + self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + weakSelf.pageNo = 1; + [weakSelf getQuestionInfo]; + + + }]; + self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + weakSelf.pageNo ++; + + [weakSelf getQuestionInfo]; + }]; + + if (self.questionType == 2) { + + UIButton * nextButton = [[UIButton alloc] initWithFrame:CGRectMake(0, kScreenHeight - kTopHeight - 22 - SafetyAreaHeight, kRealValue(150), 35)]; + [nextButton setTitle:@"下一步" forState:UIControlStateNormal]; + [nextButton setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + nextButton.layer.cornerRadius = 18; + nextButton.layer.masksToBounds = YES; + nextButton.layer.borderWidth = 1.0; + nextButton.layer.borderColor = UIColorHex(#21BEBD).CGColor; + nextButton.backgroundColor = KWhiteColor; + nextButton.titleLabel.font = SYSTEMFONT(14); + nextButton.centerX = self.view.centerX; + [nextButton addTarget:self action:@selector(nextAddQusetion) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:nextButton]; + + } + else + { + + UIButton * jumpButton = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth/2 - kRealValue(170), kScreenHeight - kTopHeight - 35 - SafetyAreaHeight, kRealValue(150), 35)]; + [jumpButton setTitle:@"快速咨询" forState:UIControlStateNormal]; + [jumpButton setTitleColor:KWhiteColor forState:UIControlStateNormal]; + jumpButton.layer.cornerRadius = 18; + jumpButton.layer.masksToBounds = YES; + jumpButton.layer.borderWidth = 1.0; + jumpButton.layer.borderColor = UIColorHex(#21BEBD).CGColor; + jumpButton.backgroundColor = UIColorHex(#21BEBD); + jumpButton.titleLabel.font = SYSTEMFONT(14); + [jumpButton addTarget:self action:@selector(jumpQusetion) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:jumpButton]; + + UIButton * nextButton = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth/2 + kRealValue(20), kScreenHeight - kTopHeight - 35 - SafetyAreaHeight, kRealValue(150), 35)]; + [nextButton setTitle:@"下一步" forState:UIControlStateNormal]; + [nextButton setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + nextButton.layer.cornerRadius = 18; + nextButton.layer.masksToBounds = YES; + nextButton.layer.borderWidth = 1.0; + nextButton.layer.borderColor = UIColorHex(#21BEBD).CGColor; + nextButton.backgroundColor = KWhiteColor; + nextButton.titleLabel.font = SYSTEMFONT(14); + [nextButton addTarget:self action:@selector(nextAddQusetion) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:nextButton]; + } + //初始化一个emptyView + LYEmptyView *emptyView = [LYEmptyView emptyViewWithImageStr:@"noDataBox" titleStr:@"暂无数据" detailStr:@""]; + //元素竖直方向的间距 + emptyView.subViewMargin = 20.f; + //标题颜色 + emptyView.titleLabTextColor = [UIColor blackColor]; + //描述字体 + emptyView.detailLabFont = [UIFont systemFontOfSize:17]; + //按钮背景色 + emptyView.actionBtnBackGroundColor = KWhiteColor; + emptyView.actionBtnWidth = CGFLOAT_MIN; + emptyView.actionBtnHeight = CGFLOAT_MIN; + + //设置空内容占位图 + self.tableView.ly_emptyView = emptyView; + + +} +#pragma mark:管理 +- (void)questionManager { + + QuestionPeopleMangerVC * mangerVC = [[QuestionPeopleMangerVC alloc] init]; + [self.navigationController pushViewController:mangerVC animated:YES]; +} + +#pragma mark:跳过 +- (void)jumpQusetion { + + if ([ESCTUIManager TUIUserStatus] == false) { + + + [self loginImAccount]; + return; + } + NSString * upID = @""; + NSString * onID = @""; + self.isJump = 1; + for (QuestionDiseaseInfoModel * mode in self.dataArray) { + + for (diseaseModel * subModel in mode.list) { + + if (subModel.isSelected == true) { + + upID = mode.memberId_id; + } + } + } + + [self showMBProgressHUDWithString:@"等待发起会话" autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init] ; + [parmDic setObject:@"" forKey:@"memberId"]; + [parmDic setObject:self.doctorID forKey:@"toAccount"]; + [parmDic setObject:upID forKey:@"medicalRecordsId"]; + JKCQAPI * questionApi = [[JKCQAPI alloc] init:self tag:@"PICTURE" NeedToken:@""]; + [questionApi postPictureQuestionAPI:parmDic]; +} + + +#pragma mark:下一步 +- (void)nextAddQusetion { + + //判断im是否登陆 没登录请求登录 retur + if ([ESCTUIManager TUIUserStatus] == false) { + + + [self loginImAccount]; + return; + } + // + self.isJump = 2; + NSString * upID = @""; + NSString * onID = @""; + + for (QuestionDiseaseInfoModel * mode in self.dataArray) { + + for (diseaseModel * subModel in mode.list) { + + if (subModel.isSelected == true) { + + onID = subModel.tfper_id; + upID = mode.memberId_id; + self.disModel = mode; + self.disModel.memberId_id = mode.memberId_id; + self.data_ID = onID; + } + } + } + if (ValidStr(upID) || ValidStr(onID)) { + [EasyTextView showErrorText:@"请选择咨询人"]; + return; + } + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init] ; + + [parmDic setObject:upID forKey:@"memberId"]; + [parmDic setObject:self.doctorID forKey:@"toAccount"]; + [parmDic setObject:onID forKey:@"medicalRecordsId"]; + if (self.questionType == 1) { + [self showMBProgressHUDWithString:@"等待发起会话" autoHidden:NO]; + JKCQAPI * questionApi = [[JKCQAPI alloc] init:self tag:@"PICTURE" NeedToken:@""]; + [questionApi postPictureQuestionAPI:parmDic]; + + } + + if (self.questionType == 2) { + //音视频 + // schedulingDateId 时间id memberId 家庭成员id toAccount医生id contentType 2 medicalRecordsId 档案id + [self showMBProgressHUDWithString:@"预约中请等待~" autoHidden:NO]; + [parmDic setObject:@"2" forKey:@"contentType"]; + [parmDic setObject:self.schedulingDateId forKey:@"schedulingDateId"]; + + JKCQAPI * questionApi = [[JKCQAPI alloc] init:self tag:@"VIDEO" NeedToken:@""]; + [questionApi postVideoQuestionAPI:parmDic]; + } + +} + +- (void)getQuestionInfo { + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init] ; + + [parmDic setObject:@(self.pageNo) forKey:@"pageNo"]; + [parmDic setObject:@(10) forKey:@"pageSize"]; + + JKCQAPI * questionApi = [[JKCQAPI alloc] init:self tag:@"QUESTION" NeedToken:@""]; + + [questionApi getMembersSicksList:parmDic]; + + +} + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self.tableView.mj_header endRefreshing]; + [self.tableView.mj_footer endRefreshing]; + [self hiddenAllMBProgressHUD]; + [EasyTextView showErrorText:message]; + + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + + + if ([tag isEqualToString:@"QUESTION"]) { + [self.tableView.mj_header endRefreshing]; + [self.tableView.mj_footer endRefreshing]; + NSArray * array = response; + + if (self.pageNo == 1) { + + [self.dataArray removeAllObjects]; + } + + for (NSDictionary * dic in array) { + + + QuestionDiseaseInfoModel * model = [QuestionDiseaseInfoModel modelWithDictionary:dic]; + + model.rowHeight = 85 * model.list.count + kRealValue(10) * model.list.count; + + + [self.dataArray addObject:model]; + + + + } + + self.tableView.dataArray = self.dataArray; + } + + //判断是否的登录 + + if ([tag isEqualToString:@"PICTURE"]) { + + //判断是否的登录哦, + + [self hiddenAllMBProgressHUD]; + NSDictionary * resDic = response; + + SOSGroupIMModel * model = [SOSGroupIMModel modelWithDictionary:response]; + + ChatViewController * chatVC = [[ChatViewController alloc] init]; + chatVC.isGroupID = YES; + chatVC.chatID = model.groupId; + chatVC.member = model.member; + chatVC.disModel = self.disModel; + chatVC.pictureEnd_id = model.sosEnd_id; + chatVC.dangan_id = self.data_ID; + chatVC.questionType = 2; + chatVC.kuaisuzixun = [NSString stringWithFormat:@"%ld",self.isJump]; + chatVC.JumpType = self.isJump; + if (self.isJump == 1) { + chatVC.eableSendReport =false; + chatVC.eablehaveHelathData = false; + }else + { + chatVC.eableSendReport = true; + chatVC.eablehaveHelathData = false; + } + + chatVC.navTitle = @"图文咨询"; + chatVC.isVideo = NO; + chatVC.PopType = 10; + [self.navigationController pushViewController:chatVC animated:YES]; + + } + + if ([tag isEqualToString:@"VIDEO"]) { + [self hiddenAllMBProgressHUD]; + NSString * resultString = response; + DoctorMainViewController * doctorVC = [[DoctorMainViewController alloc] init]; + doctorVC.disModel = self.disModel; + doctorVC.yuyue_id = resultString; + [self.navigationController pushViewController:doctorVC animated:YES]; + } + if ([tag isEqualToString:@"loginIMAPI"]) { + + NSDictionary * pamrDic = response; + + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + [ESCTUIManager loginInitTUISDKAppidWith:[model.sdkAppId intValue] UserID:model.userId userSig:model.userSig]; + [self nextAddQusetion]; + + } +} + +- (void)loginImAccount { + + [self showMBProgressHUDWithString:@"等待发起会话" autoHidden:NO]; + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"loginIMAPI" NeedToken:nil]; + [proctocolApi GetIMLoginAccount:nil]; + +} +#pragma mark:新增档案 + +- (void)addQuestionPeopleClick:(QuestionDiseaseInfoModel *)model { + + SelectFIleDateDetailViewController * detailVC = [[SelectFIleDateDetailViewController alloc] init]; + detailVC.infomodel = model; + [self.navigationController pushViewController:detailVC animated:YES]; + +} + +- (void)diseaseSelectedAction:(QuestionDiseaseInfoModel *)model { + + for (QuestionDiseaseInfoModel * infomodel in self.dataArray) { + + if (model == infomodel) { + + for (diseaseModel * nomalModel in infomodel.list) { + + if (nomalModel.isSelected == true) { + self.disModel = infomodel; + } + } + + }else + { + for (diseaseModel * nomalModel in infomodel.list) { + + nomalModel.isSelected = false; + } + } + } + + [self.tableView reloadData]; + + + +} + +#pragma mark:编辑修改 + +- (void)modficalFileAction:(diseaseModel *)model withQustionModel:(nonnull QuestionDiseaseInfoModel *)infoModel { + + LookModficalFileViewController * detailVC = [[LookModficalFileViewController alloc] init]; + detailVC.disModel = model; + detailVC.infomodel = infoModel; + detailVC.upID = infoModel.memberId_id; + detailVC.downID = model.tfper_id; + detailVC.questionType = self.questionType; + detailVC.schedulingDateId = self.schedulingDateId; + detailVC.doctorID = self.doctorID; + detailVC.isJump = self.isJump; + detailVC.isEdit = YES; + [self.navigationController pushViewController:detailVC animated:YES]; + + + + +} + +//在线时票据过期:此时您需要生成新的 userSig,并再次重新调用初始化。 +- (void)onKickedOffline { + + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + [ESCTUIManager outLoginTUISDK]; + KPostNotification(KNotificationLoginStateChange, @NO); + +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SmallHelpHandViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SmallHelpHandViewController.h new file mode 100644 index 0000000..93a0a0a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SmallHelpHandViewController.h @@ -0,0 +1,16 @@ +// +// SmallHelpHandViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/29. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SmallHelpHandViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SmallHelpHandViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SmallHelpHandViewController.m new file mode 100644 index 0000000..d423e70 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Controller/SmallHelpHandViewController.m @@ -0,0 +1,31 @@ +// +// SmallHelpHandViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/29. +// + +#import "SmallHelpHandViewController.h" + +@interface SmallHelpHandViewController () + +@end + +@implementation SmallHelpHandViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorDetailModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorDetailModel.h new file mode 100644 index 0000000..8da747d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorDetailModel.h @@ -0,0 +1,53 @@ +// +// DoctorDetailModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/16. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface DoctorGoodAtSicknessModel : NSObject + +@property (nonatomic, copy) NSString * good_id; +@property (nonatomic, copy) NSString * sicksName; + + +@end + + +@interface DoctorDetailModel : NSObject + +@property (nonatomic, copy) NSString * doctorName; +@property (nonatomic, copy) NSString * departmentId; +@property (nonatomic, copy) NSString * departmentName; +@property (nonatomic, copy) NSString * doctorStatus; +@property (nonatomic, copy) NSString * audioStatus; +@property (nonatomic, copy) NSString * tfFollow; +@property (nonatomic, copy) NSString * responseRate; +@property (nonatomic, copy) NSString * resourceId; +@property (nonatomic, copy) NSString * hospitalLevel; +@property (nonatomic, copy) NSString * goodAt; +@property (nonatomic, copy) NSString * type; +@property (nonatomic, copy) NSString * doctor_id; +@property (nonatomic, copy) NSString * doctorTitle; +@property (nonatomic, copy) NSString * degreeHeat; +@property (nonatomic, copy) NSString * tfShowFire; +@property (nonatomic, copy) NSString * messageNum; +@property (nonatomic, copy) NSString * doctorScore; +@property (nonatomic, copy) NSString * goodAtSickness; +@property (nonatomic, copy) NSString * resourceName; +@property (nonatomic, copy) NSString * overallMerit; +@property (nonatomic, copy) NSString * introduction; +@property (nonatomic, copy) NSString * photo; +@property (nonatomic, copy) NSString * doctorLabel; +@property (nonatomic, strong) NSArray * goodAtSicknessName; +@property (nonatomic, copy) NSString * experience; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorDetailModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorDetailModel.m new file mode 100644 index 0000000..1f4e27e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorDetailModel.m @@ -0,0 +1,39 @@ +// +// DoctorDetailModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/16. +// + +#import "DoctorDetailModel.h" + + +@implementation DoctorGoodAtSicknessModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"good_id" :@"id"}; + return dic; +} + +@end + + +@implementation DoctorDetailModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"doctor_id" :@"id"}; + return dic; +} + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"goodAtSicknessName":[DoctorGoodAtSicknessModel class], + + }; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorRecommendModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorRecommendModel.h new file mode 100644 index 0000000..0ce85b0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorRecommendModel.h @@ -0,0 +1,39 @@ +// +// DoctorRecommendModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/12. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface QuestionDoctorListModel : NSObject + +@property (nonatomic, copy) NSString * doctorId; +@property (nonatomic, copy) NSString * doctorName; +@property (nonatomic, copy) NSString * photo; +@property (nonatomic, copy) NSString * resourceId; +@property (nonatomic, copy) NSString * resourceName; +@property (nonatomic, copy) NSString * departmentName; +@property (nonatomic, copy) NSString * goodAt; +@property (nonatomic, copy) NSString * hospitalLevel; +@property (nonatomic, copy) NSString * doctorScore; +@property (nonatomic, copy) NSString * type; +@property (nonatomic, copy) NSString * departmentId; +@property (nonatomic, copy) NSString * doctorTitle; + +@end + + +@interface DoctorRecommendModel : NSObject + +@property (nonatomic, copy) NSString * haveSessioning; + +@property (nonatomic, strong) NSArray * list; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorRecommendModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorRecommendModel.m new file mode 100644 index 0000000..0f83016 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorRecommendModel.m @@ -0,0 +1,34 @@ +// +// DoctorRecommendModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/12. +// + +#import "DoctorRecommendModel.h" + +@implementation QuestionDoctorListModel + + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"doctorId" :@"id"}; + return dic; +} + +@end + + + + +@implementation DoctorRecommendModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"list":[QuestionDoctorListModel class], + + }; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorReportModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorReportModel.h new file mode 100644 index 0000000..8f3a361 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorReportModel.h @@ -0,0 +1,140 @@ +// +// DoctorReportModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/12. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctoIMListModel : NSObject + +@property (nonatomic, strong) NSString * startTime; +@property (nonatomic, strong) NSString * endTime; +@property (nonatomic, strong) NSString * type; +@property (nonatomic, strong) NSString * startTimLong; +@property (nonatomic, strong) NSString * endTimeLong; + +@end + + +@interface DoctorAnswerModel : NSObject + +@property (nonatomic, strong) NSString * answerValue; +@property (nonatomic, strong) NSString * answerKey; + +@end + +@interface DoctorReportRecordsModel : NSObject + +@property (nonatomic, strong) NSString * recordsName; +@property (nonatomic, strong) NSString * gender; +@property (nonatomic, strong) NSString * createTime; +@property (nonatomic, strong) NSString * age; +@property (nonatomic, strong) NSString * image; +@property (nonatomic, strong) NSString * tfPermission; +@property (nonatomic, strong) NSString * medicalDescribe; +@property (nonatomic, strong) NSString * createTimeLong; +@property (nonatomic, strong) NSString * dangan_id; +@property (nonatomic, strong) NSString * haveTimeValue; +@property (nonatomic, strong) NSString * tfLook; +@property (nonatomic, strong) NSString * tfLookValue; +@property (nonatomic, strong) NSString * updateTime; +@property (nonatomic, strong) NSString * desire; +@property (nonatomic, strong) NSString * lookOffice; +@property (nonatomic, strong) NSString * lookMedicalName; + +@end + +@interface DoctorReportFamilyInfoModel : NSObject + +@property (nonatomic, strong) NSString * gender; +@property (nonatomic, strong) NSString * birthday; +@property (nonatomic, strong) NSString * groupId; +@property (nonatomic, strong) NSString * age; +@property (nonatomic, strong) NSString * name; +@property (nonatomic, strong) NSString * height; +@property (nonatomic, strong) NSString * weight; + +@end + +@interface DoctorReportConSessionModel : NSObject + +@property (nonatomic, strong) NSString * memberId; +@property (nonatomic, strong) NSString * toAccount; +@property (nonatomic, strong) NSString * fromAccount; +@property (nonatomic, strong) NSString * memberName; +@property (nonatomic, strong) NSString * memberSex; +@property (nonatomic, strong) NSString * memberAge; +@property (nonatomic, strong) NSString * medicalRecordsId; +@property (nonatomic, strong) NSString * schedulingDateId; +@property (nonatomic, strong) NSString * createTime; +@property (nonatomic, strong) NSString * sessionDate; +@property (nonatomic, strong) NSString * week; +@property (nonatomic, strong) NSString * amPm; +@property (nonatomic, strong) NSString * createTimeLong; +@property (nonatomic, strong) NSString * sessionDateLong; +@property (nonatomic, strong) NSString * contentType; +@property (nonatomic, strong) NSString * contentStatus; +@property (nonatomic, strong) NSString * doctorStartTime; +@property (nonatomic, strong) NSString * yuyue_id; +@property (nonatomic, strong) NSString * doctorStartTimeLong; +@property (nonatomic, strong) NSString * doctorEndTimeLong; +@property (nonatomic, strong) NSString * reasonType; +@property (nonatomic, strong) NSString * rejectReason; +@end + +@interface DoctorReportDoctorInfoModel : NSObject + +@property (nonatomic, strong) NSString * doctorName; +@property (nonatomic, strong) NSString * departmentId; +@property (nonatomic, strong) NSString * departmentName; +@property (nonatomic, strong) NSString * tfFollow; +@property (nonatomic, strong) NSString * responseRate; +@property (nonatomic, strong) NSString * resourceId; +@property (nonatomic, strong) NSString * conEvaluateDO; +@property (nonatomic, strong) NSString * hospitalLevel; +@property (nonatomic, strong) NSString * goodAt; +@property (nonatomic, strong) NSString * type; +@property (nonatomic, strong) NSString * goodAtSicknessName; +@property (nonatomic, strong) NSString * doctorTitle; +@property (nonatomic, strong) NSString * tfShowFire; +@property (nonatomic, strong) NSString * messageNum; + +@property (nonatomic, strong) NSString * doctorScore; +@property (nonatomic, strong) NSString * goodAtSickness; +@property (nonatomic, strong) NSString * resourceName; +@property (nonatomic, strong) NSString * introduction; +@property (nonatomic, strong) NSString * photo; +@property (nonatomic, strong) NSString * doctorLabel; +@property (nonatomic, strong) NSString * doctor_id; + +@end + +@interface DoctorConEvaluateDOModel : NSObject + +@property (nonatomic, strong) NSString * userName; +@property (nonatomic, strong) NSString * context; +@property (nonatomic, strong) NSString * time; +@property (nonatomic, strong) NSString * score; + +@end + +@interface DoctorReportModel : NSObject + +@property (nonatomic, strong) NSDictionary * conDoctorDO; +@property (nonatomic, strong) NSDictionary * conSession; +@property (nonatomic, strong) NSDictionary * conMedicalRecordsListDO; +@property (nonatomic, strong) NSDictionary * conMedicalRecordsDO; +@property (nonatomic, strong) NSDictionary * conFamilyMembersDO; +@property (nonatomic, strong) NSArray * imList; +@property (nonatomic, strong) NSDictionary * conEvaluateDO; +@property (nonatomic, strong) NSArray * answer; + +@property (nonatomic, strong) NSString * idNo; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorReportModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorReportModel.m new file mode 100644 index 0000000..a9955e2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorReportModel.m @@ -0,0 +1,80 @@ +// +// DoctorReportModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/12. +// + +#import "DoctorReportModel.h" + +@implementation DoctoIMListModel + + + +@end + +@implementation DoctorAnswerModel + + +@end + + +@implementation DoctorReportRecordsModel + + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"dangan_id" :@"id"}; + return dic; +} + +@end + + +@implementation DoctorReportFamilyInfoModel + +@end + +@implementation DoctorConEvaluateDOModel + +@end + + +@implementation DoctorReportDoctorInfoModel + + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"doctor_id" :@"id"}; + return dic; +} + + +@end + + + +@implementation DoctorReportConSessionModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"yuyue_id" :@"id"}; + return dic; +} +@end + + + +@implementation DoctorReportModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"answer":[DoctorAnswerModel class], + @"imList":[DoctoIMListModel class], + + }; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorTimeModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorTimeModel.h new file mode 100644 index 0000000..005daee --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorTimeModel.h @@ -0,0 +1,26 @@ +// +// DoctorTimeModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/20. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctorTimeModel : NSObject + +@property (nonatomic, copy) NSString * time_id; +@property (nonatomic, copy) NSString * readySchedulingNum; +@property (nonatomic, copy) NSString * type; +@property (nonatomic, copy) NSString * schedulingNum; +@property (nonatomic, copy) NSString * week; +@property (nonatomic, copy) NSString * schedulingDate; +@property (nonatomic, assign) BOOL isAppment; + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorTimeModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorTimeModel.m new file mode 100644 index 0000000..8a4e844 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/DoctorTimeModel.m @@ -0,0 +1,20 @@ +// +// DoctorTimeModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/20. +// + +#import "DoctorTimeModel.h" + +@implementation DoctorTimeModel + + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"time_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/EvaluatListModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/EvaluatListModel.h new file mode 100644 index 0000000..5424697 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/EvaluatListModel.h @@ -0,0 +1,26 @@ +// +// EvaluatListModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface EvaluatListModel : NSObject + +@property (nonatomic, copy) NSString * userId; +@property (nonatomic, copy) NSString * score; +@property (nonatomic, copy) NSString * userName; +@property (nonatomic, copy) NSString * officeName; +@property (nonatomic, copy) NSString * time; +@property (nonatomic, copy) NSString * context; +@property (nonatomic, copy) NSString * sessionType; +@property (nonatomic, copy) NSString * evaluat_Id; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/EvaluatListModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/EvaluatListModel.m new file mode 100644 index 0000000..9611ed4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/EvaluatListModel.m @@ -0,0 +1,19 @@ +// +// EvaluatListModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/14. +// + +#import "EvaluatListModel.h" + +@implementation EvaluatListModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"evaluat_Id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FamilyMemberRelationModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FamilyMemberRelationModel.h new file mode 100644 index 0000000..107a83f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FamilyMemberRelationModel.h @@ -0,0 +1,22 @@ +// +// FamilyMemberRelationModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/21. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FamilyMemberRelationModel : NSObject + +@property (nonatomic, copy) NSString * value; +@property (nonatomic, copy) NSString * text; +@property (nonatomic, copy) NSString * label; +@property (nonatomic, copy) NSString * title; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FamilyMemberRelationModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FamilyMemberRelationModel.m new file mode 100644 index 0000000..58d9889 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FamilyMemberRelationModel.m @@ -0,0 +1,12 @@ +// +// FamilyMemberRelationModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/21. +// + +#import "FamilyMemberRelationModel.h" + +@implementation FamilyMemberRelationModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FileDataModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FileDataModel.h new file mode 100644 index 0000000..66d96ea --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FileDataModel.h @@ -0,0 +1,20 @@ +// +// FileDataModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FileDataModel : NSObject + +@property (nonatomic, strong)NSMutableArray *pictureArray; + +@property (nonatomic, strong)NSMutableArray *assetArray; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FileDataModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FileDataModel.m new file mode 100644 index 0000000..0cffd92 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FileDataModel.m @@ -0,0 +1,12 @@ +// +// FileDataModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "FileDataModel.h" + +@implementation FileDataModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FoundExpertModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FoundExpertModel.h new file mode 100644 index 0000000..d2bdfbb --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FoundExpertModel.h @@ -0,0 +1,83 @@ +// +// FoundExpertModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + +#import +#import "HospitalInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctorListModel : NSObject + +@property (nonatomic, copy) NSString * doctorId; +@property (nonatomic, copy) NSString * doctorTitle; +@property (nonatomic, copy) NSString * goodAt; +@property (nonatomic, copy) NSString * experience; +@property (nonatomic, copy) NSString * doctorStatus; +@property (nonatomic, copy) NSString * gdId; +@property (nonatomic, copy) NSString * status; +@property (nonatomic, copy) NSString * type; +@property (nonatomic, copy) NSString * doctorName; +@property (nonatomic, copy) NSString * photo; +@property (nonatomic, copy) NSString * userScore; +@property (nonatomic, copy) NSString * responseRate;//回复率 +@property (nonatomic, copy) NSString * messageNum;//咨询量 +@property (nonatomic, copy) NSString * overallMerit;// 综合评价 +@property (nonatomic, copy) NSString * tfShowFire; +@property (nonatomic, copy) NSString * audioStatus; + + +@property (nonatomic, copy) NSString * hospitalLevel;// 综合评价 + +@property (nonatomic, copy) NSString * departmentName; +@property (nonatomic, copy) NSString * resourceName; + +@property (nonatomic, assign) CGFloat cellHeight; + +@end + + +@interface DepartmentModel : NSObject + +@property (nonatomic, copy) NSString * departmentId; +@property (nonatomic, copy) NSString * departmentName; +@property (nonatomic, copy) NSString * sicks; +@property (nonatomic, copy) NSString * officeCode; +@property (nonatomic, copy) NSString * depar_id; +@property (nonatomic, copy) NSString * image; +@property (nonatomic, copy) NSString * mark; +@property (nonatomic, copy) NSString * doctorNum; + + +@end + +@interface SicksModel : NSObject + +@property (nonatomic, copy) NSString * sicksName; +@property (nonatomic, copy) NSString * sicksId; +@property (nonatomic, copy) NSString * departmentId; +@property (nonatomic, copy) NSString * sick_id; +@property (nonatomic, copy) NSString * doctorNum; + +@end + +@interface FoundExpertModel : NSObject + +@property (nonatomic, strong) NSArray *hospitalList; +@property (nonatomic, strong) NSArray *DepartmentList; +@property (nonatomic, strong) NSArray *SicksList; +@property (nonatomic, strong) NSArray *DoctorList; + + +@property (nonatomic, assign) NSInteger hospitalCount; +@property (nonatomic, assign) NSInteger DepartmentCount; +@property (nonatomic, assign) NSInteger SicksCount; + +@property (nonatomic, assign) CGFloat cellHeight; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FoundExpertModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FoundExpertModel.m new file mode 100644 index 0000000..a48008e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/FoundExpertModel.m @@ -0,0 +1,58 @@ +// +// FoundExpertModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + +#import "FoundExpertModel.h" + + +@implementation DoctorListModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"doctorId" :@"id"}; + return dic; +} + +@end + +@implementation DepartmentModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"depar_id" :@"id"}; + return dic; +} + +@end + + +@implementation SicksModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"sick_id" :@"id"}; + return dic; +} + +@end + + +@implementation FoundExpertModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"hospitalList":[HospitalInfoModel class], + @"DepartmentList":[DepartmentModel class], + @"SicksList":[SicksModel class], + @"DoctorList":[DoctorListModel class] + + }; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HomeQusetionRecordsModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HomeQusetionRecordsModel.h new file mode 100644 index 0000000..0c907e7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HomeQusetionRecordsModel.h @@ -0,0 +1,39 @@ +// +// HomeQusetionRecordsModel.h +// QinghaiProject +// +// Created by Apple on 2024/7/6. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HomeQusetionRecordsModel : NSObject + +@property (nonatomic, strong) NSString * records_id; +@property (nonatomic, strong) NSString * memberId; +@property (nonatomic, strong) NSArray * toAccount; +@property (nonatomic, strong) NSString * toAccountHead; +@property (nonatomic, strong) NSString * toAccountName; +@property (nonatomic, strong) NSString * toAccountTitle; +@property (nonatomic, strong) NSString * departmentName; +@property (nonatomic, strong) NSString * resourceName; +@property (nonatomic, strong) NSString * hospitalLevel; +@property (nonatomic, strong) NSString * memberName; +@property (nonatomic, strong) NSString * memberSex; +@property (nonatomic, strong) NSString * memberAge; +@property (nonatomic, strong) NSString * imId; +@property (nonatomic, strong) NSString * contentStatus; +@property (nonatomic, strong) NSString * contentType; +@property (nonatomic, strong) NSString * medicalRecordsId; +@property (nonatomic, strong) NSString * createTime; +@property (nonatomic, strong) NSString * tfReply; +@property (nonatomic, strong) NSString * tfOwn; +@property (nonatomic, strong) NSString * createTimeLong; +@property (nonatomic, assign) NSInteger totalCount; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HomeQusetionRecordsModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HomeQusetionRecordsModel.m new file mode 100644 index 0000000..245e59a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HomeQusetionRecordsModel.m @@ -0,0 +1,19 @@ +// +// HomeQusetionRecordsModel.m +// QinghaiProject +// +// Created by Apple on 2024/7/6. +// + +#import "HomeQusetionRecordsModel.h" + +@implementation HomeQusetionRecordsModel + + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"records_id" :@"id"}; + return dic; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HospitalInfoModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HospitalInfoModel.h new file mode 100644 index 0000000..2e4a36c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HospitalInfoModel.h @@ -0,0 +1,56 @@ +// +// HospitalInfoModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HospitalInfoModel : NSObject + +@property (nonatomic, copy) NSString * hositalId; + +@property (nonatomic, copy) NSString * resourceId; + +@property (nonatomic, copy) NSString * resourceName; + +@property (nonatomic, assign) CGFloat longitude; + +@property (nonatomic, assign) CGFloat latitude; + +@property (nonatomic, copy) NSString * type; + +@property (nonatomic, copy) NSString * img; + +@property (nonatomic, copy) NSString * url; + +@property (nonatomic, copy) NSString * province; + +@property (nonatomic, copy) NSString * level; +@property (nonatomic, copy) NSString * keyDepartments; +@property (nonatomic, copy) NSString * address; + +@property (nonatomic, copy) NSString * tfFollow; + +@property (nonatomic, copy) NSString * synopsis; + +@property (nonatomic, copy) NSString * doctorNum; +@property (nonatomic, copy) NSString * departmentNum; +@property (nonatomic, copy) NSString * resourceDetail; + +//知识库 +@property (nonatomic, copy) NSString * knowContent; + +@property (nonatomic, copy) NSString * knowTitle; + +@property (nonatomic, copy) NSString * knowPic; + +@property (nonatomic, copy) NSString * knowLookNumber; + +@property (nonatomic, copy) NSString * createTime; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HospitalInfoModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HospitalInfoModel.m new file mode 100644 index 0000000..66d512b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/HospitalInfoModel.m @@ -0,0 +1,18 @@ +// +// HospitalInfoModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import "HospitalInfoModel.h" + +@implementation HospitalInfoModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"hositalId" :@"id"}; + return dic; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/LookFileDataModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/LookFileDataModel.h new file mode 100644 index 0000000..075cc7b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/LookFileDataModel.h @@ -0,0 +1,34 @@ +// +// LookFileDataModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/27. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface LookFileDataModel : NSObject + + +@property (nonatomic, copy) NSString * file_id; +@property (nonatomic, copy) NSString * recordsName; +@property (nonatomic, copy) NSString * state; +@property (nonatomic, copy) NSString * lookOffice; +@property (nonatomic, copy) NSString * tfLookValue; +@property (nonatomic, copy) NSString * lookMedicalName; +@property (nonatomic, copy) NSString * tfLook; +@property (nonatomic, copy) NSString * haveTime; +@property (nonatomic, copy) NSString * image; +@property (nonatomic, copy) NSString * memberId; +@property (nonatomic, copy) NSString * tfPermission; +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * medicalDescribe; +@property (nonatomic, copy) NSString * desire; +@property (nonatomic, copy) NSString * haveTimeValue; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/LookFileDataModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/LookFileDataModel.m new file mode 100644 index 0000000..01e0bc4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/LookFileDataModel.m @@ -0,0 +1,19 @@ +// +// LookFileDataModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/27. +// + +#import "LookFileDataModel.h" + +@implementation LookFileDataModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"file_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionBodyReportModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionBodyReportModel.h new file mode 100644 index 0000000..40d69ba --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionBodyReportModel.h @@ -0,0 +1,21 @@ +// +// QuestionBodyReportModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionBodyReportModel : NSObject + +@property (nonatomic, strong) NSString * insertdate; +@property (nonatomic, strong) NSString * tjrq; +@property (nonatomic, strong) NSString * name; +@property (nonatomic, strong) NSString * yymc; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionBodyReportModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionBodyReportModel.m new file mode 100644 index 0000000..1c6fc58 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionBodyReportModel.m @@ -0,0 +1,13 @@ +// +// QuestionBodyReportModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/19. +// + +#import "QuestionBodyReportModel.h" + +@implementation QuestionBodyReportModel + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionDiseaseInfoModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionDiseaseInfoModel.h new file mode 100644 index 0000000..695af6a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionDiseaseInfoModel.h @@ -0,0 +1,63 @@ +// +// QuestionDiseaseInfoModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/17. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface diseaseModel : NSObject + +@property (nonatomic, copy) NSString * tfPermission; + +@property (nonatomic, copy) NSString * tfper_id; + +@property (nonatomic, copy) NSString * medicalDescribe; + +@property (nonatomic, copy) NSString * recordsName; + +@property (nonatomic, copy) NSString * createTime; + +@property (nonatomic, copy) NSString * name; + +@property (nonatomic, copy) NSString * image; + +@property (nonatomic, copy) NSString * gender; + +@property (nonatomic, copy) NSString * age; + +@property (nonatomic, assign) BOOL isSelected; + +@end + + + +@interface QuestionDiseaseInfoModel : NSObject + +@property (nonatomic, copy) NSString * gender; + +@property (nonatomic, copy) NSString * height; + +@property (nonatomic, copy) NSString * weight; + +@property (nonatomic, copy) NSString * age; + +@property (nonatomic, copy) NSString * familyRelation; + +@property (nonatomic, copy) NSString * name; + +@property (nonatomic, assign) CGFloat rowHeight; + +@property (nonatomic, copy) NSString * memberId_id; + + +@property (nonatomic, strong) NSArray * list; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionDiseaseInfoModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionDiseaseInfoModel.m new file mode 100644 index 0000000..ba740de --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionDiseaseInfoModel.m @@ -0,0 +1,40 @@ +// +// QuestionDiseaseInfoModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/17. +// + +#import "QuestionDiseaseInfoModel.h" + +@implementation diseaseModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"tfper_id" :@"id"}; + return dic; +} + + +@end + + + +@implementation QuestionDiseaseInfoModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"list":[diseaseModel class] + }; +} + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"memberId_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionItemModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionItemModel.h new file mode 100644 index 0000000..7810ae8 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionItemModel.h @@ -0,0 +1,20 @@ +// +// QuestionItemModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionItemModel : NSObject + +@property (nonatomic, strong) NSString * Title; + +@property (nonatomic, assign) bool IsSelected; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionItemModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionItemModel.m new file mode 100644 index 0000000..da357a8 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionItemModel.m @@ -0,0 +1,12 @@ +// +// QuestionItemModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "QuestionItemModel.h" + +@implementation QuestionItemModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionOptionModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionOptionModel.h new file mode 100644 index 0000000..5b103a7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionOptionModel.h @@ -0,0 +1,47 @@ +// +// QuestionOptionModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/25. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface QuestionOptionCustomModel : NSObject + +//@{@"radioText":key,@"itemType":optionModel.itemType,@"checked":@(false),@"value":@"0"}; +@property (nonatomic, copy) NSString * radioText; +@property (nonatomic, copy) NSString * itemType; +@property (nonatomic, assign) bool checked; +@property (nonatomic, assign) NSInteger loctaionThin; + +@property (nonatomic, copy) NSString * value; +@end + +@interface QuestionOptionChildListModel : NSObject + +@property (nonatomic, copy) NSString * option_id; +@property (nonatomic, copy) NSString * itemProblem; +@property (nonatomic, copy) NSString * itemType; +@property (nonatomic, copy) NSString * itemOptions; +@property (nonatomic, copy) NSString * answerContent; +@property (nonatomic, assign) CGFloat cellHeight; +@property (nonatomic, assign) BOOL isAppment; +@property (nonatomic, strong) NSArray * answerList; + + +@end + + +@interface QuestionOptionModel : NSObject + + +@property (nonatomic, strong) NSArray * childList; +@property (nonatomic, copy) NSString * text; +@property (nonatomic, copy) NSString * value; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionOptionModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionOptionModel.m new file mode 100644 index 0000000..d5e45e2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionOptionModel.m @@ -0,0 +1,56 @@ +// +// QuestionOptionModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/25. +// + +#import "QuestionOptionModel.h" +@implementation QuestionOptionCustomModel + + + +@end + +@implementation QuestionOptionChildListModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"answerList":[QuestionOptionCustomModel class], + + }; +} + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"option_id" :@"id"}; + return dic; +} + + + + +@end + +@implementation QuestionOptionModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"option_id" :@"id"}; + return dic; +} + + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"childList":[QuestionOptionChildListModel class], + + }; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionPeopleModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionPeopleModel.h new file mode 100644 index 0000000..995c519 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionPeopleModel.h @@ -0,0 +1,33 @@ +// +// QuestionPeopleModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionPeopleModel : NSObject + +@property (nonatomic, copy) NSString * name; + +@property (nonatomic, copy) NSString * weight; + +@property (nonatomic, copy) NSString * age; + +@property (nonatomic, copy) NSString * birthday; + +@property (nonatomic, copy) NSString * familyRelation; + +@property (nonatomic, copy) NSString * gender; + +@property (nonatomic, copy) NSString * people_id; + +@property (nonatomic, assign) BOOL isSelected; + +@property (nonatomic, copy) NSString * height; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionPeopleModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionPeopleModel.m new file mode 100644 index 0000000..29da842 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionPeopleModel.m @@ -0,0 +1,19 @@ +// +// QuestionPeopleModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "QuestionPeopleModel.h" + +@implementation QuestionPeopleModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"people_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionRecordModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionRecordModel.h new file mode 100644 index 0000000..782ff4d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionRecordModel.h @@ -0,0 +1,43 @@ +// +// QuestionRecordModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionRecordModel : NSObject + +@property (nonatomic, copy) NSString * record_id; +@property (nonatomic, copy) NSString * memberId; +@property (nonatomic, copy) NSString * toAccount; +@property (nonatomic, copy) NSString * memberName; +@property (nonatomic, copy) NSString * memberSex; +@property (nonatomic, copy) NSString * memberAge; +@property (nonatomic, copy) NSString * imId; +@property (nonatomic, copy) NSString * image; +@property (nonatomic, copy) NSString * rejectReason; +@property (nonatomic, copy) NSString * doctorStartTime; +@property (nonatomic, copy) NSString * doctorEndTime; +@property (nonatomic, copy) NSString * contentStatus; +@property (nonatomic, copy) NSString * contentType; +@property (nonatomic, copy) NSString * medicalRecordsId; +@property (nonatomic, copy) NSString * schedulingDateId; +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * sessionDate; +@property (nonatomic, copy) NSString * week; +@property (nonatomic, copy) NSString * amPm; +@property (nonatomic, copy) NSString * reasonType; +@property (nonatomic, copy) NSString * toAccountHead; +@property (nonatomic, copy) NSString * toAccountTitle; +@property (nonatomic, copy) NSString * departmentName; +@property (nonatomic, copy) NSString * hospitalLevel; +@property (nonatomic, copy) NSString * toAccountName; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionRecordModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionRecordModel.m new file mode 100644 index 0000000..afa6586 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/QuestionRecordModel.m @@ -0,0 +1,20 @@ +// +// QuestionRecordModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "QuestionRecordModel.h" + +@implementation QuestionRecordModel + + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"record_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/RecordIMListDateModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/RecordIMListDateModel.h new file mode 100644 index 0000000..d2b4003 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/RecordIMListDateModel.h @@ -0,0 +1,52 @@ +// +// RecordIMListDateModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/23. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface RecordIMListDateModel : NSObject + + +@property (nonatomic, copy) NSString * Record_id; +@property (nonatomic, copy) NSString * rejectReason; +@property (nonatomic, copy) NSString * fromAccount; +@property (nonatomic, copy) NSString * memberName; +@property (nonatomic, copy) NSString * hospitalLevel; +@property (nonatomic, copy) NSString * contentStatus; +@property (nonatomic, copy) NSString * schedulingDateId; +@property (nonatomic, copy) NSString * amPm; +@property (nonatomic, copy) NSString * toAccountName; +@property (nonatomic, copy) NSString * memberSex; +@property (nonatomic, copy) NSString * contentType; +@property (nonatomic, copy) NSString * reasonType; + +@property (nonatomic, copy) NSString * week; +@property (nonatomic, copy) NSString * toAccount; +@property (nonatomic, copy) NSString * sessionType; +@property (nonatomic, copy) NSString * medicalRecordsId; +@property (nonatomic, copy) NSString * toAccountHead; +@property (nonatomic, copy) NSString * toAccountTitle; +@property (nonatomic, copy) NSString * createTimeLong; +@property (nonatomic, copy) NSString * tfOwn; +@property (nonatomic, copy) NSString * memberId; + +@property (nonatomic, copy) NSString * doctorStartTime; +@property (nonatomic, copy) NSString * departmentName; +@property (nonatomic, copy) NSString * tfReply; +@property (nonatomic, copy) NSString * doctorEndTimeLong; +@property (nonatomic, copy) NSString * sessionDate; +@property (nonatomic, copy) NSString * imId; +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * memberAge; +@property (nonatomic, copy) NSString * resourceName; + +@property (nonatomic, assign) NSInteger unredCount; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/RecordIMListDateModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/RecordIMListDateModel.m new file mode 100644 index 0000000..ec88848 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/RecordIMListDateModel.m @@ -0,0 +1,19 @@ +// +// RecordIMListDateModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/23. +// + +#import "RecordIMListDateModel.h" + +@implementation RecordIMListDateModel + + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"Record_id" :@"id"}; + return dic; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SOSGroupIMModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SOSGroupIMModel.h new file mode 100644 index 0000000..8a815d9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SOSGroupIMModel.h @@ -0,0 +1,25 @@ +// +// SOSGroupIMModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/4. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SOSGroupIMModel : NSObject + +@property (nonatomic, copy) NSString * groupId; +@property (nonatomic, strong) NSArray * member; +@property (nonatomic, copy) NSString * resultcCreateGroup; +@property (nonatomic, copy) NSString * tfNew; +@property (nonatomic, copy) NSString * userId; +@property (nonatomic, copy) NSString * resultcAccountImport; +@property (nonatomic, copy) NSString * sosEnd_id; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SOSGroupIMModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SOSGroupIMModel.m new file mode 100644 index 0000000..b2135f1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SOSGroupIMModel.m @@ -0,0 +1,19 @@ +// +// SOSGroupIMModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/4. +// + +#import "SOSGroupIMModel.h" + +@implementation SOSGroupIMModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"sosEnd_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchRoomModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchRoomModel.h new file mode 100644 index 0000000..991f83b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchRoomModel.h @@ -0,0 +1,26 @@ +// +// SearchRoomModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/12. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SearchRoomModel : NSObject + +@property (nonatomic, copy) NSString * room_Id; +@property (nonatomic, copy) NSString * departmentName; +@property (nonatomic, copy) NSString * doctorNum; +@property (nonatomic, copy) NSString * sickNum; +@property (nonatomic, copy) NSString * mark; +@property (nonatomic, assign) BOOL isSelected; +@property (nonatomic, copy) NSString * secondDepartmentNum; +@property (nonatomic, copy) NSString * type; //1 科室 2疾病 +@property (nonatomic, copy) NSString * CustomdepartmentName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchRoomModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchRoomModel.m new file mode 100644 index 0000000..6dc650f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchRoomModel.m @@ -0,0 +1,19 @@ +// +// SearchRoomModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/12. +// + +#import "SearchRoomModel.h" + +@implementation SearchRoomModel + + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"room_Id" :@"id"}; + return dic; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchSicksModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchSicksModel.h new file mode 100644 index 0000000..a4cb75b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchSicksModel.h @@ -0,0 +1,27 @@ +// +// SearchSicksModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/12. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SearchSicksModel : NSObject + +@property (nonatomic, copy) NSString * departmentId; +@property (nonatomic, copy) NSString * sicksName; +@property (nonatomic, copy) NSString * doctorNum; +@property (nonatomic, copy) NSString * descript; +@property (nonatomic, copy) NSString * sicks_id; + +@property (nonatomic, copy) NSString * CustomdepartmentName; + + +@property (nonatomic, assign) BOOL isSelected; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchSicksModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchSicksModel.m new file mode 100644 index 0000000..44dd93c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SearchSicksModel.m @@ -0,0 +1,19 @@ +// +// SearchSicksModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/12. +// + +#import "SearchSicksModel.h" + +@implementation SearchSicksModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"sicks_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SmallHelpIMDataModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SmallHelpIMDataModel.h new file mode 100644 index 0000000..2ee21a5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SmallHelpIMDataModel.h @@ -0,0 +1,24 @@ +// +// SmallHelpIMDataModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/24. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SmallHelpIMDataModel : NSObject + +@property (nonatomic, strong) NSString * small_id; +@property (nonatomic, strong) NSString * groupId; +@property (nonatomic, strong) NSArray * member; +@property (nonatomic, strong) NSString * resultcCreateGroup; +@property (nonatomic, strong) NSString * tfNew; +@property (nonatomic, strong) NSString * userId; +@property (nonatomic, strong) NSString * resultcAccountImport; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SmallHelpIMDataModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SmallHelpIMDataModel.m new file mode 100644 index 0000000..bcdd622 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/Model/SmallHelpIMDataModel.m @@ -0,0 +1,18 @@ +// +// SmallHelpIMDataModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/24. +// + +#import "SmallHelpIMDataModel.h" + +@implementation SmallHelpIMDataModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"small_id" :@"id"}; + return dic; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/ADJumpViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/ADJumpViewController.h new file mode 100644 index 0000000..cbd93f2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/ADJumpViewController.h @@ -0,0 +1,18 @@ +// +// ADJumpViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/6. +// + +#import "BaseWebViewVC.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ADJumpViewController : BaseWebViewVC + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/ADJumpViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/ADJumpViewController.m new file mode 100644 index 0000000..a196b73 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/ADJumpViewController.m @@ -0,0 +1,35 @@ +// +// ADJumpViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/6. +// + +#import "ADJumpViewController.h" + +@interface ADJumpViewController () + + + +@end + +@implementation ADJumpViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = KWhiteColor; + self.isHidenNaviBar = false; + // Do any additional setup after loading the view. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HQSearchView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HQSearchView.h new file mode 100644 index 0000000..2108b6c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HQSearchView.h @@ -0,0 +1,26 @@ +// +// HQSearchView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/13. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^searchOnclick)(NSString * fieldtext); +typedef void(^searchClearButtonOnclick)(); + +@interface HQSearchView : UIView + +@property (nonatomic, strong) NSString * searchPlacehold; + +@property (nonatomic, strong) UITextField * searchField; + +@property (nonatomic, copy) searchOnclick searchBlock; +@property (nonatomic, copy) searchClearButtonOnclick cancelBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HQSearchView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HQSearchView.m new file mode 100644 index 0000000..68f728c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HQSearchView.m @@ -0,0 +1,106 @@ +// +// HQSearchView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/13. +// + +#import "HQSearchView.h" + +@interface HQSearchView () + + +@end + +@implementation HQSearchView + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.searchField = [[UITextField alloc] initWithFrame:CGRectMake(kRealValue(15), 0, kScreenWidth - kRealValue(65), 35)]; + self.searchField.returnKeyType = UIReturnKeySearch; + self.searchField.delegate = self; + self.searchField.layer.cornerRadius = 18.0f; + self.searchField.font = SYSTEMFONT(14); + self.searchField.layer.masksToBounds = true; + self.searchField.backgroundColor = UIColorHex(#F1F1F1); + //搜索图标 + + UIView * leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 37, 35)]; + + UIImageView *view = [[UIImageView alloc] init]; + //设置图片控制器的的图片 + view.image = [UIImage imageNamed:@"searchLeftIcon"]; + //设置图片的frame + view.width = 15; + view.height = 15; + view.center= leftView.center; + //左边搜索图标的模式 + view.contentMode = UIViewContentModeCenter; + [leftView addSubview:view]; + self.searchField.leftView = leftView; + //左边搜索图标总是显示 + self.searchField.leftViewMode = UITextFieldViewModeAlways; + //右边删除所有图标 + self.searchField.clearButtonMode = UITextFieldViewModeAlways; + + [self addSubview:self.searchField]; + + UIButton * seachBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.searchField.right, 0, 50, 35)]; + [seachBtn setTitle:@"搜索" forState:UIControlStateNormal]; + seachBtn.titleLabel.font = SYSTEMFONT(13); + [seachBtn setTitleColor:CFontColor2 forState:UIControlStateNormal]; + [seachBtn addTarget:self action:@selector(searchAction) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:seachBtn]; + +} + +- (void)setSearchPlacehold:(NSString *)searchPlacehold { + + _searchPlacehold = searchPlacehold; + + NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:_searchPlacehold attributes: + @{NSForegroundColorAttributeName:[UIColor grayColor], + NSFontAttributeName:SYSTEMFONT(13)} + ]; + self.searchField.attributedPlaceholder = attrString; + +} + +- (BOOL)textFieldShouldReturn:(UITextField*)theTextField { + + [theTextField resignFirstResponder]; + + if (self.searchBlock) { + + self.searchBlock(theTextField.text); + } + return YES; +} + +- (BOOL)textFieldShouldClear:(UITextField *)textField { + [textField resignFirstResponder]; + if (self.cancelBlock) { + self.cancelBlock(); + } + return YES; +} + +- (void)searchAction { + + if (self.searchBlock) { + + self.searchBlock(self.searchField.text); + } +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportModel.h b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportModel.h new file mode 100644 index 0000000..bdb729c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportModel.h @@ -0,0 +1,99 @@ +// +// HealthPhyReportModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/28. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +//新增影像报告 + + +@interface thirdResultResModel : NSObject + +@property (nonatomic, copy) NSString * third_tId; +@property (nonatomic, copy) NSString * type; + +@property (nonatomic, copy) NSString * userResultId; +@property (nonatomic, copy) NSString * peItemName; +@property (nonatomic, copy) NSString * uniItemId; +@property (nonatomic, copy) NSString * printContext; +@property (nonatomic, copy) NSString * peResult; +@property (nonatomic, copy) NSString * unit; +@property (nonatomic, copy) NSString * colour; +@property (nonatomic, copy) NSString * textFlag; + +@end + + +@interface imageItemListModel : NSObject + +@property (nonatomic, copy) NSString * imageCheckName; +@property (nonatomic, copy) NSString * imageShowUrl; +@property (nonatomic, copy) NSString * imageClass; +@property (nonatomic, copy) NSString * studyInsId; +@property (nonatomic, copy) NSString * reportContent; +@property (nonatomic, copy) NSString * reportUrl; +@property (nonatomic, copy) NSString * reportDate; +@property (nonatomic, copy) NSString * imageClassName; +@property (nonatomic, assign) CGFloat textHeight; +@property (nonatomic, assign) CGFloat cellHeight; + +@end + +@interface senResultResModel : NSObject +@property (nonatomic, copy) NSString * uniItemClassId; +@property (nonatomic, copy) NSString * uniItemClassName; +@property (nonatomic, strong) NSArray * thirdResultRes; + +@end + +@interface resultItemResListModel : NSObject + +@property (nonatomic, copy) NSString * analysisId; +@property (nonatomic, copy) NSString * analysisName; +@property (nonatomic, copy) NSString * empBirthday; +@property (nonatomic, copy) NSString * medicalYear; +@property (nonatomic, assign) NSInteger rowNumber; +@property (nonatomic, strong) NSArray * senResultRes; +@property (nonatomic, strong) NSArray * allResultArray; + + +@end + +@interface HealthPhyReportModel : NSObject + +@property (nonatomic, copy) NSString * report_id; +@property (nonatomic, copy) NSString * userId; +@property (nonatomic, copy) NSString * userName; +@property (nonatomic, copy) NSString * sex; +@property (nonatomic, copy) NSString * sex_dictText; +@property (nonatomic, copy) NSString * age; +@property (nonatomic, copy) NSString * card; +@property (nonatomic, copy) NSString * mobilePhone; +@property (nonatomic, copy) NSString * peQueueDate; +@property (nonatomic, copy) NSString * empBirthday; +@property (nonatomic, copy) NSString * medicalYear; +@property (nonatomic, copy) NSString * suggest; +@property (nonatomic, copy) NSString * conclusion; +@property (nonatomic, copy) NSString * email; +@property (nonatomic, copy) NSString * empNativeplace; +@property (nonatomic, copy) NSString * hospitalName; + + +@property (nonatomic, assign) BOOL zhangkaiSug; +@property (nonatomic, assign) BOOL zhangkaiCon; + + + +@property (nonatomic, strong) NSArray * resultItemResList; + +@property (nonatomic, strong) NSArray * imageItemList; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportModel.m b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportModel.m new file mode 100644 index 0000000..294a636 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportModel.m @@ -0,0 +1,80 @@ +// +// HealthPhyReportModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/28. +// + +#import "HealthPhyReportModel.h" + +@implementation thirdResultResModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"third_tId" :@"id"}; + return dic; +} + + +@end + +@implementation imageItemListModel + + + +@end + +@implementation senResultResModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + + @"thirdResultRes":[thirdResultResModel class] + }; +} + + + +@end + + +@implementation resultItemResListModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"senResultRes":[senResultResModel class], + @"allResultArray":[thirdResultResModel class] + }; + +} + + + +@end + +@implementation HealthPhyReportModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"report_id" :@"id"}; + return dic; +} + + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + return @{ + @"resultItemResList":[resultItemResListModel class], + @"imageItemList":[imageItemListModel class] + }; +} + + + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportTableView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportTableView.h new file mode 100644 index 0000000..66e3d3a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportTableView.h @@ -0,0 +1,21 @@ +// +// HealthPhyReportTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/28. +// + +#import +#import "HealthPhyReportModel.h" +#import "HealthSugReportTableViewCell.h" +#import "imageReportTableViewCell.h" +NS_ASSUME_NONNULL_BEGIN + +@interface HealthPhyReportTableView : UITableView + +@property (nonatomic, strong) HealthPhyReportModel * model; +@property (nonatomic, copy) AudioPlayOnClickBlock audioBlock; +@property (nonatomic, copy) lookUserReport lookBlock; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportTableView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportTableView.m new file mode 100644 index 0000000..ce37494 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthPhyReportTableView.m @@ -0,0 +1,371 @@ +// +// HealthPhyReportTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/28. +// + +#import "HealthPhyReportTableView.h" +#import "HealthPhyReportModel.h" +#import "SickNameTopTableViewCell.h" +#import "SickNameSubTableViewCell.h" +#import "imageReportTableViewCell.h" +@interface HealthPhyReportTableView () + + +@end + +@implementation HealthPhyReportTableView + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; +} + + +- (void)setModel:(HealthPhyReportModel *)model { + + _model = model; + + [self reloadData]; + + +} + +- (void)setAudioBlock:(AudioPlayOnClickBlock)audioBlock { + _audioBlock = audioBlock; +} + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + if (section == 0) { + return 6; + + } + if (section == 1) { + if ( ValidStr(self.model.conclusion)) { + return 0; + } + + } + if (section == 2) { + if ( ValidStr(self.model.suggest)) { + return 0; + } + + } + if (section == 3) { + if (self.model.imageItemList.count >= 1) { + + return self.model.imageItemList.count; + } + else + { + return 0; + } + } + if (section > 3 + self.model.imageItemList.count ) { + + resultItemResListModel * itemModel = self.model.resultItemResList[section - 4]; + DLog(@"%ld----------%ld",section,itemModel.rowNumber); + return itemModel.rowNumber; + + } + return 1; + +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + //顶部个人信息-结论-建议 + 影像报告 + 体检结果 + + + return 4 + self.model.resultItemResList.count; + + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + if (indexPath.section == 0) { + + UITableViewCell * infoCell = [tableView dequeueReusableCellWithIdentifier:@"INFOCELL"]; + + if (!infoCell) { + infoCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"INFOCELL"]; + } + infoCell.selectionStyle = UITableViewCellSelectionStyleNone; + NSArray * array; + if (self.model) { + NSString * name = [NSString stringWithFormat:@"姓名:%@",self.model.userName]; + NSString * sex = [NSString stringWithFormat:@"性别:%@",self.model.sex_dictText]; + NSString * card = [NSString stringWithFormat:@"身份证号:%@",self.model.card]; + NSString * bir = [NSString stringWithFormat:@"出生日期:%@",self.model.empBirthday]; + NSString * time = [NSString stringWithFormat:@"体检日期:%@",self.model.peQueueDate]; + NSString * hospital = [NSString stringWithFormat:@"体检医院:%@",self.model.hospitalName]; + array = @[name,sex,card,bir,time,hospital]; + infoCell.textLabel.text = array[indexPath.row]; + infoCell.textLabel.font = SYSTEMFONT(13); + } + + return infoCell; + + } + + + if (indexPath.section == 1 || indexPath.section == 2 ) + { + HealthSugReportTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"SUGCELL"]; + + if (!cell) { + + cell = [[HealthSugReportTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SUGCELL"]; + } + cell.backgroundColor = KWhiteColor; + cell.zhankaiBlock = ^{ + [self reloadData]; + }; + cell.audioBlock = self.audioBlock; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + if (indexPath.section == 1) { + cell.cellTitleString = @"体检结论"; + cell.conModel = self.model; + } + if (indexPath.section == 2) { + cell.cellTitleString = @"体检建议"; + cell.sugModel = self.model; + } + return cell; + } + if (indexPath.section == 3) { + + imageReportTableViewCell * imgcell = [tableView dequeueReusableCellWithIdentifier:@"IMAGECELL"]; + + if (!imgcell) { + + imgcell = [[imageReportTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"IMAGECELL"]; + } + imgcell.model = self.model.imageItemList[indexPath.row]; + imgcell.lookBlock = ^(NSString * _Nonnull lookUrl) { + self.lookBlock(lookUrl); + }; + imgcell.selectionStyle = UITableViewCellSelectionStyleNone; + return imgcell; + } + else { + resultItemResListModel * itemModel = self.model.resultItemResList[indexPath.section - 4]; + + thirdResultResModel * thirdModel = itemModel.allResultArray[indexPath.row]; + + if ([thirdModel.type integerValue] == 2) { // 2是标题 // 1是内容 + + SickNameTopTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"TABTITLECELL"]; + + if (!cell) { + + cell = [[SickNameTopTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TABTITLECELL"]; + } + cell.backgroundColor = KWhiteColor; + cell.model = thirdModel; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + + }else + { + SickNameSubTableViewCell * subcell = [tableView dequeueReusableCellWithIdentifier:@"CELLID"]; + + if (!subcell) { + + subcell = [[SickNameSubTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELLID"]; + } + subcell.model = thirdModel; + subcell.selectionStyle = UITableViewCellSelectionStyleNone; + return subcell; + } + } +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + + + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + if (section == 1) + { + return kRealValue(10); + } + if (section>= 3) + { + return kRealValue(30); + } + return CGFLOAT_MIN; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} +// +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + if (indexPath.section == 0) { + + return kRealValue(30); + + } + + + if (indexPath.section == 1) + { + if ( ValidStr(self.model.conclusion)) { + return CGFLOAT_MIN; + } + if ( !ValidStr(self.model.conclusion) && self.model.zhangkaiCon == false) { + + return 150; + } + if (self.model.conclusion && self.model.zhangkaiCon == true ) { + + NSAttributedString *attrStr = [[NSAttributedString alloc] initWithData:[self.model.conclusion dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; + + // 查询文本排版结果 + // 计算文本尺寸YYTextLayout + CGSize maxSize = CGSizeMake(kScreenWidth - kRealValue(30) , MAXFLOAT); + YYTextLayout * layout = [YYTextLayout layoutWithContainerSize:maxSize text:attrStr]; + CGFloat introHeight = layout.textBoundingSize.height; + // 记录真正的正确高度 + // 显示文本排版结果 + return introHeight + 100; + } + + } + if (indexPath.section == 2) + { + if ( ValidStr(self.model.suggest)) { + return CGFLOAT_MIN; + } + if ( !ValidStr(self.model.suggest) && self.model.zhangkaiSug == false) { + + return 150; + } + if (self.model.suggest && self.model.zhangkaiSug == true) { + + NSAttributedString *attrStr = [[NSAttributedString alloc] initWithData:[self.model.suggest dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; + + // 查询文本排版结果 + // 计算文本尺寸YYTextLayout + CGSize maxSize = CGSizeMake(kScreenWidth - kRealValue(30) , MAXFLOAT); + YYTextLayout * layout = [YYTextLayout layoutWithContainerSize:maxSize text:attrStr]; + CGFloat introHeight = layout.textBoundingSize.height; + // 记录真正的正确高度 + // 显示文本排版结果 + return introHeight + 100; + } + + } + if (indexPath.section == 3) + { + if ( self.model.imageItemList.count >= 1 ) { + imageItemListModel * imageModel = self.model.imageItemList[indexPath.row]; + //kRealValue(15) + 16 标题高度 + 文本框高度 + return kRealValue(30) + 16 + imageModel.cellHeight + kRealValue(10); + }else + { + return CGFLOAT_MIN; + } + } + if (indexPath.section > 3) { +// + resultItemResListModel * itemModel = self.model.resultItemResList[indexPath.section - 4]; + + thirdResultResModel * thirdModel = itemModel.allResultArray[indexPath.row]; + + if ([thirdModel.type integerValue] == 2) { + kRealValue(80); + + } + if ([thirdModel.type integerValue] == 1) { + + + return kRealValue(40); + } + + } + + return kRealValue(80);; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + if (section == 1) { + + UIView * sectionHeardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(10))]; + sectionHeardView.backgroundColor = CViewBgColor; + return sectionHeardView; + } + + if (section == 3) { + + UIView * sectionHeardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(30))]; + sectionHeardView.backgroundColor = KWhiteColor; + UILabel * secLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(0), 100, kRealValue(30))]; + secLabel.textAlignment = NSTextAlignmentLeft; + secLabel.font = BOLDSYSTEMFONT(15); + secLabel.textColor = CFontColor1; + secLabel.text = @"影像报告"; + [sectionHeardView addSubview:secLabel]; + return sectionHeardView; + } + if (section >3) { + resultItemResListModel * itemModel = self.model.resultItemResList[section - 4]; + + UIView * sectionHeardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(30))]; + sectionHeardView.backgroundColor = KWhiteColor; + UILabel * secLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(0), 100, kRealValue(30))]; + secLabel.textAlignment = NSTextAlignmentLeft; + secLabel.font = BOLDSYSTEMFONT(15); + secLabel.textColor = CFontColor1; + secLabel.text = itemModel.analysisName; + [sectionHeardView addSubview:secLabel]; + return sectionHeardView; + } + + + + return [[UIView alloc] init]; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthSugReportTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthSugReportTableViewCell.h new file mode 100644 index 0000000..4c7b6c6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthSugReportTableViewCell.h @@ -0,0 +1,34 @@ +// +// HealthSugReportTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/28. +// + +#import +#import "HealthPhyReportModel.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^zhankaiSHowBlock)(); +typedef void(^AudioPlayOnClickBlock)(NSInteger audioTag); + + +@interface HealthSugReportTableViewCell : UITableViewCell + +@property (nonatomic, copy) NSString * htmlString; + +@property (nonatomic, copy) NSString * cellTitleString; + + + +@property (nonatomic, strong) HealthPhyReportModel * sugModel; +@property (nonatomic, strong) HealthPhyReportModel * conModel; + + +@property (nonatomic, copy) zhankaiSHowBlock zhankaiBlock; +@property (nonatomic, copy) AudioPlayOnClickBlock audioBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthSugReportTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthSugReportTableViewCell.m new file mode 100644 index 0000000..dc27775 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/HealthSugReportTableViewCell.m @@ -0,0 +1,223 @@ +// +// HealthSugReportTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/28. +// + +#import "HealthSugReportTableViewCell.h" + + +@interface HealthSugReportTableViewCell () + +@property (nonatomic, strong) YYLabel * jielunLabel; +@property (nonatomic, strong) UIView * leftView; +@property (nonatomic, strong) UILabel * titleLabel; +@property (nonatomic, strong) UIButton * showButton; +@property (nonatomic, strong) UIButton * aduioPlayBtn; + +@end + +@implementation HealthSugReportTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.leftView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(18), 2, kRealValue(13))]; + self.leftView.backgroundColor = KRedColor; + [self.contentView addSubview:self.leftView]; + + + UIButton * aduioPlayBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth - kRealValue(75),kRealValue(10), kRealValue(60), kRealValue(25))];; + [aduioPlayBtn setTitle:@" 播放" forState:UIControlStateNormal]; + aduioPlayBtn.titleLabel.font = SYSTEMFONT(12); + [aduioPlayBtn setImage:[UIImage imageNamed:@"audioPlayIcon"] forState:UIControlStateNormal]; + [aduioPlayBtn setImage:[UIImage imageNamed:@"audioPlayIcon"] forState:UIControlStateSelected]; + [aduioPlayBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + aduioPlayBtn.semanticContentAttribute = UISemanticContentAttributeForceLeftToRight; + aduioPlayBtn.selected = false; + self.aduioPlayBtn = aduioPlayBtn; + [aduioPlayBtn addTarget:self action:@selector(palyAudioAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.contentView addSubview:aduioPlayBtn]; + + + self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.leftView.right + kRealValue(10), kRealValue(16), 200, 16)]; + self.titleLabel.font = BOLDSYSTEMFONT(15); + self.titleLabel.textAlignment = NSTextAlignmentLeft; + self.titleLabel.textColor = UIColorHex(#333333); + [self.contentView addSubview:self.titleLabel]; + + + self.jielunLabel = [[YYLabel alloc] initWithFrame:CGRectMake(kRealValue(15), self.titleLabel.bottom + kRealValue(8), kScreenWidth - kRealValue(30), 70)]; + self.jielunLabel.textAlignment = NSTextAlignmentLeft; + self.jielunLabel.font = MEDIUMFONT(13); + self.jielunLabel.textColor = UIColorHex(#333333); + self.jielunLabel.numberOfLines = 4; + // 显示文本排版结果 + [self.contentView addSubview:self.jielunLabel]; + + self.showButton = [[UIButton alloc] initWithFrame:CGRectMake(0, self.jielunLabel.bottom + kRealValue(1), kScreenWidth - kRealValue(30), kRealValue(25))];; + [self.showButton setTitle:@"展开" forState:UIControlStateNormal]; + self.showButton.titleLabel.font = SYSTEMFONT(12); + [self.showButton setImage:[UIImage imageNamed:@"downArrow_icon"] forState:UIControlStateNormal]; + [self.showButton setImage:[UIImage imageNamed:@"upAccow_gary"] forState:UIControlStateSelected]; + [self.showButton setTitleColor:CFontColor2 forState:UIControlStateNormal]; + self.showButton.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft; + self.showButton.selected = false; + [self.showButton addTarget:self action:@selector(showMoreOnclick:) forControlEvents:UIControlEventTouchUpInside]; + [self.contentView addSubview:self.showButton]; + + +} + +- (void)setCellTitleString:(NSString *)cellTitleString { + + _cellTitleString = cellTitleString; + + self.titleLabel.text = cellTitleString; + + if ([_cellTitleString isEqualToString:@"体检结论"]) { + + self.leftView.backgroundColor = UIColorHex(#DA180F); + }else + { + self.leftView.backgroundColor = UIColorHex(#F6C60A); + + } +} + +- (void)setSugModel:(HealthPhyReportModel *)sugModel { + + _sugModel = sugModel; + + self.showButton.tag = 100; + self.aduioPlayBtn.tag = 400; + self.showButton.selected = _sugModel.zhangkaiSug; + NSAttributedString *attrStr = [[NSAttributedString alloc] initWithData:[_sugModel.suggest dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; + + self.jielunLabel.attributedText =attrStr; + + // 查询文本排版结果 + // 计算文本尺寸YYTextLayout + CGSize maxSize = CGSizeMake(kScreenWidth - kRealValue(30) , MAXFLOAT); + + YYTextLayout * layout = [YYTextLayout layoutWithContainerSize:maxSize text:self.jielunLabel.attributedText]; + self.jielunLabel.textLayout = layout; + CGFloat introHeight = layout.textBoundingSize.height; + self.jielunLabel.width = maxSize.width; + // 记录真正的正确高度 + self.jielunLabel.height = introHeight; + // 显示文本排版结果 + + if (introHeight > 70 && _sugModel.zhangkaiSug == false) { + introHeight = 70; + self.jielunLabel.numberOfLines = 4; + }else + { + self.jielunLabel.numberOfLines = 0; + + } + self.jielunLabel.height = introHeight; + self.showButton.top = self.jielunLabel.bottom + kRealValue(2); + + + + + + +} +-(void)setConModel:(HealthPhyReportModel *)conModel { + + _conModel = conModel; + + self.showButton.tag = 200; + self.aduioPlayBtn.tag = 500; + self.showButton.selected = _conModel.zhangkaiCon; + NSAttributedString *attrStr = [[NSAttributedString alloc] initWithData:[_conModel.conclusion dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; + + self.jielunLabel.attributedText =attrStr; + + // 查询文本排版结果 + // 计算文本尺寸YYTextLayout + CGSize maxSize = CGSizeMake(kScreenWidth - kRealValue(30) , MAXFLOAT); + + YYTextLayout * layout = [YYTextLayout layoutWithContainerSize:maxSize text:self.jielunLabel.attributedText]; + self.jielunLabel.textLayout = layout; + CGFloat introHeight = layout.textBoundingSize.height; + self.jielunLabel.width = maxSize.width; + // 记录真正的正确高度 + self.jielunLabel.height = introHeight; + // 显示文本排版结果 + + if (introHeight > 70 && _conModel.zhangkaiCon == false) { + introHeight = 75; + self.jielunLabel.numberOfLines = 4; + }else + { + self.jielunLabel.numberOfLines = 0; + + + } + self.jielunLabel.height = introHeight; + self.showButton.top = self.jielunLabel.bottom + kRealValue(2); + + + +} + +- (void)showMoreOnclick:(UIButton *)showBtn { + + showBtn.selected = !showBtn.selected; + + if (showBtn.tag == 100) { + _sugModel.zhangkaiSug = showBtn.selected; + if (_sugModel.zhangkaiSug == false) { + [showBtn setTitle:@"展开" forState:UIControlStateNormal]; + }else { + [showBtn setTitle:@"收起" forState:UIControlStateNormal]; + } + } + if (showBtn.tag == 200) { + _conModel.zhangkaiCon = showBtn.selected; + if (_sugModel.zhangkaiCon == false) { + [showBtn setTitle:@"展开" forState:UIControlStateNormal]; + }else { + [showBtn setTitle:@"收起" forState:UIControlStateNormal]; + } + } + if (self.zhankaiBlock) { + self.zhankaiBlock(); + } +} + +- (void)palyAudioAction:(UIButton *)audioBtn { + + //400) { //体检结论 + + if (self.audioBlock) { + self.audioBlock(audioBtn.tag); + } + // 500) { //体检建议 +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/LookReportImageViewController.h b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/LookReportImageViewController.h new file mode 100644 index 0000000..fc77983 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/LookReportImageViewController.h @@ -0,0 +1,23 @@ +// +// LookReportImageViewController.h +// EscortProject +// +// Created by Apple on 2024/2/26. +// + +#import "BaseWebViewVC.h" +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface LookReportImageViewController : HQBaseViewController + +@property (nonatomic, strong) NSString * webTitle; + +@property (nonatomic, strong) NSString * webUrl; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/LookReportImageViewController.m b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/LookReportImageViewController.m new file mode 100644 index 0000000..ed3f4ca --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/LookReportImageViewController.m @@ -0,0 +1,173 @@ +// +// LookReportImageViewController.m +// EscortProject +// +// Created by Apple on 2024/2/26. +// + +#import "LookReportImageViewController.h" + +@interface LookReportImageViewController () + +@property (nonatomic, strong)NSURL *originalUrl; +@property (nonatomic, copy)NSString *videoUrl; +@property (nonatomic, copy)NSString *messageType; +@property (nonatomic, strong) WKWebView * wkWebView; + +@end + +@implementation LookReportImageViewController + + +#pragma mark - LifeCycle +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = [UIColor whiteColor]; + self.isHidenNaviBar = false; + [self addNavigationItemWithImageNames:@[@"whiteBack_icon"] isLeft:YES target:self action:@selector(backVC) tags:@[@""]]; + + if (self.webTitle) { + self.navigationItem.title = self.webTitle; + } + [self.view addSubview:self.wkWebView]; + [self webViewRequest]; +} + +- (void)backVC { + + [self.navigationController popViewControllerAnimated:YES]; +} + + + +- (void)viewWillDisappear:(BOOL)animated{ + [super viewWillDisappear:animated]; + _wkWebView.navigationDelegate = nil; + _wkWebView.UIDelegate = nil; + //清除cookies + NSHTTPCookie *cookie; + NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + for (cookie in [storage cookies]) { + [storage deleteCookie:cookie]; + } + [[NSURLCache sharedURLCache] removeAllCachedResponses]; + [self clearWebViewCache]; +} + + +#pragma mark 懒加载 +-(WKWebView *)wkWebView{ + if (!_wkWebView) { + + NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width,initial-scale=1,minimum-scale=0.25,maximum-scale=2,user-scalable=yes'); document.getElementsByTagName('head')[0].appendChild(meta); var imgs = document.getElementsByTagName('img');for (var i in imgs){imgs[i].style.maxWidth='100%';imgs[i].style.height='auto';}"; + + + WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; + WKUserContentController *wkUController = [[WKUserContentController alloc] init]; + [wkUController addUserScript:wkUScript]; + WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; + wkWebConfig.userContentController = wkUController; + + _wkWebView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) configuration:wkWebConfig]; + _wkWebView.allowsBackForwardNavigationGestures = true; + } + return _wkWebView; +} + + +- (void)webViewRequest{ + NSString *urlString = self.webUrl; + [self hiddenAllMBProgressHUD]; + if (urlString.length > 0) { + [self showMBProgressHUDOnlyWithString:@"加载中"]; + NSURL *url = [NSURL URLWithString:urlString]; + NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; + if (self.wkWebView) { + [self.wkWebView loadRequest:urlRequest]; + } + } +} + + + + +#pragma mark - WKNavigationDelegate +- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{ + +} + +#pragma mark - WKScriptMessageHandler +- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures { + [self hiddenAllMBProgressHUD]; + if (!navigationAction.targetFrame.isMainFrame) { + [webView loadRequest:navigationAction.request]; + } + return nil; +} + +- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{ + if (!self.webTitle) { + self.title = @"加载中..."; + } + +} + +- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{ + [self hiddenAllMBProgressHUD]; + + if (!self.webTitle) { + self.title = webView.title; + } + +} + +- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(nonnull NSError *)error{ + [self hiddenAllMBProgressHUD]; +} + + +#pragma mark - 自定义 +- (void)onBackClicked{ + if ( self.wkWebView.canGoBack){ + [self.wkWebView goBack]; + } else { + [self clearWebViewCache]; + } +} + +- (void)clearWebViewCache{ + if (iOS9Later) { + NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes]; + NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0]; + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{ + NSLog(@"-----clear webView cache success------"); + }]; + } else { + NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; + NSString *cookiesFolderPath = [libraryPath stringByAppendingString:@"/Cookies"]; + NSError *errors; + [[NSFileManager defaultManager] removeItemAtPath:cookiesFolderPath error:&errors]; + if (!errors) { + NSLog(@"-----clear wkWebView cache success------"); + } + } +} +- (NSString *)URLEncodedString:(NSString *)urlString{ + NSString *encodePath ; + if (!IOS7) { + encodePath = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + }else{ + encodePath = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + }return encodePath; +} + + +#pragma mark - SETTER + +- (void)setWebUrl:(NSString *)webUrl{ + _webUrl = webUrl; + [self webViewRequest]; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameSubTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameSubTableViewCell.h new file mode 100644 index 0000000..3dc5836 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameSubTableViewCell.h @@ -0,0 +1,19 @@ +// +// SickNameSubTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/29. +// + +#import +#import "HealthPhyReportModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SickNameSubTableViewCell : UITableViewCell + +@property (nonatomic, strong) thirdResultResModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameSubTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameSubTableViewCell.m new file mode 100644 index 0000000..4da9430 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameSubTableViewCell.m @@ -0,0 +1,221 @@ +// +// SickNameSubTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/29. +// + +#import "SickNameSubTableViewCell.h" + + +@interface SickNameSubTableViewCell () + +@property (nonatomic, strong) UILabel * nameLabel; +@property (nonatomic, strong) UILabel * resultLabel; +@property (nonatomic, strong) UILabel * danweiLabel; +@property (nonatomic, strong) UILabel * caokaoLabel; +@property (nonatomic, strong) UIButton * detailBtn; +@property (nonatomic, strong) UIView * popbackView; +@end + +@implementation SickNameSubTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + + + UIView * headView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, kScreenWidth - kRealValue(30), kRealValue(40))]; + headView.backgroundColor =KWhiteColor; + [self.contentView addSubview:headView]; + + + + UILabel * nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, kRealValue(127), kRealValue(40))]; + nameLabel.text = @""; + nameLabel.textAlignment = NSTextAlignmentCenter; + nameLabel.font = SYSTEMFONT(13); + nameLabel.numberOfLines = 2; + self.nameLabel = nameLabel; + [headView addSubview:nameLabel]; + + CGFloat tabWidth = (kScreenWidth - kRealValue(30) - kRealValue(127) - 4)/3; + + UIView * lin_left = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, nameLabel.height)]; + lin_left.backgroundColor = CLineColor; + [headView addSubview:lin_left]; + + UIView * linName = [[UIView alloc] initWithFrame:CGRectMake(nameLabel.right, 0, 1, nameLabel.height)]; + linName.backgroundColor = CLineColor; + [headView addSubview:linName]; + + UILabel * reslutLabel = [[UILabel alloc] initWithFrame:CGRectMake(linName.right , 0, tabWidth, kRealValue(40))]; + reslutLabel.text = @""; + reslutLabel.textAlignment = NSTextAlignmentCenter; + reslutLabel.font = SYSTEMFONT(13); + reslutLabel.textColor = UIColorHex(#333333); + self.resultLabel = reslutLabel; + reslutLabel.userInteractionEnabled = true; + [headView addSubview:reslutLabel]; + + self.detailBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, tabWidth - 20, 20)]; + [self.detailBtn setTitle:@"详情" forState:UIControlStateNormal]; + [self.detailBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.detailBtn.titleLabel.font = MEDIUMFONT(13); + self.detailBtn.layer.cornerRadius = 5; + self.detailBtn.backgroundColor = RGBA(33, 190, 189, 0.5); + [self.detailBtn addTarget:self action:@selector(showResultDetail) forControlEvents:UIControlEventTouchUpInside]; + [reslutLabel addSubview:self.detailBtn]; + + UIView * resName = [[UIView alloc] initWithFrame:CGRectMake(reslutLabel.right, 0, 1, nameLabel.height)]; + resName.backgroundColor = CLineColor; + [headView addSubview:resName]; + + UILabel * danweiLabel = [[UILabel alloc] initWithFrame:CGRectMake(resName.right, 0, tabWidth, kRealValue(40))]; + danweiLabel.text = @""; + danweiLabel.textAlignment = NSTextAlignmentCenter; + danweiLabel.font = SYSTEMFONT(13); + danweiLabel.textColor = UIColorHex(#333333); + self.danweiLabel = danweiLabel; + [headView addSubview:danweiLabel]; + + UIView * danweiLine = [[UIView alloc] initWithFrame:CGRectMake(danweiLabel.right, 0, 1, nameLabel.height)]; + danweiLine.backgroundColor = CLineColor; + [headView addSubview:danweiLine]; + + UILabel * zhiLabel = [[UILabel alloc] initWithFrame:CGRectMake(danweiLine.right, 0, tabWidth, kRealValue(40))]; + zhiLabel.text = @""; + zhiLabel.textAlignment = NSTextAlignmentCenter; + zhiLabel.textColor = UIColorHex(#333333); + zhiLabel.font = SYSTEMFONT(13); + self.caokaoLabel = zhiLabel; + [headView addSubview:zhiLabel]; + + UIView * lin_right = [[UIView alloc] initWithFrame:CGRectMake(zhiLabel.right, 0, 1, nameLabel.height)]; + lin_right.backgroundColor = CLineColor; + [headView addSubview:lin_right]; + + UIView * lin_bottom = [[UIView alloc] initWithFrame:CGRectMake(0, zhiLabel.bottom - 1, kScreenWidth - kRealValue(30), 1)]; + lin_bottom.backgroundColor = CLineColor; + [headView addSubview:lin_bottom]; +} + +- (void)setModel:(thirdResultResModel *)model { + + _model = model; + + if (ValidStr(_model.peResult)) { + _model.peResult = @"/"; + } + if (ValidStr(_model.unit)) { + _model.unit = @"/"; + } + if (ValidStr(_model.printContext)) { + _model.printContext = @"/"; + } + if (ValidStr(_model.peItemName)) { + _model.peItemName = @"/"; + } + self.nameLabel.text = _model.peItemName; + + + if (_model.peResult.length >= 5) { + + self.resultLabel.text =@""; + self.detailBtn.hidden = false; + }else + { + self.resultLabel.text = _model.peResult; + self.detailBtn.hidden = true; + } + self.danweiLabel.text = _model.unit; + self.caokaoLabel.text = _model.printContext; + + + if ([_model.colour integerValue] == 1) { + + self.nameLabel.textColor = UIColorHex(#DA180F); + self.resultLabel.textColor = UIColorHex(#DA180F); + self.danweiLabel.textColor = UIColorHex(#DA180F); + self.caokaoLabel.textColor = UIColorHex(#DA180F); + }else + { + self.nameLabel.textColor = UIColorHex(#333333); + self.resultLabel.textColor = UIColorHex(#333333); + self.danweiLabel.textColor = UIColorHex(#333333); + self.caokaoLabel.textColor = UIColorHex(#333333); + } + +} + +- (void)showResultDetail { + + + UIView * popbackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]; + self.popbackView = popbackView; + popbackView.backgroundColor = RGBA(0, 0, 0, 0.5); + + + + UIScrollView * centerView = [[UIScrollView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(154), kScreenWidth - kRealValue(30), 200)]; + centerView.backgroundColor = KWhiteColor; + centerView.layer.cornerRadius = 10.0; + [popbackView addSubview:centerView]; + + UILabel * connteLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, centerView.width - 20, 50)]; + connteLabel.text = [NSString stringWithFormat:@"%@",self.model.peResult] ; + connteLabel.numberOfLines = 0; + connteLabel.font = SYSTEMFONT(14); + connteLabel.textAlignment = NSTextAlignmentLeft; + connteLabel.textColor = CFontColor1; + [centerView addSubview:connteLabel]; + + CGFloat h = [HQCommonUtils getSpaceLabelHeight:connteLabel withStr:connteLabel.text withFont:[UIFont systemFontOfSize:14] withWidth:connteLabel.width withLineSpacing:5]; + + connteLabel.height = h; + + centerView.height = h + 69; + + if (h > kScreenHeight - kRealValue(180)) { + + centerView.height = kRealValue(450); + centerView.contentSize = CGSizeMake(centerView.width, h); + } + + UIButton * sureBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(15), centerView.bottom- 15, kScreenWidth - kRealValue(30), 49)]; + [sureBtn setTitle:@"确定" forState:UIControlStateNormal]; + sureBtn.titleLabel.font = SYSTEMFONT(13); + sureBtn.backgroundColor = KWhiteColor; + sureBtn.layer.cornerRadius = 10; + [sureBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [sureBtn addTarget:self action:@selector(sureAction) forControlEvents:UIControlEventTouchUpInside]; + [popbackView addSubview:sureBtn]; + + + [kAppWindow addSubview:popbackView]; +} + +- (void)sureAction { + + [self.popbackView removeFromSuperview]; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameTopTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameTopTableViewCell.h new file mode 100644 index 0000000..4161780 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameTopTableViewCell.h @@ -0,0 +1,23 @@ +// +// SickNameTopTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/8/29. +// + +#import +#import "HealthPhyReportModel.h" +NS_ASSUME_NONNULL_BEGIN + +typedef void(^onekeyQuestionBlock)(NSString * itemID); + +@interface SickNameTopTableViewCell : UITableViewCell + +@property (nonatomic, strong) thirdResultResModel * model; +@property (nonatomic, copy) onekeyQuestionBlock itemBlock; +@property (nonatomic, copy) NSString * uniItemClassId; +@property (nonatomic, assign) NSInteger questionType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameTopTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameTopTableViewCell.m new file mode 100644 index 0000000..992c08b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/SickNameTopTableViewCell.m @@ -0,0 +1,134 @@ +// +// SickNameTopTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/8/29. +// + +#import "SickNameTopTableViewCell.h" + +@interface SickNameTopTableViewCell () + +@property (nonatomic, strong ) UILabel * sickNameLabel; +@property (nonatomic, strong ) YYLabel * oneKeyLabel; + +@end + +@implementation SickNameTopTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + UIView * linV = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(15), 2, kRealValue(13))]; + linV.backgroundColor = UIColorHex(#21BEBD); + [self.contentView addSubview:linV]; + + self.sickNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(linV.right + kRealValue(10), kRealValue(15), 100, 16)]; + self.sickNameLabel.textAlignment = NSTextAlignmentLeft; + self.sickNameLabel.font = BOLDSYSTEMFONT(15); + self.sickNameLabel.textColor = CFontColor1; + [self.contentView addSubview:self.sickNameLabel]; + + self.oneKeyLabel = [[YYLabel alloc] initWithFrame:CGRectMake(kScreenWidth - kRealValue(15) - 130 , kRealValue(15), 130, 16)]; + self.oneKeyLabel.textAlignment = NSTextAlignmentRight; + self.oneKeyLabel.font = BOLDSYSTEMFONT(13); + self.oneKeyLabel.textColor = KRedColor; + self.oneKeyLabel.text = @"专家库一键咨询 >"; + self.oneKeyLabel.hidden = true; + [self.oneKeyLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + [self doctorQuestion]; + }]; + [self.contentView addSubview:self.oneKeyLabel]; + + UIView * headView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), self.sickNameLabel.bottom + kRealValue(12), kScreenWidth - kRealValue(30), kRealValue(40))]; + headView.backgroundColor = RGBA(33, 190, 189, 0.5); + [self.contentView addSubview:headView]; + + UILabel * nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, kRealValue(127), kRealValue(40))]; + nameLabel.text = @"名称"; + nameLabel.textAlignment = NSTextAlignmentCenter; + nameLabel.font = SYSTEMFONT(13); + [headView addSubview:nameLabel]; + + CGFloat tabWidth = (kScreenWidth - kRealValue(30) - kRealValue(127) - 4)/3; + + UIView * linName = [[UIView alloc] initWithFrame:CGRectMake(nameLabel.right, 0, 1, nameLabel.height)]; + linName.backgroundColor = CLineColor; + [headView addSubview:linName]; + + UILabel * reslutLabel = [[UILabel alloc] initWithFrame:CGRectMake(linName.right , 0, tabWidth, kRealValue(40))]; + reslutLabel.text = @"结果"; + reslutLabel.textAlignment = NSTextAlignmentCenter; + reslutLabel.font = SYSTEMFONT(13); + [headView addSubview:reslutLabel]; + + UIView * resName = [[UIView alloc] initWithFrame:CGRectMake(reslutLabel.right, 0, 1, nameLabel.height)]; + resName.backgroundColor = CLineColor; + [headView addSubview:resName]; + + UILabel * danweiLabel = [[UILabel alloc] initWithFrame:CGRectMake(resName.right, 0, tabWidth, kRealValue(40))]; + danweiLabel.text = @"单位"; + danweiLabel.textAlignment = NSTextAlignmentCenter; + danweiLabel.font = SYSTEMFONT(13); + [headView addSubview:danweiLabel]; + + UIView * danweiLine = [[UIView alloc] initWithFrame:CGRectMake(danweiLabel.right, 0, 1, nameLabel.height)]; + danweiLine.backgroundColor = CLineColor; + [headView addSubview:danweiLine]; + + UILabel * zhiLabel = [[UILabel alloc] initWithFrame:CGRectMake(danweiLine.right, 0, tabWidth, kRealValue(40))]; + zhiLabel.text = @"参考值"; + zhiLabel.textAlignment = NSTextAlignmentCenter; + zhiLabel.font = SYSTEMFONT(13); + [headView addSubview:zhiLabel]; +} + +- (void)setModel:(thirdResultResModel *)model { + + _model = model; + + self.sickNameLabel.text = _model.peItemName; + +} + + +- (void)doctorQuestion { + + if (self.itemBlock) { + + self.itemBlock(self.model.third_tId); + } +} + +- (void)setQuestionType:(NSInteger)questionType { + + _questionType = questionType; + + if (_questionType == 2) { + self.oneKeyLabel.hidden = false; + }else + { + self.oneKeyLabel.hidden = true; + } + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/imageReportTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/imageReportTableViewCell.h new file mode 100644 index 0000000..4b64a86 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/imageReportTableViewCell.h @@ -0,0 +1,22 @@ +// +// imageReportTableViewCell.h +// EscortProject +// +// Created by Apple on 2024/2/23. +// + +#import +#import "HealthPhyReportModel.h" +NS_ASSUME_NONNULL_BEGIN + +typedef void(^lookUserReport)(NSString * lookUrl); + +@interface imageReportTableViewCell : UITableViewCell + +@property (nonatomic, strong) imageItemListModel * model; + +@property (nonatomic, copy) lookUserReport lookBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/imageReportTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/imageReportTableViewCell.m new file mode 100644 index 0000000..7ef1794 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/OtherFile/imageReportTableViewCell.m @@ -0,0 +1,235 @@ +// +// imageReportTableViewCell.m +// EscortProject +// +// Created by Apple on 2024/2/23. +// + +#import "imageReportTableViewCell.h" + +@interface imageReportTableViewCell () + +@property (nonatomic, strong) UILabel * reportLabel; + +@property (nonatomic, strong) UIView * reportConetView; + +@property (nonatomic, strong) UILabel * resultLabel; + +@property (nonatomic, strong) UIView * conteLineView; + +@property (nonatomic, strong) NSMutableArray * buttonArray; +@property (nonatomic, strong) NSMutableArray * reportArray; +@property (nonatomic, strong) NSMutableArray * imageArray; + + +@end + +@implementation imageReportTableViewCell + +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + + _buttonArray = [[NSMutableArray alloc] init]; + } + return _buttonArray; +} + +- (NSMutableArray *)reportArray { + + if (!_reportArray) { + + _reportArray = [[NSMutableArray alloc] init]; + } + return _reportArray; +} + +- (NSMutableArray *)imnageArray { + + if (!_imageArray) { + + _imageArray = [[NSMutableArray alloc] init]; + } + return _imageArray; +} +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + + +- (void)createUI { + + UIView * linV = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(15), 2, kRealValue(13))]; + linV.backgroundColor = UIColorHex(#21BEBD); + [self.contentView addSubview:linV]; + + self.reportLabel = [[UILabel alloc] initWithFrame:CGRectMake(linV.right + kRealValue(10), kRealValue(15), kScreenWidth - kRealValue(20), 16)]; + self.reportLabel.textAlignment = NSTextAlignmentLeft; + self.reportLabel.font = BOLDSYSTEMFONT(15); + self.reportLabel.textColor = CFontColor1; + self.reportLabel.text = @"--"; + [self.contentView addSubview:self.reportLabel]; + + self.reportConetView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15),self.reportLabel.bottom + kRealValue(15), kScreenWidth - kRealValue(30), kRealValue(13))]; + self.reportConetView.backgroundColor = RGBA(245, 247, 251, 1); + [self.contentView addSubview:self.reportConetView]; + + self.resultLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16), kRealValue(15), self.reportConetView.width - kRealValue(32), 13)]; + self.resultLabel.textAlignment = NSTextAlignmentLeft; + self.resultLabel.font = MEDIUMFONT(13); + self.resultLabel.textColor = CFontColor1; + self.resultLabel.numberOfLines = 0; + self.resultLabel.text = @"--"; + [self.reportConetView addSubview:self.resultLabel]; + + self.conteLineView = [[UIView alloc] initWithFrame:CGRectMake(0,self.resultLabel.bottom + kRealValue(38), self.reportConetView.width, kRealValue(1))]; + self.conteLineView.backgroundColor = UIColorHex(#E7EAF2); + [self.reportConetView addSubview:self.conteLineView]; + +} + +- (void)setModel:(imageItemListModel *)model { + + _model = model; + + self.reportLabel.text = _model.imageCheckName; + + self.resultLabel.text = _model.reportContent; + + self.resultLabel.height = _model.textHeight; + + if (_model.textHeight < 13) { + + self.conteLineView.top = self.resultLabel.bottom + kRealValue(38); + self.reportConetView.height = kRealValue(15) + 13 + kRealValue(38) + kRealValue(44); + } + else + { + self.conteLineView.top = self.resultLabel.bottom + kRealValue(18); + self.reportConetView.height = kRealValue(15) + _model.textHeight + kRealValue(18) + kRealValue(44); + + } + + + + + + + + for (UIButton * toolsBtn in self.buttonArray) { + [toolsBtn removeFromSuperview]; + } + [self.buttonArray removeAllObjects]; + [self.imnageArray removeAllObjects]; + [self.reportArray removeAllObjects]; + + //原始报告 + CGFloat buttonW = (self.reportConetView.width - kRealValue(75) )/ 4; //1行最多4个 + + NSArray * yuanshiArray = [_model.reportUrl componentsSeparatedByString:@","]; + [self.reportArray addObjectsFromArray:yuanshiArray]; + CGFloat lastX = 0; + for (int i = 0 ; i < yuanshiArray.count; i ++) { + + UIButton * lookYuanshi = [[UIButton alloc] initWithFrame:CGRectMake(self.reportConetView.width - kRealValue(15) - (buttonW + kRealValue(15)) * i, self.conteLineView.bottom + kRealValue(6), kRealValue(80), kRealValue(30))]; + [lookYuanshi setTitle:@"原始报告" forState:UIControlStateNormal]; + lookYuanshi.titleLabel.font = SYSTEMFONT(13); + lookYuanshi.layer.cornerRadius = 15.0; + lookYuanshi.layer.borderWidth = 1.0; + [lookYuanshi setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + lookYuanshi.layer.borderColor = UIColorHex(#21BEBD).CGColor; + lookYuanshi.layer.masksToBounds = true; + lookYuanshi.tag = 2000+ i; + [self.buttonArray addObject:lookYuanshi]; + + } + //影像原片 + NSArray * yingxiangArray = [_model.imageShowUrl componentsSeparatedByString:@","]; + [self.imageArray addObjectsFromArray:yingxiangArray]; + for (int i = 0 ; i < yingxiangArray.count; i ++) { + + UIButton * lookyingxiang = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(15) - (buttonW + kRealValue(15)) * i, self.conteLineView.bottom + kRealValue(6), kRealValue(80), kRealValue(30))]; + [lookyingxiang setTitle:@"影像原片" forState:UIControlStateNormal]; + lookyingxiang.titleLabel.font = SYSTEMFONT(13); + lookyingxiang.layer.cornerRadius = 15.0; + lookyingxiang.layer.borderWidth = 1.0; + lookyingxiang.layer.borderColor = UIColorHex(#21BEBD).CGColor; + lookyingxiang.layer.masksToBounds = true; + [lookyingxiang setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + + lookyingxiang.tag = 1000+ i; + [self.buttonArray addObject:lookyingxiang]; + } + + + + //布局多组按钮 + //一行的列数 + NSInteger cols = 4; + //label大小 + CGFloat labW = buttonW ; + CGFloat labH = kRealValue(30); + CGFloat pading = kRealValue(15); + //每一行的间距 + CGFloat rowMargin = kRealValue(15); + for (int index = 0; index < self.buttonArray.count ; index ++) { + //所在列 + NSInteger col = index % cols; + //所在行 + NSInteger row = index / cols; + + CGFloat shopX = col * (labW + rowMargin); + CGFloat shopY = row * (labH + rowMargin); + UIButton * toolsBtn = self.buttonArray[index]; + toolsBtn.frame = CGRectMake(self.reportConetView.width - shopX - pading - buttonW , self.conteLineView.bottom + kRealValue(6) + shopY, labW, labH); + if (index == self.buttonArray.count - 1) { + lastX = toolsBtn.bottom + kRealValue(7); + } + [toolsBtn addTarget:self action:@selector(lookImageReport:) forControlEvents:UIControlEventTouchUpInside]; + [self.reportConetView addSubview:toolsBtn]; + + } + self.reportConetView.height = lastX; + +} + +- (void)lookImageReport:(UIButton *)lookBtn { + + NSLog(@"%d",lookBtn.tag); + //影片原像 + if (lookBtn.tag < 2000) { + + if (self.lookBlock) { + self.lookBlock(self.imageArray[lookBtn.tag - 1000]); + } + + }else //原始报告 + { + if (self.lookBlock) { + self.lookBlock(self.reportArray[lookBtn.tag - 2000]); + } + } + + + + +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/AppointmentInfoView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/AppointmentInfoView.h new file mode 100644 index 0000000..61b465e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/AppointmentInfoView.h @@ -0,0 +1,40 @@ +// +// AppointmentInfoView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import +#import "DoctorReportModel.h" +#import "QuestionBodyReportModel.h" +//#import "PhyscialReportListModel.h" +NS_ASSUME_NONNULL_BEGIN + +typedef void(^appointmentBlock)(); +//typedef void(^lookReportBlock)(PhyscialReportListModel * reportModel); + +@interface AppointmentInfoView : UIView + +@property (nonatomic, assign) CGFloat infoH; + +@property (nonatomic, strong) DoctorReportModel * model; + +@property (nonatomic, copy) appointmentBlock lookBlock; + +//@property (nonatomic, copy) lookReportBlock reportBlock; + + +//@property (nonatomic, strong) DoctorReportFamilyInfoModel * familyModel; +// +//@property (nonatomic, strong) DoctorReportRecordsModel * recordModel; +// +//@property (nonatomic, strong) DoctorReportModel * answerModel; + +@property (nonatomic, assign) BOOL isQuxiao; + +//@property (nonatomic, strong) PhyscialReportListModel * bodyModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/AppointmentInfoView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/AppointmentInfoView.m new file mode 100644 index 0000000..d2bf2da --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/AppointmentInfoView.m @@ -0,0 +1,314 @@ +// +// AppointmentInfoView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import "AppointmentInfoView.h" + +@interface AppointmentInfoView () + +@property (nonatomic, strong) UILabel * peopleNameLabel; + +@property (nonatomic, strong) UILabel * sexLabel; + +@property (nonatomic, strong) UILabel * ageLabel; + +@property (nonatomic, strong) UILabel * createTimeLabel; + +@property (nonatomic, strong) UILabel * fileLabel; + +@property (nonatomic, strong) UILabel * upTimeLabel; + +@property (nonatomic, strong) UILabel * hospatilLabel; + +@property (nonatomic, strong) UILabel * healthTitleLabel; + +@property (nonatomic, strong) UILabel * reportLabel; + +@property (nonatomic, strong) YYLabel * lookMoreLabel; + +@property (nonatomic, strong) NSMutableArray * healthArray; + +@property (nonatomic, strong) UIView * heathLineV ; + +@property (nonatomic, strong) UIImageView * statusImage ; + +@property (nonatomic, strong) UIView * healthInfoView ; + +@property (nonatomic, strong) UIView * phyReportView ; + +@end + + +@implementation AppointmentInfoView + + +- (NSMutableArray *)healthArray { + + if (!_healthArray ) { + + _healthArray = [[NSMutableArray alloc] init]; + } + return _healthArray; +} + + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + UILabel * titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(14), kRealValue(24), 100, 14)]; + titleLabel.text = @"预约人信息"; + titleLabel.font = BOLDSYSTEMFONT(14); + titleLabel.textColor = CFontColor1; + titleLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:titleLabel]; + + self.statusImage = [[UIImageView alloc] initWithFrame:CGRectMake(self.width - kRealValue(20) - 62, kRealValue(9), 62, 48)]; + self.statusImage.image = [UIImage imageNamed:@"cancalSuccess"]; + self.statusImage.hidden = YES; + [self addSubview:self.statusImage]; + + //姓名 + self.peopleNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(14),titleLabel.bottom + kRealValue(18), (self.width - kRealValue(26))/3, 13)]; + self.peopleNameLabel.text = @"姓名:"; + self.peopleNameLabel.font = MEDIUMFONT(13); + self.peopleNameLabel.textColor = CFontColor1; + self.peopleNameLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.peopleNameLabel]; + + //性别 + self.sexLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.peopleNameLabel.right, titleLabel.bottom + kRealValue(18), (self.width - kRealValue(26))/3, 13)]; + self.sexLabel.text = @"性别:-"; + self.sexLabel.font = MEDIUMFONT(13); + self.sexLabel.textColor = CFontColor1; + self.sexLabel.textAlignment = NSTextAlignmentCenter; + [self addSubview:self.sexLabel]; + + //年龄 + self.ageLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.sexLabel.right, titleLabel.bottom + kRealValue(18), (self.width - kRealValue(26))/3, 13)]; + self.ageLabel.text = @"年龄:"; + self.ageLabel.font = MEDIUMFONT(13); + self.ageLabel.textColor = CFontColor1; + self.ageLabel.textAlignment = NSTextAlignmentCenter; + [self addSubview:self.ageLabel]; + + UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(0, self.ageLabel.bottom + kRealValue(17), self.width, 1)]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [self addSubview:linv]; + + UILabel * fileTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(14),linv.bottom + kRealValue(24), 50, 14)]; + fileTitleLabel.text = @"档案"; + fileTitleLabel.font = BOLDSYSTEMFONT(14); + fileTitleLabel.textColor = CFontColor1; + fileTitleLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:fileTitleLabel]; + + self.createTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(fileTitleLabel.right, linv.bottom + kRealValue(25), self.width - fileTitleLabel.right -kRealValue(10) , 12)]; + self.createTimeLabel.text = @"生成时间:"; + self.createTimeLabel.font = MEDIUMFONT(11); + self.createTimeLabel.textColor = UIColorHex(#999999); + self.createTimeLabel.textAlignment = NSTextAlignmentRight; + [self addSubview:self.createTimeLabel]; + + + + self.fileLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(25), fileTitleLabel.bottom + kRealValue(18), self.width - kRealValue(50), 14)]; + self.fileLabel.text = @"--"; + self.fileLabel.font = MEDIUMFONT(13); + self.fileLabel.textColor = UIColorHex(#333333); + self.fileLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.fileLabel]; + + YYLabel * allRoomLabel = [[YYLabel alloc]initWithFrame:CGRectMake(self.width - 130, self.fileLabel.bottom + kRealValue(14), 120, 17)]; + allRoomLabel.text = @"查看详情 >"; + allRoomLabel.textColor = UIColorHex(#3390FF); + allRoomLabel.font = SYSTEMFONT(11); + allRoomLabel.textAlignment = NSTextAlignmentRight; + [self addSubview:allRoomLabel]; + + [allRoomLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + + [self lookFileDetail]; + }]; + + UIView * fileLview = [[UIView alloc] initWithFrame:CGRectMake(0, self.fileLabel.bottom + kRealValue(44), self.width, 1)]; + fileLview.backgroundColor = UIColorHex(#E0E0E0); + [self addSubview:fileLview]; + + //基本健康信息view + self.healthInfoView = [[UIView alloc] initWithFrame:CGRectMake(0, self.fileLabel.bottom + 28, self.width, 10)]; + [self addSubview:self.healthInfoView]; + + + UILabel * healthTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(14), kRealValue(30), 100, 14)]; + healthTitleLabel.text = @"基本健康信息"; + healthTitleLabel.font = BOLDSYSTEMFONT(14); + healthTitleLabel.textColor = CFontColor1; + self.healthTitleLabel = healthTitleLabel; + healthTitleLabel.textAlignment = NSTextAlignmentLeft; + [self.healthInfoView addSubview:healthTitleLabel]; + +// +// NSArray * infoArray = @[@[@"饮食习惯:",@"重油 爱吃辣"],@[@"烟酒习惯:",@"不抽烟 爱喝酒"],@[@"既往史:",@"肾虚"],@[@"家族史:",@"无"],@[@"过敏史:",@"青霉素过敏"],@[@"用药史:",@"六味地黄丸"]]; +// +// for (int i = 0 ; i < 6; i ++) { +// +// UIView * healthView = [self createInfoView:infoArray[i][0] leftFrame:CGRectMake(kRealValue(15), healthTitleLabel.bottom + kRealValue(20) + 30 * i, self.width - kRealValue(30), 13) rightText:infoArray[i][1]]; +// +// [self addSubview:healthView]; +// +// if (i == 5) { +// healthH = healthView.bottom; +// } +// } + +// //体检报告view +// //基本健康信息view + self.phyReportView = [[UIView alloc] initWithFrame:CGRectMake(0, self.healthInfoView.bottom + kRealValue(17), self.width, 50)]; + [self addSubview:self.phyReportView]; + + self.phyReportView.hidden = YES; + self.phyReportView.height = CGFLOAT_MIN; + self.infoH = self.healthInfoView.bottom + kRealValue(20); + +} + +- (void)lookFileDetail { + + if (self.lookBlock) { + + self.lookBlock(); + } + +} + + + +- (UIView *)createInfoView:(NSString *)leftText + leftFrame:(CGRect)frame + rightText:(NSString *)rightText { + + UIView * infoView = [[UIView alloc] initWithFrame:frame]; + + UILabel * leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 80, 15)]; + + leftLabel.text = leftText; + + leftLabel.font = SYSTEMFONT(13); + + leftLabel.textColor = UIColorHex(#999999); + + leftLabel.textAlignment = NSTextAlignmentLeft; + + [infoView addSubview:leftLabel]; + + UILabel * rightLabel = [[UILabel alloc] initWithFrame:CGRectMake(leftLabel.right + kRealValue(10), 0, frame.size.width - kRealValue(10), 15)]; + + rightLabel.text = rightText; + + rightLabel.font = SYSTEMFONT(13); + + leftLabel.textColor = CFontColor1; + + rightLabel.textAlignment = NSTextAlignmentLeft; + + [infoView addSubview:rightLabel]; + + + return infoView; + + +} + + + + +- (void)setIsQuxiao:(BOOL)isQuxiao { + + _isQuxiao = isQuxiao; + + self.statusImage.hidden = !isQuxiao; +} + + +- (void)setModel:(DoctorReportModel *)model { + _model = model; + + DoctorReportRecordsModel * recordModel = [DoctorReportRecordsModel modelWithDictionary:_model.conMedicalRecordsListDO] ; + DoctorReportFamilyInfoModel * familyModel = [DoctorReportFamilyInfoModel modelWithDictionary:_model.conFamilyMembersDO]; + + //预约人信息 + if (!ValidStr(familyModel.name)) { + self.peopleNameLabel.text = [NSString stringWithFormat:@"姓名:%@",familyModel.name] ; + } + if (!ValidStr(familyModel.age)) { + self.ageLabel.text = [NSString stringWithFormat:@"年龄:%@",familyModel.age]; + + } + NSString * sexString = [familyModel.gender integerValue] == 1 ? @"女":@"男"; + self.sexLabel.text = [NSString stringWithFormat:@"性别:%@",sexString]; + + //档案 + if (!ValidStr(recordModel.updateTime)) { + self.createTimeLabel.text = [NSString stringWithFormat:@"更新时间:%@",recordModel.updateTime]; + + } + if (!ValidStr(recordModel.medicalDescribe)) { + self.fileLabel.text = [NSString stringWithFormat:@"问题描述:%@",recordModel.medicalDescribe] ; + + }else + { + self.fileLabel.text = [NSString stringWithFormat:@"问题描述:%@",@"-"] ; + + } + + + //问题列表 + [self.healthArray removeAllObjects]; + + + + if (_model.answer.count <=0 ) { + self.healthTitleLabel.hidden = true; + self.healthInfoView.height = CGFLOAT_MIN; + }else + { + self.self.healthTitleLabel.hidden = false; + + for (int i = 0 ; i < _model.answer.count; i ++) { + + DoctorAnswerModel * model = _model.answer[i]; + + UIView * healthView = [self createInfoView:[NSString stringWithFormat:@"%@:",model.answerKey] leftFrame:CGRectMake(kRealValue(15), self.healthTitleLabel.bottom + kRealValue(20) + 30 * i, self.width - kRealValue(30), 13) rightText:model.answerValue]; + + [self.healthInfoView addSubview:healthView]; + + if (i == _model.answer.count - 1) { + self.healthInfoView.height = healthView.bottom; + } + [self.healthArray addObject:healthView]; + } + self.phyReportView.top = self.healthInfoView.bottom; + } + + //体检报告 + if ([recordModel.tfPermission integerValue] != 1 ) { //1 有体检报告 0 没 + + self.phyReportView.hidden = YES; + self.phyReportView.height = CGFLOAT_MIN; + self.infoH = self.healthInfoView.bottom + kRealValue(20); + } +} + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllHospitalConditionView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllHospitalConditionView.h new file mode 100644 index 0000000..a1c8e1e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllHospitalConditionView.h @@ -0,0 +1,26 @@ +// +// AllHospitalConditionView.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/13. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol hospitalListDeleage + +- (void)hospitalListAction:(NSString *)hospitalName withID:(NSString *)hospitalID; + +@end + +@interface AllHospitalConditionView : UIView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, weak)id hospitalDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllHospitalConditionView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllHospitalConditionView.m new file mode 100644 index 0000000..e5e5627 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllHospitalConditionView.m @@ -0,0 +1,56 @@ +// +// AllHospitalConditionView.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/13. +// + +#import "AllHospitalConditionView.h" +#import "SearchConetShowTable.h" + +@interface AllHospitalConditionView () + +@property (nonatomic, strong) SearchConetShowTable * contTable; + + +@end + +@implementation AllHospitalConditionView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + self.backgroundColor =RGBA(0, 0, 0, 0.3); + self.contTable = [[SearchConetShowTable alloc] initWithFrame:CGRectMake(0, 0 , kScreenWidth, kRealValue(300)) style:UITableViewStylePlain]; + MJWeakSelf + self.contTable.hosBlock = ^(NSString * _Nonnull hospitalName, NSString * _Nonnull hospitalID) { + if ([weakSelf.hospitalDelegate respondsToSelector:@selector(hospitalListAction:withID:)]) + { + [weakSelf.hospitalDelegate hospitalListAction:hospitalName withID:hospitalID]; + } + }; + [self addSubview:self.contTable]; +} + +- (void)setDataArray:(NSArray *)dataArray { + _dataArray = dataArray; + self.contTable.dataArray = _dataArray; + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllRoomsConditionView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllRoomsConditionView.h new file mode 100644 index 0000000..67a6ab2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllRoomsConditionView.h @@ -0,0 +1,31 @@ +// +// AllRoomsConditionView.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/13. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol roosConditionProtocol + +- (void)roomsLeftAction:(NSInteger)index; +- (void)roomsRightAction:(NSString *)roomID; + +@end + +@interface AllRoomsConditionView : UIView + +@property (nonatomic, strong) NSArray * leftArray; + +@property (nonatomic, strong) NSArray * rightArray; + +@property (nonatomic, assign) NSInteger searchType; + +@property (nonatomic, weak)id roomLeftDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllRoomsConditionView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllRoomsConditionView.m new file mode 100644 index 0000000..3ed12f2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllRoomsConditionView.m @@ -0,0 +1,102 @@ +// +// AllRoomsConditionView.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/13. +// + +#import "AllRoomsConditionView.h" +#import "FoundRightTableView.h" +#import "FoundLeftTableView.h" + + +@interface AllRoomsConditionView () + +@property (nonatomic, strong) FoundLeftTableView * leftTable; + +@property (nonatomic, strong) FoundRightTableView * rightTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@property (nonatomic, strong) NSMutableArray * rightDataArray; + +@end + + + +@implementation AllRoomsConditionView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + + + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + self.backgroundColor = RGBA(0, 0, 0, 0.5); + self.leftTable = [[FoundLeftTableView alloc] initWithFrame:CGRectMake(0, 0, kRealValue(160),kRealValue(300)) style:UITableViewStyleGrouped]; + self.leftTable.leftDelegate = self; + self.leftTable.backgroundColor = UIColorHex(#F3F3F3); + [self addSubview:self.leftTable]; + + self.rightTable = [[FoundRightTableView alloc] initWithFrame:CGRectMake(self.leftTable.right, 0,kScreenWidth - kRealValue(160), kRealValue(300)) style:UITableViewStyleGrouped]; + MJWeakSelf + self.rightTable.rightBlock = ^(NSString * _Nonnull roomId ,NSString * _Nonnull roomName) { + + if ([weakSelf.roomLeftDelegate respondsToSelector:@selector(roomsRightAction:)]) { + + [weakSelf.roomLeftDelegate roomsRightAction:roomId]; + } + + }; + [self addSubview:self.rightTable]; + + +} + +- (void)setLeftArray:(NSArray *)leftArray { + _leftArray = leftArray; + self.leftTable.dataArray = _leftArray; + +} + +- (void)setRightArray:(NSArray *)rightArray { + + _rightArray = rightArray; + + self.rightTable.rightDataArray = _rightArray; +} + +- (void)setSearchType:(NSInteger)searchType { + + _searchType =searchType; + + self.rightTable.searchType = _searchType; + +} +#pragma mark: 左边点击 + +- (void)leftCellAction:(NSInteger)index { + + if ([self.roomLeftDelegate respondsToSelector:@selector(roomsLeftAction:)]) { + + [self.roomLeftDelegate roomsLeftAction:index]; + } + + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllSicksConditionView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllSicksConditionView.h new file mode 100644 index 0000000..97079a7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllSicksConditionView.h @@ -0,0 +1,32 @@ +// +// AllSicksConditionView.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/13. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol sicksConditionProtocol + +- (void)sicksLeftAction:(NSInteger)index; +- (void)sicksRightAction:(NSString *)roomID; + +@end + +@interface AllSicksConditionView : UIView + +@property (nonatomic, strong) NSArray * leftArray; + +@property (nonatomic, strong) NSArray * rightArray; + +@property (nonatomic, assign) NSInteger searchType; + +@property (nonatomic, weak)id sicksLeftDelegate; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllSicksConditionView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllSicksConditionView.m new file mode 100644 index 0000000..b8c0664 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/ConditionsView(条件筛选)/AllSicksConditionView.m @@ -0,0 +1,95 @@ +// +// AllSicksConditionView.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/13. +// + +#import "AllSicksConditionView.h" +#import "FoundRightTableView.h" +#import "FoundLeftTableView.h" + + +@interface AllSicksConditionView () + +@property (nonatomic, strong) FoundLeftTableView * leftTable; + +@property (nonatomic, strong) FoundRightTableView * rightTable; + +@end + +@implementation AllSicksConditionView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + self.backgroundColor = RGBA(0, 0, 0, 0.5); + self.leftTable = [[FoundLeftTableView alloc] initWithFrame:CGRectMake(0, 0, kRealValue(160),kRealValue(300)) style:UITableViewStyleGrouped]; + self.leftTable.leftDelegate = self; + self.leftTable.backgroundColor = UIColorHex(#F3F3F3); + [self addSubview:self.leftTable]; + + self.rightTable = [[FoundRightTableView alloc] initWithFrame:CGRectMake(self.leftTable.right, 0,kScreenWidth - kRealValue(160), kRealValue(300)) style:UITableViewStyleGrouped]; + MJWeakSelf + self.rightTable.rightBlock = ^(NSString * _Nonnull roomID, NSString * _Nonnull roomName) { + if ([weakSelf.sicksLeftDelegate respondsToSelector:@selector(sicksRightAction:)]) { + + [weakSelf.sicksLeftDelegate sicksRightAction:roomID]; + } + }; + + [self addSubview:self.rightTable]; + + +} + +- (void)setLeftArray:(NSArray *)leftArray { + _leftArray = leftArray; + self.leftTable.dataArray = _leftArray; + +} + +- (void)setRightArray:(NSArray *)rightArray { + + _rightArray = rightArray; + + self.rightTable.rightDataArray = _rightArray; +} + +- (void)setSearchType:(NSInteger)searchType { + + _searchType =searchType; + + self.rightTable.searchType = _searchType; + +} +#pragma mark: 左边点击 + +- (void)leftCellAction:(NSInteger)index { + + if ([self.sicksLeftDelegate respondsToSelector:@selector(sicksLeftAction:)]) { + + [self.sicksLeftDelegate sicksLeftAction:index]; + } + + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/BasicHealthInfoView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/BasicHealthInfoView.h new file mode 100644 index 0000000..71c6cae --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/BasicHealthInfoView.h @@ -0,0 +1,16 @@ +// +// BasicHealthInfoView.h +// healthQuestion +// +// Created by 仁康信息 on 2023/5/4. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BasicHealthInfoView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/BasicHealthInfoView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/BasicHealthInfoView.m new file mode 100644 index 0000000..647d89e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/BasicHealthInfoView.m @@ -0,0 +1,70 @@ +// +// BasicHealthInfoView.m +// healthQuestion +// +// Created by 仁康信息 on 2023/5/4. +// + +#import "BasicHealthInfoView.h" + +@implementation BasicHealthInfoView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + + } + + return self; +} + + +- (void)createUI { + + + NSArray * leftArray = @[@"饮食习惯:",@"烟酒习惯:",@"既往史:",@"家族史:",@"过敏史:",@"用药史:"]; + NSArray * rightArray = @[@"重油 重辣 重盐",@"爱抽烟 爱喝酒",@"无",@"高血压,糖尿病",@"花生过敏",@"敌敌畏"]; + + for (int i = 0; i < leftArray.count; i ++) { + + + UILabel * leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(18), kRealValue(20) + 47 * i, 100, 13)]; + leftLabel.text =leftArray[i]; + leftLabel.font = MEDIUMFONT(13); + leftLabel.textAlignment = NSTextAlignmentLeft; + leftLabel.textColor = UIColorHex(#666666); + CGFloat w = [HQCommonUtils getLengthFromText:leftLabel.text andFontSize:13]; + leftLabel.width = w; + [self addSubview:leftLabel]; + + + UILabel * rightLabel = [[UILabel alloc] initWithFrame:CGRectMake(leftLabel.right, leftLabel.top, self.width - leftLabel.right, 13)]; + rightLabel.text =rightArray[i]; + rightLabel.font = MEDIUMFONT(13); + rightLabel.textAlignment = NSTextAlignmentLeft; + rightLabel.textColor = UIColorHex(#333333); + [self addSubview:rightLabel]; + if (i > 0) { + UIView * linView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), 47 * i, self.width - kRealValue(30), 1)]; + linView.backgroundColor = UIColorHex(#E0E0E0); + [self addSubview:linView]; + } + + + } + + +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailTitleView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailTitleView.h new file mode 100644 index 0000000..ea771f7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailTitleView.h @@ -0,0 +1,18 @@ +// +// DetailTitleView.h +// healthQuestion +// +// Created by 仁康信息 on 2023/4/27. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DetailTitleView : UIView + +@property (nonatomic, copy) NSString * timeString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailTitleView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailTitleView.m new file mode 100644 index 0000000..5d79b7c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailTitleView.m @@ -0,0 +1,68 @@ +// +// DetailTitleView.m +// healthQuestion +// +// Created by 仁康信息 on 2023/4/27. +// + +#import "DetailTitleView.h" + +@interface DetailTitleView () + +@property (nonatomic, strong) UILabel * timeLabel; + +@end + +@implementation DetailTitleView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + + UIImageView * headImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.width, 33)]; + headImg.image = IMAGE_NAMED(@"userinfoTitleImg"); + [self addSubview:headImg]; + + UIImageView * leftImg = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(16), 10, 15, 15)]; + leftImg.image = IMAGE_NAMED(@"questionLeft_icon"); + [headImg addSubview:leftImg]; + + UILabel * titleLabel = [[UILabel alloc] init]; + titleLabel.frame = CGRectMake(leftImg.right + kRealValue(7),10 , 80, 14); + titleLabel.textAlignment = NSTextAlignmentLeft; + titleLabel.text = @"咨询人信息"; + titleLabel.font = BOLDSYSTEMFONT(14); + [self addSubview:titleLabel]; + + self.timeLabel = [[UILabel alloc] initWithFrame:CGRectMake( headImg.width/2 - kRealValue(10) , 8 , headImg.width/2 -kRealValue(10) , 15)]; + self.timeLabel.text = @"--"; + self.timeLabel.font = SYSTEMFONT(10); + self.timeLabel.textAlignment = NSTextAlignmentRight; + self.timeLabel.textColor = KWhiteColor; + [headImg addSubview:self.timeLabel]; +} + +- (void)setTimeString:(NSString *)timeString { + + _timeString = timeString; + + self.timeLabel.text = [NSString stringWithFormat:@"生成时间:%@",_timeString]; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailUserInfoView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailUserInfoView.h new file mode 100644 index 0000000..480e6d8 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailUserInfoView.h @@ -0,0 +1,21 @@ +// +// DetailUserInfoView.h +// healthQuestion +// +// Created by 仁康信息 on 2023/4/27. +// + +#import +#import "QuestionDiseaseInfoModel.h" +#import "DoctorReportModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface DetailUserInfoView : UIView + +@property (nonatomic, strong) QuestionDiseaseInfoModel * model; + +@property (nonatomic, strong) DoctorReportFamilyInfoModel * userModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailUserInfoView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailUserInfoView.m new file mode 100644 index 0000000..28f97a7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/DetailUserInfoView.m @@ -0,0 +1,153 @@ +// +// DetailUserInfoView.m +// healthQuestion +// +// Created by 仁康信息 on 2023/4/27. +// + +#import "DetailUserInfoView.h" + +@interface DetailUserInfoView () + + +@end + +@implementation DetailUserInfoView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + + } + + return self; + +} + +- (void)createUI { + + NSArray * array = @[@"",@"",@"",@"",@""]; + //一行的列数 + NSInteger cols = 3; + //label大小 + CGFloat labW = (self.width - kRealValue(40) ) / 3 ; + CGFloat labH = 20; + CGFloat pading = kRealValue(10); + //每一行的间距 + CGFloat rowMargin = kRealValue(20); + for (int i = 0; i < array.count; i ++) { + //所在列 + NSInteger col = i % cols; + //所在行 + NSInteger row = i / cols; + + CGFloat shopX = col * (labW ); + CGFloat shopY = row * (labH + rowMargin); + UILabel * nameLabel = [[UILabel alloc] init]; + nameLabel.frame = CGRectMake( kRealValue(20) + shopX + pading ,kRealValue(23) + shopY, labW, labH); + nameLabel.textAlignment = NSTextAlignmentLeft; + nameLabel.text = array[i]; + nameLabel.font = SYSTEMFONT(13); + nameLabel.tag = 100+ i; + [self addSubview:nameLabel]; + + } + UIView * lineV = [[UIView alloc] initWithFrame:CGRectMake(0, self.height, self.width, 1)]; + lineV.backgroundColor = UIColorHex(#E0E0E0); + [self addSubview:lineV]; +} + +- (void)setModel:(QuestionDiseaseInfoModel *)model { + + _model = model; + + UILabel * namelabel = [self viewWithTag:100] ; + + namelabel.text =[NSString stringWithFormat:@"姓名:%@", _model.name]; + + UILabel * sexlabel = [self viewWithTag:101] ; + if ([_model.gender integerValue] == 1) { + sexlabel.text =[NSString stringWithFormat:@"性别:%@", @"女"]; + + }else + { + sexlabel.text =[NSString stringWithFormat:@"性别:%@", @"男"]; + } + + UILabel * agelabel = [self viewWithTag:102] ; + + agelabel.text = [NSString stringWithFormat:@"年龄:%@岁", _model.age]; + + UILabel * heightlabel = [self viewWithTag:103] ; + + + if (!ValidStr(_model.height)) { + + heightlabel.text =[NSString stringWithFormat:@"身高:%@cm", _model.height]; + }else + { + heightlabel.text =[NSString stringWithFormat:@"身高:%@cm", @"--"]; + } + + UILabel * weightlabel = [self viewWithTag:104] ; + if (!ValidStr(_model.weight)) { + weightlabel.text =[NSString stringWithFormat:@"体重:%@kg", _model.weight]; + }else + { + weightlabel.text =[NSString stringWithFormat:@"体重:%@kg", @"--"]; + } + +} + +- (void)setUserModel:(DoctorReportFamilyInfoModel *)userModel { + + _userModel = userModel; + + UILabel * namelabel = [self viewWithTag:100] ; + + namelabel.text =[NSString stringWithFormat:@"姓名:%@", _userModel.name]; + + UILabel * sexlabel = [self viewWithTag:101] ; + if ([_userModel.gender integerValue] == 1) { + sexlabel.text =[NSString stringWithFormat:@"性别:%@", @"女"]; + + }else + { + sexlabel.text =[NSString stringWithFormat:@"性别:%@", @"男"]; + } + + UILabel * agelabel = [self viewWithTag:102] ; + + agelabel.text = [NSString stringWithFormat:@"年龄:%@岁", _userModel.age]; + + UILabel * heightlabel = [self viewWithTag:103] ; + + if (!ValidStr(_userModel.height)) { + + heightlabel.text =[NSString stringWithFormat:@"身高:%@cm", _userModel.height]; + } + else + { + heightlabel.text =[NSString stringWithFormat:@"身高:%@cm", @"--"]; + } + UILabel * weightlabel = [self viewWithTag:104] ; + if (!ValidStr(_userModel.weight)) { + weightlabel.text =[NSString stringWithFormat:@"体重:%@kg", _userModel.weight]; + } + else + { + weightlabel.text =[NSString stringWithFormat:@"体重:%@kg", @"--"]; + } + + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/FileDataDeatilCenterView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/FileDataDeatilCenterView.h new file mode 100644 index 0000000..70d82c7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/FileDataDeatilCenterView.h @@ -0,0 +1,18 @@ +// +// FileDataDeatilCenterView.h +// healthQuestion +// +// Created by 仁康信息 on 2023/5/4. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FileDataDeatilCenterView : UIView + +@property (nonatomic, assign) CGFloat questionH; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/FileDataDeatilCenterView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/FileDataDeatilCenterView.m new file mode 100644 index 0000000..13d48c5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/FileDataDeatilCenterView.m @@ -0,0 +1,221 @@ +// +// FileDataDeatilCenterView.m +// healthQuestion +// +// Created by 仁康信息 on 2023/5/4. +// + +#import "FileDataDeatilCenterView.h" +#import "QuestionItemTable.h" + +@interface FileDataDeatilCenterView () + +@property (nonatomic, strong) UILabel * firstQuestionLabel; + +@property (nonatomic, strong) UILabel * firstAnswerLabel; + +@property (nonatomic, strong) UILabel * secendQuestionLabel; + +@property (nonatomic, strong) UILabel * secendAnswerLabel; + +@property (nonatomic, strong) UILabel * thirdQuestionLabel; + +@property (nonatomic, strong) UILabel * thirdAnswerLabel; + +@property (nonatomic, strong) UILabel * fourthQuestionLabel; + +@property (nonatomic, strong) UILabel * fourthAnswerLabel; + +@property (nonatomic, strong) UILabel * fifthQuestionLabel; + +@property (nonatomic, strong) UILabel * fifthAnswerLabel; + +@property (nonatomic, strong) UIView * hospatilView; + +@property (nonatomic, strong) UILabel * roomLabel; + +@property (nonatomic, strong) UILabel * disNameLabel; + +@property (nonatomic, strong) UIView * pictureView; + +@property (nonatomic, strong) QuestionItemTable * homeTable; + + +@end + + +@implementation FileDataDeatilCenterView + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + + } + + return self; +} + +- (void)createUI { + + self.backgroundColor = KWhiteColor; + //第一个问题 + self.firstQuestionLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), kRealValue(24), self.width - kRealValue(30), 14)]; + self.firstQuestionLabel.text = @"1.本次问题持续多久了?"; + self.firstQuestionLabel.font = BOLDSYSTEMFONT(14); + self.firstQuestionLabel.textAlignment = NSTextAlignmentLeft; + self.firstQuestionLabel.textColor = UIColorHex(#333333); + [self addSubview:self.firstQuestionLabel]; + + UIView * firstView = [[UIView alloc] initWithFrame:CGRectMake(0, self.firstQuestionLabel.bottom + kRealValue(15), self.width, 35)]; + firstView.backgroundColor = UIColorHex(#EFEFEF); + [self addSubview:firstView]; + + UIView * lineOne = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 3, 35)]; + lineOne.backgroundColor = UIColorHex(#809999); + [firstView addSubview:lineOne]; + + //如果用做展示 + self.firstAnswerLabel = [[UILabel alloc] initWithFrame:CGRectMake(lineOne.right + kRealValue(45), 0, self.width - kRealValue(48), 35)]; + self.firstAnswerLabel.text = @"A 一周内"; + self.firstAnswerLabel.font = MEDIUMFONT(12); + self.firstAnswerLabel.textAlignment = NSTextAlignmentLeft; + self.firstAnswerLabel.textColor = UIColorHex(#333333); + [firstView addSubview:self.firstAnswerLabel]; + + + //第二个问题 + self.secendQuestionLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), firstView.bottom + kRealValue(15), self.width - kRealValue(30), 14)]; + self.secendQuestionLabel.text = @"2.咨询人的问题"; + self.secendQuestionLabel.font = BOLDSYSTEMFONT(14); + self.secendQuestionLabel.textAlignment = NSTextAlignmentLeft; + self.secendQuestionLabel.textColor = UIColorHex(#333333); + [self addSubview:self.secendQuestionLabel]; + + UIView * twoView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(10), self.secendQuestionLabel.bottom + kRealValue(15), self.width - kRealValue(20), 70)]; + twoView.backgroundColor = UIColorHex(#EFEFEF); + twoView.layer.cornerRadius = 10; + twoView.layer.masksToBounds = true; + [self addSubview:twoView]; + + self.secendAnswerLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(25), 11, twoView.width - kRealValue(50), 35)]; + self.secendAnswerLabel.text = @"最近一段时间睡眠不足,总是自己醒"; + self.secendAnswerLabel.numberOfLines = 0; + self.secendAnswerLabel.font = MEDIUMFONT(12); + self.secendAnswerLabel.textAlignment = NSTextAlignmentLeft; + self.secendAnswerLabel.textColor = UIColorHex(#333333); + + self.secendAnswerLabel.height = [HQCommonUtils getSpaceLabelHeight:self.secendAnswerLabel withStr:self.secendAnswerLabel.text withFont:[UIFont systemFontOfSize:12 weight:UIFontWeightMedium] withWidth:twoView.width - kRealValue(50) withLineSpacing:5.0]; + [twoView addSubview:self.secendAnswerLabel]; + //图片 + self.pictureView = [[UIView alloc] initWithFrame:CGRectMake(0, twoView.bottom + kRealValue(12), self.width, 110)]; + [self addSubview: self.pictureView]; + + UILabel * pictureLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(10), 0, 140, 35)]; + pictureLabel.text = @"检查报告或者患处照片"; + pictureLabel.font = MEDIUMFONT(12); + pictureLabel.textAlignment = NSTextAlignmentLeft; + pictureLabel.textColor = UIColorHex(#666666); + [self.pictureView addSubview:pictureLabel]; + + UILabel * showLabel = [[UILabel alloc] initWithFrame:CGRectMake(140, 0, 100, 35)]; + showLabel.text = @"(仅自己和医生可见)"; + showLabel.font = MEDIUMFONT(11); + showLabel.textAlignment = NSTextAlignmentLeft; + showLabel.textColor = UIColorHex(#333333); + [self.pictureView addSubview:showLabel]; + + UILabel * numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.width - 10 - 50, 0, 50, 35)]; + numberLabel.text = @"4/8"; + numberLabel.font = MEDIUMFONT(11); + numberLabel.textAlignment = NSTextAlignmentRight; + numberLabel.textColor = UIColorHex(#333333); + [self.pictureView addSubview:numberLabel]; + + UIScrollView * pictScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(pictureLabel.left, pictureLabel.bottom, self.width - kRealValue(20), 62)]; + [self.pictureView addSubview:pictScrollView]; + + for (int i = 0 ; i < 4; i ++) { + + UIImageView * picView = [[UIImageView alloc] initWithFrame:CGRectMake(66 * i, 0 , 60, 60)]; + picView.backgroundColor = [UIColor greenColor]; + picView.layer.cornerRadius = 5.0; + picView.layer.masksToBounds = true; + [pictScrollView addSubview:picView]; + + } + + //第三个问题 + self.thirdQuestionLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20),self.pictureView.bottom + kRealValue(10), self.width - kRealValue(30), 14)]; + self.thirdQuestionLabel.text = @"3.咨询人是否去医院就诊过?"; + self.thirdQuestionLabel.font = BOLDSYSTEMFONT(14); + self.thirdQuestionLabel.textAlignment = NSTextAlignmentLeft; + self.thirdQuestionLabel.textColor = UIColorHex(#333333); + [self addSubview:self.thirdQuestionLabel]; + + UIView * thirdView = [[UIView alloc] initWithFrame:CGRectMake(0, self.thirdQuestionLabel.bottom + kRealValue(15), self.width, 35)]; + thirdView.backgroundColor = UIColorHex(#EFEFEF); + [self addSubview:thirdView]; + + UIView * linethird = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 3, 35)]; + linethird.backgroundColor = UIColorHex(#809999); + [thirdView addSubview:linethird]; + + self.thirdQuestionLabel = [[UILabel alloc] initWithFrame:CGRectMake(lineOne.right + kRealValue(45), 0, self.width - kRealValue(48), 35)]; + self.thirdQuestionLabel.text = @"A 就诊过"; + self.thirdQuestionLabel.font = MEDIUMFONT(12); + self.thirdQuestionLabel.textAlignment = NSTextAlignmentLeft; + self.thirdQuestionLabel.textColor = UIColorHex(#333333); + [thirdView addSubview:self.thirdQuestionLabel]; + + // + + + + self.hospatilView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(8), thirdView.bottom + kRealValue(16), self.width - kRealValue(16), 67)]; + self.hospatilView.backgroundColor = UIColorHex(#EFEFEF); + self.hospatilView.layer.cornerRadius = 10; + self.hospatilView.layer.masksToBounds = true; + [self addSubview:self.hospatilView]; + + self.roomLabel = [[UILabel alloc] initWithFrame:CGRectMake(lineOne.right + kRealValue(45), kRealValue(12), self.width - kRealValue(48), 13)]; + self.roomLabel.text = @"就诊医院及科室:西京医院神内外科"; + self.roomLabel.font = MEDIUMFONT(12); + self.roomLabel.textAlignment = NSTextAlignmentLeft; + self.roomLabel.textColor = UIColorHex(#333333); + [self.hospatilView addSubview:self.roomLabel]; + + self.disNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(lineOne.right + kRealValue(45), self.roomLabel.bottom + kRealValue(17) , self.width - kRealValue(48), 13)]; + self.disNameLabel.text = @"就诊医院及科室:西京医院神内外科"; + self.disNameLabel.font = MEDIUMFONT(12); + self.disNameLabel.textAlignment = NSTextAlignmentLeft; + self.disNameLabel.textColor = UIColorHex(#333333); + [self.hospatilView addSubview:self.disNameLabel]; + //第4个问题 + self.fourthQuestionLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), self.hospatilView.bottom + kRealValue(21), self.width - kRealValue(30), 14)]; + self.fourthQuestionLabel.text = @"4.咨询人期望得到的帮助?"; + self.fourthQuestionLabel.font = BOLDSYSTEMFONT(14); + self.fourthQuestionLabel.textAlignment = NSTextAlignmentLeft; + self.fourthQuestionLabel.textColor = UIColorHex(#333333); + [self addSubview:self.fourthQuestionLabel]; + + UIView *fourView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(10), self.fourthQuestionLabel.bottom + kRealValue(15), self.width - kRealValue(20), 70)]; + fourView.backgroundColor = UIColorHex(#EFEFEF); + fourView.layer.cornerRadius = 10; + fourView.layer.masksToBounds = true; + [self addSubview:fourView]; + + self.fourthAnswerLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(25), 11, fourView.width - kRealValue(50), 35)]; + self.fourthAnswerLabel.text = @"如何改善睡眠"; + self.fourthAnswerLabel.numberOfLines = 0; + self.fourthAnswerLabel.font = MEDIUMFONT(12); + self.fourthAnswerLabel.textAlignment = NSTextAlignmentLeft; + self.fourthAnswerLabel.textColor = UIColorHex(#333333); + self.fourthAnswerLabel.height = [HQCommonUtils getSpaceLabelHeight:self.secendAnswerLabel withStr:self.secendAnswerLabel.text withFont:[UIFont systemFontOfSize:12 weight:UIFontWeightMedium] withWidth:twoView.width - kRealValue(50) withLineSpacing:5.0]; + [fourView addSubview:self.fourthAnswerLabel]; + + self.questionH = fourView.bottom + kRealValue(20); +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoCollectView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoCollectView.h new file mode 100644 index 0000000..148cacf --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoCollectView.h @@ -0,0 +1,31 @@ +// +// HQPhotoCollectView.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import +#import "HQPhotoPostCollectionViewCell.h" + +NS_ASSUME_NONNULL_BEGIN +@protocol XMPhotoCollectViewProtocol + +- (void)choosePhotoCell:(NSIndexPath *)index withCollectview:(UICollectionView *)collectView withIntab:(NSInteger )tableAtNumber; + +- (void)delectUserChoosePhoto:(NSInteger)indexTag withIntab:(NSInteger )tableAtNumber; + +@end + +@interface HQPhotoCollectView : UICollectionView +@property (nonatomic, strong)NSArray * photoArray; +@property (nonatomic, strong)NSArray * assetArray; +@property (nonatomic, assign)NSInteger tableIndex; +@property (nonatomic, strong) HQPhotoPostCollectionViewCell * photocell; +@property (nonatomic, weak)id photoDelegate; + +@property (nonatomic, assign )BOOL isEdit; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoCollectView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoCollectView.m new file mode 100644 index 0000000..bafe02b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoCollectView.m @@ -0,0 +1,144 @@ +// +// HQPhotoCollectView.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "HQPhotoCollectView.h" + +@interface HQPhotoCollectView() + + + +@end + +@implementation HQPhotoCollectView + +- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout +{ + if (self = [super initWithFrame:frame collectionViewLayout:layout]) + { + [self createUI]; + } + return self; +} +- (void)createUI +{ + self.delegate = self; + self.dataSource = self; + self.backgroundColor = KWhiteColor; + self.showsHorizontalScrollIndicator = NO; + self.alwaysBounceVertical = YES; + self.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; + [self registerClass:[HQPhotoPostCollectionViewCell class] forCellWithReuseIdentifier:@"SDPhotoCell"]; + + +} + +- (void)setPhotoArray:(NSArray *)photoArray +{ + _photoArray = photoArray; + [self reloadData]; +} +- (void)setAssetArray:(NSArray *)assetArray +{ + _assetArray = assetArray; + [self reloadData]; +} + +- (void)setIsEdit:(BOOL)isEdit { + + _isEdit = isEdit; + [self reloadData]; +} + +- (void)setPhotoDelegate:(id)photoDelegate { + + _photoDelegate = photoDelegate; + [self reloadData]; +} + + +#pragma mark UICollectionView delegate 与 datasource +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + + return self.photoArray.count + 1; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + + HQPhotoPostCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"SDPhotoCell" forIndexPath:indexPath]; + cell.imageView.image = [UIImage imageNamed:@"add"]; + + if (indexPath.row == self.photoArray.count) { + if (self.photoArray.count == 9 ) + { + cell.imageView.hidden = YES; + } + + cell.deleteBtn.hidden = YES; + } + else + { + + if ([self.photoArray[indexPath.row] isKindOfClass:[NSString class]]) { + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,self.photoArray[indexPath.row]]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [cell.imageView sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:PLACEHOLD_IMG]; + + if (self.isEdit == true) { + cell.deleteBtn.hidden = false; + } + else + { + cell.deleteBtn.hidden = true; + } + + }else + { + cell.imageView.image = self.photoArray[indexPath.row]; + } +// + cell.asset = self.assetArray[indexPath.row]; + if (self.isEdit == true) { + cell.deleteBtn.hidden = false; + } + else + { + cell.deleteBtn.hidden = true; + } + } + cell.deleteBtn.tag = indexPath.row+10; + self.photocell = cell; + [cell.deleteBtn addTarget:self action:@selector(deleteBtnClik:) forControlEvents:UIControlEventTouchUpInside]; + + return cell; +} + +- (void)deleteBtnClik:(UIButton *)prictureBtn +{ + + if ([self.photoDelegate respondsToSelector:@selector(delectUserChoosePhoto: withIntab:)]) + { + [self.photoDelegate delectUserChoosePhoto:prictureBtn.tag-10 withIntab:self.tableIndex]; + } +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + + if ([self.photoDelegate respondsToSelector:@selector(choosePhotoCell: withCollectview: withIntab:)]) + { + [self.photoDelegate choosePhotoCell:indexPath withCollectview:self withIntab:self.tableIndex]; + } + +} +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoPostCollectionViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoPostCollectionViewCell.h new file mode 100644 index 0000000..4c522a4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoPostCollectionViewCell.h @@ -0,0 +1,27 @@ +// +// HQPhotoPostCollectionViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HQPhotoPostCollectionViewCell : UICollectionViewCell + +@property (nonatomic, strong) UIImageView *imageView; + +@property (nonatomic, strong) UIButton *deleteBtn; + +@property (nonatomic, assign) NSInteger row; + +@property (nonatomic, strong) id asset; + + +- (UIView *)snapshotView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoPostCollectionViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoPostCollectionViewCell.m new file mode 100644 index 0000000..8b84803 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/HQPhotoPostCollectionViewCell.m @@ -0,0 +1,73 @@ +// +// HQPhotoPostCollectionViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "HQPhotoPostCollectionViewCell.h" +#import +#import +//#import "TZImagePickerController/TZImagePickerController.h" + + +@implementation HQPhotoPostCollectionViewCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + _imageView = [[UIImageView alloc] init]; + _imageView.contentMode = UIViewContentModeScaleAspectFill; + _imageView.userInteractionEnabled = YES; + [self addSubview:_imageView]; + self.clipsToBounds = YES; + + + _deleteBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + [_deleteBtn setImage:[UIImage imageNamed:@"delect"] forState:UIControlStateNormal]; + _deleteBtn.frame = CGRectMake(self.width - 20, -5, 20, 20); + [self addSubview:_deleteBtn]; + + } + return self; +} +- (void)layoutSubviews { + [super layoutSubviews]; + _imageView.frame = self.bounds; + +} + +- (void)setAsset:(id)asset { + _asset = asset; +} + +- (void)setRow:(NSInteger)row { + _row = row; + _deleteBtn.tag = row; +} + + +- (UIView *)snapshotView { + UIView *snapshotView = [[UIView alloc]init]; + + UIView *cellSnapshotView = nil; + if ([self respondsToSelector:@selector(snapshotViewAfterScreenUpdates:)]) { + cellSnapshotView = [self snapshotViewAfterScreenUpdates:NO]; + } else { + CGSize size = CGSizeMake(self.bounds.size.width + 20, self.bounds.size.height + 20); + UIGraphicsBeginImageContextWithOptions(size, self.opaque, 0); + [self.layer renderInContext:UIGraphicsGetCurrentContext()]; + UIImage * cellSnapshotImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + cellSnapshotView = [[UIImageView alloc]initWithImage:cellSnapshotImage]; + } + + snapshotView.frame = CGRectMake(0, 0, cellSnapshotView.frame.size.width, cellSnapshotView.frame.size.height); + cellSnapshotView.frame = CGRectMake(0, 0, cellSnapshotView.frame.size.width, cellSnapshotView.frame.size.height); + + [snapshotView addSubview:cellSnapshotView]; + return snapshotView; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTable.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTable.h new file mode 100644 index 0000000..4ff485b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTable.h @@ -0,0 +1,26 @@ +// +// QuestionItemTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import +#import "QuestionItemTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN +@protocol questionOneProtocol + +- (void)questionOneSelectedResult:(NSString *)result; + +@end + +@interface QuestionItemTable : UITableView + +@property (nonatomic , strong) NSArray * dataArray; + +@property (nonatomic, weak)id questionOneDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTable.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTable.m new file mode 100644 index 0000000..3d53309 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTable.m @@ -0,0 +1,134 @@ +// +// QuestionItemTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "QuestionItemTable.h" + +@interface QuestionItemTable () + +@end + +@implementation QuestionItemTable + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { + + if (self = [super initWithFrame:frame style:style]) { + + [self createUI]; + } + return self; +} + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; +} + +- (void)setDataArray:(NSArray *)dataArray { + + _dataArray = dataArray; + [self reloadData]; +} + +- (void)setQuestionOneDelegate:(id)questionOneDelegate { + + _questionOneDelegate = questionOneDelegate; + +} + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return self.dataArray.count; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + return 35; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + static NSString * cellID = @"cellID"; + + QuestionItemTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[QuestionItemTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.model = self.dataArray[indexPath.row]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + QuestionItemModel * model = self.dataArray[indexPath.row]; + + for (QuestionItemModel * subModel in self.dataArray ) { + + if (subModel == model) { + subModel.IsSelected = YES; + }else + { + subModel.IsSelected = NO; + } + } + + if ([self.questionOneDelegate respondsToSelector:@selector(questionOneSelectedResult:)]) { + + [self.questionOneDelegate questionOneSelectedResult:model.Title]; + } + + [self reloadData]; + +} + + + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + + + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTableViewCell.h new file mode 100644 index 0000000..fba3520 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTableViewCell.h @@ -0,0 +1,19 @@ +// +// QuestionItemTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import +#import "QuestionItemModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionItemTableViewCell : UITableViewCell + +@property (nonatomic, strong) QuestionItemModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTableViewCell.m new file mode 100644 index 0000000..a46e0f6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/QuestionItemTableViewCell.m @@ -0,0 +1,108 @@ +// +// QuestionItemTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "QuestionItemTableViewCell.h" + +@interface QuestionItemTableViewCell () + +@property (nonatomic, strong) UIView * backView; +@property (nonatomic, strong) UIView * lineView; +@property (nonatomic, strong) UILabel * itemLabel; +@property (nonatomic, strong) UIButton * selectBtn; + +@end + +@implementation QuestionItemTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.backView = [[UIView alloc] init]; + [self.contentView addSubview:self.backView]; + + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_offset(0); + make.top.mas_offset(0); + make.height.mas_offset(35); + }]; + + self.lineView = [[UIView alloc] init]; + self.lineView.backgroundColor = UIColorHex(#21BEBD); + [self.backView addSubview:self.lineView]; + + [self.lineView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(0); + make.width.mas_offset(3); + make.top.bottom.mas_offset(0); + }]; + + self.itemLabel = [[UILabel alloc] init]; + self.itemLabel.textColor = CFontColor1; + self.itemLabel.font = MEDIUMFONT(12); + self.itemLabel.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.itemLabel]; + + [self.itemLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(@45); + make.top.bottom.mas_offset(0); + make.right.mas_offset(-15); + }]; + [self.itemLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.selectBtn = [[UIButton alloc] init]; + [self.backView addSubview:self.selectBtn ]; + + [self.selectBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-23); + make.top.mas_offset(10); + make.height.width.mas_offset(14); + }]; + + + +} + +- (void)setModel:(QuestionItemModel *)model { + + _model = model; + + self.itemLabel.text = model.Title; + + if (_model.IsSelected == YES) { + + [self.selectBtn setImage:[UIImage imageNamed:@"physcialType_selected"] forState:UIControlStateNormal]; + self.lineView.hidden = false; + self.backView.backgroundColor = RGBA(33, 190, 189, 0.5); + }else + { + [self.selectBtn setImage:[UIImage imageNamed:@"physcialType_nomal"] forState:UIControlStateNormal]; + self.lineView.hidden = true; + self.backView.backgroundColor = KClearColor; + } +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/SelectedFileDateCenterView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/SelectedFileDateCenterView.h new file mode 100644 index 0000000..3ec7ce9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/SelectedFileDateCenterView.h @@ -0,0 +1,49 @@ +// +// SelectedFileDateCenterView.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import +#import "QuestionItemTable.h" +#import "UIPlaceHolderTextView.h" +#import "HQPhotoCollectView.h" +#import "LookFileDataModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SelectedFileDateCenterView : UIView + +@property (nonatomic, strong) LookFileDataModel * model; +@property (nonatomic, assign) CGFloat questionH; +@property (nonatomic, strong)NSArray * photoArray; +@property (nonatomic, strong)NSArray * assetArray; + +@property (nonatomic, weak)id questionOneDelegate; +@property (nonatomic, strong) UIPlaceHolderTextView * inputQuestion1View; +@property (nonatomic, strong) UIPlaceHolderTextView * helpInputView; +@property (nonatomic, weak)id photoDelegate; + +@property (nonatomic, strong) UITextField * fileNameField; +@property (nonatomic, assign) NSInteger chixuTime;//患病时间1一周内2一月内3半年内4半年以上 +@property (nonatomic, strong) UITextField * hospitalField; +@property (nonatomic, strong) UITextField * sicksField; + +//是否点击了 就诊选择 +@property (nonatomic, assign) BOOL jiuzhenIsAction; +//是否点击了 查看报告 +@property (nonatomic, assign) BOOL reportIsAction; +//是否点击了 查看健康 +@property (nonatomic, assign) BOOL healthIsAction; + +@property (nonatomic, assign) BOOL jiuzhenSelected; +@property (nonatomic, assign) BOOL reportSelected; +@property (nonatomic, assign) BOOL healthSelected; + +@property (nonatomic, assign) BOOL isEdit; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/SelectedFileDateCenterView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/SelectedFileDateCenterView.m new file mode 100644 index 0000000..9f39fe4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DataDetail(档案详情)/SelectedFileDateCenterView.m @@ -0,0 +1,618 @@ +// +// SelectedFileDateCenterView.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/19. +// + +#import "SelectedFileDateCenterView.h" +#import "QuestionItemModel.h" +#import "HQPhotoCollectView.h" + +#define marginEdge 12 +#define imageWidth 60 +#define imageHeight 60 +@interface SelectedFileDateCenterView () + +@property (nonatomic, strong) UILabel * firstQuestionLabel; + +@property (nonatomic, strong) UILabel * firstAnswerLabel; + +@property (nonatomic, strong) UILabel * secendQuestionLabel; + +@property (nonatomic, strong) UILabel * secendAnswerLabel; + +@property (nonatomic, strong) YYLabel * thirdQuestionLabel; + +@property (nonatomic, strong) UILabel * thirdAnswerLabel; + +@property (nonatomic, strong) UILabel * fourthQuestionLabel; + +@property (nonatomic, strong) UILabel * fourthAnswerLabel; + +@property (nonatomic, strong) UILabel * fifthQuestionLabel; + +@property (nonatomic, strong) UILabel * fifthAnswerLabel; + +@property (nonatomic, strong) UIView * hospatilView; + +@property (nonatomic, strong) UILabel * roomLabel; + +@property (nonatomic, strong) UILabel * disNameLabel; + +@property (nonatomic, strong) UILabel * numberLabel; + + +@property (nonatomic, strong) UIView * pictureView; +@property (nonatomic, strong) UIView * eigLine; +@property (nonatomic, strong) UIView * linejiben; +@property (nonatomic, strong) UIView * eigView; +@property (nonatomic, strong) UIView * jibenView; + +@property (nonatomic, strong) UIView *fiveView; +@property (nonatomic, strong) UIView *linefive; +@property (nonatomic, strong) UIView *sixLine; +@property (nonatomic, strong) UIView *sixView; +@property (nonatomic, strong) UIView *thirdView; +@property (nonatomic, strong) UIView *foureViewLine; +@property (nonatomic, strong) UIView * linethird; +@property (nonatomic, strong) UIView * foureView; + +@property (nonatomic, strong) UIView * qidaiView; +@property (nonatomic, strong) UIView * reportView; + +@property (nonatomic, strong) QuestionItemTable * homeTable; + + +@property (nonatomic, strong) HQPhotoCollectView * collectView; + +@property (nonatomic, strong) UIButton * oneUpButton; +@property (nonatomic, strong) UIButton * oneDownButton; +@property (nonatomic, strong) UIButton * twoUpButton; +@property (nonatomic, strong) UIButton * twoDownButton; +@property (nonatomic, strong) UIButton * threeUpButton; +@property (nonatomic, strong) UIButton * threeDownButton; + + + +@end + + +@implementation SelectedFileDateCenterView + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + self.jiuzhenIsAction = NO; + self.reportIsAction = NO; + self.healthIsAction = NO; + [self createUI]; + + } + + return self; +} + +- (void)createUI { + + self.backgroundColor = KWhiteColor; + + //档案名称 + UILabel * fileName = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), kRealValue(24), self.width - kRealValue(30), 14)]; + fileName.text = @"1.档案名称"; + fileName.font = BOLDSYSTEMFONT(14); + fileName.textAlignment = NSTextAlignmentLeft; + fileName.textColor = UIColorHex(#333333); + [self addSubview:fileName]; + + self.fileNameField = [[UITextField alloc] initWithFrame:CGRectMake(kRealValue(20), fileName.bottom + kRealValue(16), self.width - kRealValue(40), 44)]; + self.fileNameField.backgroundColor = UIColorHex(#EFEFEF); + self.fileNameField.placeholder = @"请输入您的档案名称便于您的理解使用"; + self.fileNameField.layer.cornerRadius = 10; + self.fileNameField.layer.masksToBounds = YES; + self.fileNameField.font = MEDIUMFONT(14); + UIView *leftView = [[UIView alloc] init]; + leftView.width = 10; + self.fileNameField.leftViewMode = UITextFieldViewModeAlways; + self.fileNameField.leftView = leftView; + [self addSubview:self.fileNameField]; + + + //第一个问题 + self.firstQuestionLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), self.fileNameField.bottom + kRealValue(22), self.width - kRealValue(30), 14)]; + self.firstQuestionLabel.text = @"2.本次问题持续多久了?"; + self.firstQuestionLabel.font = BOLDSYSTEMFONT(14); + self.firstQuestionLabel.textAlignment = NSTextAlignmentLeft; + self.firstQuestionLabel.textColor = UIColorHex(#333333); + [self addSubview:self.firstQuestionLabel]; + + //如果选择 + NSArray * array = @[@{@"Title":@"A 一周内",@"IsSelected":@NO},@{@"Title":@"B 一个月内",@"IsSelected":@NO},@{@"Title":@"C 半年内",@"IsSelected":@NO},@{@"Title":@"D 半年以上",@"IsSelected":@NO}]; + NSMutableArray * modelArray = [[NSMutableArray alloc] init]; + for (NSDictionary * parmDic in array) { + + QuestionItemModel * model = [QuestionItemModel modelWithDictionary:parmDic]; + + [modelArray addObject:model]; + } + + self.homeTable = [[QuestionItemTable alloc] initWithFrame:CGRectMake(0, self.firstQuestionLabel.bottom + kRealValue(10), self.width, 35 * 4) style:UITableViewStylePlain]; + self.homeTable.dataArray = modelArray; + self.homeTable.questionOneDelegate = self; + self.homeTable.scrollEnabled = YES; + [self addSubview:self.homeTable]; + + + + //第二个问题 + self.secendQuestionLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), self.homeTable.bottom + kRealValue(15), self.width - kRealValue(30), 14)]; + self.secendQuestionLabel.text = @"3.请描述您的问题"; + self.secendQuestionLabel.font = BOLDSYSTEMFONT(14); + self.secendQuestionLabel.textAlignment = NSTextAlignmentLeft; + self.secendQuestionLabel.textColor = UIColorHex(#333333); + [self addSubview:self.secendQuestionLabel]; + + + self.inputQuestion1View = [[UIPlaceHolderTextView alloc] initWithFrame:CGRectMake(kRealValue(20), self.secendQuestionLabel.bottom + kRealValue(17), self.width - kRealValue(40) , 120)]; + self.inputQuestion1View.backgroundColor = UIColorHex(#F3F3F5); + self.inputQuestion1View.layer.cornerRadius = 10; + self.inputQuestion1View.layer.masksToBounds = true; +// self.inputQuestion1View.placeholder = @""; + self.inputQuestion1View.font = MEDIUMFONT(12); + [self addSubview:self.inputQuestion1View]; + //图片 + self.pictureView = [[UIView alloc] initWithFrame:CGRectMake(0, self.inputQuestion1View.bottom + kRealValue(12), self.width, 110)]; + [self addSubview: self.pictureView]; + + UILabel * pictureLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(10), 0, 165, 35)]; + pictureLabel.text = @"上传检查报告或者患处照片"; + pictureLabel.font = MEDIUMFONT(12); + pictureLabel.textAlignment = NSTextAlignmentLeft; + pictureLabel.textColor = UIColorHex(#666666); + [self.pictureView addSubview:pictureLabel]; + + UILabel * showLabel = [[UILabel alloc] initWithFrame:CGRectMake(155, 0, 100, 35)]; + showLabel.text = @"(仅自己和医生可见)"; + showLabel.font = MEDIUMFONT(11); + showLabel.textAlignment = NSTextAlignmentLeft; + showLabel.textColor = UIColorHex(#333333); + [self.pictureView addSubview:showLabel]; + + UILabel * numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.width - 10 - 50, 0, 50, 35)]; + numberLabel.text = @"0/9"; + numberLabel.font = MEDIUMFONT(11); + numberLabel.textAlignment = NSTextAlignmentRight; + numberLabel.textColor = UIColorHex(#333333); + self.numberLabel = numberLabel; + [self.pictureView addSubview:numberLabel]; + + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.itemSize = CGSizeMake(imageWidth, imageHeight); + layout.minimumInteritemSpacing = marginEdge; + layout.minimumLineSpacing = marginEdge; + layout.scrollDirection=UICollectionViewScrollDirectionHorizontal; + layout.sectionInset=UIEdgeInsetsMake(10, 0, marginEdge, 0); + + self.collectView = [[HQPhotoCollectView alloc] initWithFrame:CGRectMake(pictureLabel.left, pictureLabel.bottom, self.width - kRealValue(20), 84) collectionViewLayout:layout]; + [self.pictureView addSubview:self.collectView]; + + //第三个问题 + self.thirdQuestionLabel = [[YYLabel alloc] initWithFrame:CGRectMake(kRealValue(20),self.pictureView.bottom + kRealValue(10), self.width - kRealValue(30), 14)]; + self.thirdQuestionLabel.text = @"4.咨询人是否去医院就诊过?"; + self.thirdQuestionLabel.font = BOLDSYSTEMFONT(14); + self.thirdQuestionLabel.textAlignment = NSTextAlignmentLeft; + self.thirdQuestionLabel.textColor = UIColorHex(#333333); + [self addSubview:self.thirdQuestionLabel]; + + UIView * thirdView = [[UIView alloc] initWithFrame:CGRectMake(0, self.thirdQuestionLabel.bottom + kRealValue(15), self.width, 35)]; + self.thirdView = thirdView; + thirdView.backgroundColor = KClearColor; + [self addSubview:thirdView]; + + UIView * linethird = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 3, 35)]; + linethird.backgroundColor =KClearColor; + self.linethird = linethird; + self.linethird.hidden = YES; + [thirdView addSubview:linethird]; + + UIButton * oneUpBtn = [[UIButton alloc] initWithFrame:CGRectMake(thirdView.right - 23 - 14, 10, 14, 14)]; + [oneUpBtn setImage:[UIImage imageNamed:@"physcialType_selected"] forState:UIControlStateSelected]; + [oneUpBtn setImage:[UIImage imageNamed:@"physcialType_nomal"] forState:UIControlStateNormal]; + self.oneUpButton = oneUpBtn; + oneUpBtn.selected = false; + [thirdView addSubview:oneUpBtn]; + + YYLabel * quguoLabel = [[YYLabel alloc] initWithFrame:CGRectMake(linethird.right + kRealValue(25), 0, self.width - kRealValue(48), 35)]; + quguoLabel.text = @"A 就诊过"; + quguoLabel.font = MEDIUMFONT(12); + quguoLabel.textAlignment = NSTextAlignmentLeft; + quguoLabel.textColor = UIColorHex(#333333);\ + [quguoLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + [self questionHospatial]; + }]; + [thirdView addSubview:quguoLabel]; + + +// + UIView * foureView = [[UIView alloc] initWithFrame:CGRectMake(0, thirdView.bottom, self.width, 35)]; + foureView.backgroundColor = KClearColor; + self.foureView = foureView; + [self addSubview:foureView]; + + UIView * foureViewLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 3, 35)]; + foureViewLine.backgroundColor = UIColorHex(#21BEBD); + foureViewLine.hidden = YES; + self.foureViewLine = foureViewLine; + [foureView addSubview:foureViewLine]; + + UIButton * oneDownBtn = [[UIButton alloc] initWithFrame:CGRectMake(thirdView.right - 23 - 14 , 10, 14, 14)]; + [oneDownBtn setImage:[UIImage imageNamed:@"physcialType_selected"] forState:UIControlStateSelected]; + [oneDownBtn setImage:[UIImage imageNamed:@"physcialType_nomal"] forState:UIControlStateNormal]; + oneDownBtn.selected = false; + self.oneDownButton = oneDownBtn; + [foureView addSubview:oneDownBtn]; + + YYLabel * meiLabel = [[YYLabel alloc] initWithFrame:CGRectMake(linethird.right + kRealValue(25), 0, self.width - kRealValue(48), 35)]; + meiLabel.text = @"B 没就诊过"; + meiLabel.font = MEDIUMFONT(12); + meiLabel.textAlignment = NSTextAlignmentLeft; + meiLabel.textColor = UIColorHex(#333333); + [foureView addSubview:meiLabel]; + [meiLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + [self meiJiuzhengAction]; + }]; + + + + self.hospatilView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(8), foureView.bottom, self.width - kRealValue(16), 80)]; + self.hospatilView.backgroundColor = UIColorHex(#EFEFEF); + self.hospatilView.layer.cornerRadius = 10; + self.hospatilView.layer.masksToBounds = true; + self.hospatilView.hidden = YES; + [self addSubview:self.hospatilView]; +// + + + UIView * hospitalLeft = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(10),10, 100, 25)]; + hospitalLeft.backgroundColor = UIColorHex(#EFEFEF); + self.roomLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0,100, 25)]; + self.roomLabel.text = @"就诊医院及科室:"; + self.roomLabel.font = MEDIUMFONT(12); + self.roomLabel.textAlignment = NSTextAlignmentLeft; + self.roomLabel.textColor = UIColorHex(#333333); + self.roomLabel.backgroundColor = UIColorHex(#EFEFEF); + [hospitalLeft addSubview:self.roomLabel]; + [self.hospatilView addSubview:hospitalLeft]; + UIView * yiyuanLeft = [[UIView alloc] initWithFrame:CGRectMake(0,10, kRealValue(8), 25)]; + yiyuanLeft.backgroundColor = KClearColor; + + self.hospitalField = [[UITextField alloc] initWithFrame:CGRectMake(self.roomLabel.right + kRealValue(8), kRealValue(10), self.hospatilView.width - kRealValue(20) - 100, 25)]; + self.hospitalField.leftViewMode = UITextFieldViewModeAlways; +// self.hospitalField.leftView = hospitalLeft; + self.hospitalField.font = MEDIUMFONT(12); + self.hospitalField.backgroundColor = KWhiteColor; + self.hospitalField.leftView.backgroundColor = UIColorHex(#333333); + self.hospitalField.layer.cornerRadius = 10; + self.hospitalField.layer.masksToBounds = true; + self.hospitalField.leftView = yiyuanLeft; + [self.hospatilView addSubview:self.hospitalField]; +// + UIView * roomLeft = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(10), self.roomLabel.bottom + kRealValue(20), 100, 25)]; + roomLeft.backgroundColor = UIColorHex(#EFEFEF); + self.disNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0 , 100, 25)]; + self.disNameLabel.text = @"诊断的疾病名:"; + self.disNameLabel.font = MEDIUMFONT(12); + self.disNameLabel.textAlignment = NSTextAlignmentLeft; + self.disNameLabel.textColor = UIColorHex(#333333); + self.disNameLabel.backgroundColor = UIColorHex(#EFEFEF); + + UIView * keshiLeft = [[UIView alloc] initWithFrame:CGRectMake(0,10, kRealValue(8), 25)]; + keshiLeft.backgroundColor = KClearColor; + + [roomLeft addSubview:self.disNameLabel]; + [self.hospatilView addSubview:roomLeft]; + + self.sicksField = [[UITextField alloc] initWithFrame:CGRectMake(self.roomLabel.right + kRealValue(8), self.roomLabel.bottom + kRealValue(20), self.hospatilView.width - kRealValue(20)-100, 25)]; + self.sicksField.leftViewMode = UITextFieldViewModeAlways; + self.sicksField.backgroundColor = KWhiteColor; + self.sicksField.leftView.backgroundColor = UIColorHex(#333333); + self.sicksField.layer.cornerRadius = 10; + self.sicksField.layer.masksToBounds = true; + self.sicksField.font = MEDIUMFONT(12); + self.sicksField.leftView = keshiLeft; + [self.hospatilView addSubview:self.sicksField]; + +// //第4个问题 + + self.qidaiView = [[UIView alloc] initWithFrame:CGRectMake(0, self.foureView.bottom + kRealValue(21), self.width, 14 + 120 + kRealValue(15))]; + [self addSubview:self.qidaiView]; + + self.fourthQuestionLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(20), 0, self.width - kRealValue(30), 14)]; + self.fourthQuestionLabel.text = @"5.期望得到的帮助?"; + self.fourthQuestionLabel.font = BOLDSYSTEMFONT(14); + self.fourthQuestionLabel.textAlignment = NSTextAlignmentLeft; + self.fourthQuestionLabel.textColor = UIColorHex(#333333); + [self.qidaiView addSubview:self.fourthQuestionLabel]; + + + self.helpInputView = [[UIPlaceHolderTextView alloc] initWithFrame:CGRectMake(kRealValue(20), self.fourthQuestionLabel.bottom + kRealValue(15), self.width - kRealValue(40), 120)]; + self.helpInputView.placeholder = @"请输入您的诉求"; + self.helpInputView.font = MEDIUMFONT(12); + self.helpInputView.backgroundColor = UIColorHex(#F3F3F5); + self.helpInputView.layer.cornerRadius = 10; + self.helpInputView.layer.masksToBounds = true; + self.helpInputView.textColor = UIColorHex(#333333); + self.helpInputView.delegate = self; + [self.qidaiView addSubview:self.helpInputView]; + // 第5个问题。 青海项目不需要 + + self.reportView = [[UIView alloc] initWithFrame:CGRectMake(0, self.qidaiView.bottom + kRealValue(21), self.width, 28 + 140 + kRealValue(30) )]; + [self addSubview:self.reportView]; + + + self.reportView.height = kRealValue(15); + + self.questionH = self.reportView.bottom + kRealValue(10); +} + +- (void)setPhotoArray:(NSArray *)photoArray { + + _photoArray = photoArray; + self.numberLabel.text = [NSString stringWithFormat:@"%lu/9",(unsigned long)_photoArray.count]; + + _collectView.photoArray = _photoArray; +// _collectView.contentSize = CGSizeMake(_photoArray.count * 60, 84); +} + +- (void)setQuestionOneDelegate:(id)questionOneDelegate { + + _questionOneDelegate = questionOneDelegate; + + self.homeTable.questionOneDelegate = _questionOneDelegate; + +} + +- (void)setPhotoDelegate:(id)photoDelegate { + + _photoDelegate = photoDelegate; + + self.collectView.photoDelegate = _photoDelegate; + +} + +- (void)setIsEdit:(BOOL)isEdit { + + _isEdit = isEdit; + + self.collectView.isEdit = _isEdit; + +} + +#pragma mark:健康信息点击 +- (void)healthInfoAction { + + self.healthIsAction= YES; + self.healthSelected = false; + + self.eigLine.hidden = false; + self.linejiben.hidden = YES; + self.threeUpButton.selected = false; + self.threeDownButton.selected = YES; + self.eigView.backgroundColor = RGBA(33, 190, 189, 0.5); + self.jibenView.backgroundColor = KClearColor; +} + +- (void)healthInfoUpAction { + + self.healthIsAction= YES; + self.healthSelected = YES; + + self.eigLine.hidden = YES; + self.linejiben.hidden = false; + self.threeUpButton.selected = YES; + self.threeDownButton.selected = false; + self.jibenView.backgroundColor = RGBA(33, 190, 189, 0.5); + self.eigView.backgroundColor = KClearColor; +} +//第五个问题 +- (void)questionFive { + + self.reportSelected = true; + self.reportIsAction = YES; + + self.linefive.hidden = false; + self.sixLine.hidden = YES; + self.fiveView.backgroundColor = RGBA(33, 190, 189, 0.5); + self.sixView.backgroundColor = KClearColor; + self.twoUpButton.selected = YES; + self.twoDownButton.selected = false; +} + +- (void)questionFiveNo { + + self.reportSelected = false; + self.reportIsAction = YES; + + self.linefive.hidden = YES; + self.sixLine.hidden = false; + self.sixView.backgroundColor = RGBA(33, 190, 189, 0.5); + self.fiveView.backgroundColor = KClearColor; + self.twoDownButton.selected = YES; + self.twoUpButton.selected = false; +} + +- (void)questionHospatial { + + self.jiuzhenSelected = true; + self.jiuzhenIsAction = YES; + + self.thirdView.backgroundColor = RGBA(33, 190, 189, 0.5); + self.foureView.backgroundColor = KClearColor; + self.linethird.hidden = false; + self.foureViewLine.hidden = YES; + self.oneUpButton.selected = YES; + self.oneDownButton.selected = false; + self.hospatilView.hidden = false; + self.qidaiView.frame = CGRectMake(0, self.hospatilView.bottom + kRealValue(21), self.width , 14 + self.helpInputView.bottom + kRealValue(15)); + self.reportView.frame = CGRectMake(0, self.qidaiView.bottom + kRealValue(21), self.width, 28 + 140 + kRealValue(30) ); + self.reportView.height = self.sixView.bottom + kRealValue(10); + self.questionH = self.reportView.bottom + kRealValue(10); + KPostNotification(@"FrameChage", @(self.questionH)); + +} + +- (void)meiJiuzhengAction { + + self.jiuzhenSelected = false; + self.jiuzhenIsAction = YES; + + self.foureView.backgroundColor = RGBA(33, 190, 189, 0.5); + self.thirdView.backgroundColor = KClearColor; + self.linethird.hidden = true; + self.foureViewLine.hidden = false; + self.oneUpButton.selected = false; + self.oneDownButton.selected = true; + self.hospatilView.hidden = true; + self.qidaiView.frame = CGRectMake(0, self.foureView.bottom + kRealValue(21), self.width, 14 + self.helpInputView.bottom + kRealValue(15)); + self.reportView.frame = CGRectMake(0, self.qidaiView.bottom + kRealValue(21), self.width, 28 + 140 + kRealValue(30) ); + self.reportView.height = self.sixView.bottom + kRealValue(10); + self.questionH = self.reportView.bottom + kRealValue(10); + KPostNotification(@"FrameChage", @(self.questionH)); +} + +- (void)setModel:(LookFileDataModel *)model { + + _model = model; + + + [self createHaveTimeView:[_model.haveTime integerValue]]; + + self.fileNameField.text = _model.recordsName; + self.inputQuestion1View.text = _model.medicalDescribe; + self.helpInputView.text = _model.desire; + [self adjustTextViewHeightToFitText:self.helpInputView.text]; + NSArray * imageArray = [_model.image componentsSeparatedByString:@","]; + self.collectView.photoArray = imageArray; + if ([_model.tfLook integerValue] == 1) // 1 就诊过 + { + [self questionHospatial]; + self.hospitalField.text = _model.lookOffice; + self.sicksField.text = _model.lookMedicalName; + + } + if ([_model.tfLook integerValue] == 0) // 1 就诊过 + { + [self meiJiuzhengAction]; + } + + + if ([_model.tfPermission integerValue] == 1) // 1 体检报告 + { + [self questionFive]; + + + } + if ([_model.tfPermission integerValue] == 0) // 1 体检报告 + { + [self questionFiveNo]; + } + +} +- (void)textViewDidChange:(UITextView *)textView { + [self adjustTextViewHeightToFitText:textView.text]; + self.qidaiView.height = textView.bottom + kRealValue(20); + self.questionH = self.qidaiView.bottom + kRealValue(10); + KPostNotification(@"FrameChage", @(self.questionH)); +} + +- (void)adjustTextViewHeightToFitText:(NSString *)text { + self.helpInputView.text = text; + + if (text.length == 0) { + // Set default height when there's no content + CGRect defaultFrame = self.helpInputView.frame; + defaultFrame.size.height = 120; + self.helpInputView.frame = defaultFrame; + } else { + CGSize maxSize = CGSizeMake(self.helpInputView.frame.size.width, CGFLOAT_MAX); + CGRect textRect = [text boundingRectWithSize:maxSize + options:NSStringDrawingUsesLineFragmentOrigin + attributes:@{NSFontAttributeName:self.helpInputView.font} + context:nil]; + + // Adjust the UITextView frame based on calculated text height + CGRect newFrame = self.helpInputView.frame; + newFrame.size.height = textRect.size.height + self.helpInputView.textContainerInset.top + self.helpInputView.textContainerInset.bottom; + if (newFrame.size.height > 120) { + + }else + { + newFrame.size.height = 120 + self.helpInputView.textContainerInset.top + self.helpInputView.textContainerInset.bottom; + } + self.helpInputView.frame = newFrame; + } +} + +- (void)createHaveTimeView:(NSInteger)type { + + switch (type) { + case 1: + { + NSArray * array = @[@{@"Title":@"A 一周内",@"IsSelected":@YES},@{@"Title":@"B 一个月内",@"IsSelected":@NO},@{@"Title":@"C 半年内",@"IsSelected":@NO},@{@"Title":@"D 半年以上",@"IsSelected":@NO}]; + NSMutableArray * modelArray = [[NSMutableArray alloc] init]; + for (NSDictionary * parmDic in array) { + + QuestionItemModel * model = [QuestionItemModel modelWithDictionary:parmDic]; + + [modelArray addObject:model]; + } + self.homeTable.dataArray = modelArray; + } + break; + case 2: + { + NSArray * array = @[@{@"Title":@"A 一周内",@"IsSelected":@NO},@{@"Title":@"B 一个月内",@"IsSelected":@YES},@{@"Title":@"C 半年内",@"IsSelected":@NO},@{@"Title":@"D 半年以上",@"IsSelected":@NO}]; + NSMutableArray * modelArray = [[NSMutableArray alloc] init]; + for (NSDictionary * parmDic in array) { + + QuestionItemModel * model = [QuestionItemModel modelWithDictionary:parmDic]; + + [modelArray addObject:model]; + } + self.homeTable.dataArray = modelArray; + } + break; + case 3: + { + NSArray * array = @[@{@"Title":@"A 一周内",@"IsSelected":@NO},@{@"Title":@"B 一个月内",@"IsSelected":@NO},@{@"Title":@"C 半年内",@"IsSelected":@YES},@{@"Title":@"D 半年以上",@"IsSelected":@NO}]; + NSMutableArray * modelArray = [[NSMutableArray alloc] init]; + for (NSDictionary * parmDic in array) { + + QuestionItemModel * model = [QuestionItemModel modelWithDictionary:parmDic]; + + [modelArray addObject:model]; + } + self.homeTable.dataArray = modelArray; + } + break; + case 4: + { + NSArray * array = @[@{@"Title":@"A 一周内",@"IsSelected":@NO},@{@"Title":@"B 一个月内",@"IsSelected":@NO},@{@"Title":@"C 半年内",@"IsSelected":@NO},@{@"Title":@"D 半年以上",@"IsSelected":@YES}]; + NSMutableArray * modelArray = [[NSMutableArray alloc] init]; + for (NSDictionary * parmDic in array) { + + QuestionItemModel * model = [QuestionItemModel modelWithDictionary:parmDic]; + + [modelArray addObject:model]; + } + self.homeTable.dataArray = modelArray; + } + break; + + default: + break; + } + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTable.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTable.h new file mode 100644 index 0000000..e516882 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTable.h @@ -0,0 +1,22 @@ +// +// DoctorEvaluationTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/16. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +typedef void(^lookMoreEvaluation)(void); + +@interface DoctorEvaluationTable : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + + +@property (nonatomic, copy) lookMoreEvaluation moreBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTable.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTable.m new file mode 100644 index 0000000..53f38b7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTable.m @@ -0,0 +1,151 @@ +// +// DoctorEvaluationTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/16. +// + +#import "DoctorEvaluationTable.h" +#import "DoctorEvaluationTableViewCell.h" +#import "HospitalMainHeardView.h" +#import "HospitalEvaluationTableViewCell.h" +#import "HospatilIntroduceTableViewCell.h" +#import "EvaluationTitleTableViewCell.h" + + +@interface DoctorEvaluationTable () + +@property (nonatomic, strong) HospitalMainHeardView * headView; + +@end + +@implementation DoctorEvaluationTable + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.backgroundColor = KClearColor; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; +} + + + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return self.dataArray.count + 1; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + if (indexPath.row == 0) { + + EvaluationTitleTableViewCell * titleCell = [tableView dequeueReusableCellWithIdentifier:@"TitleCELL"]; + + if (!titleCell) { + + titleCell = [[EvaluationTitleTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TitleCELL"]; + } + + titleCell.selectionStyle = UITableViewCellSelectionStyleNone; + titleCell.moreBlock = ^{ + self.moreBlock(); + }; + return titleCell; + + }else + { + DoctorEvaluationTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"EVALUATIONCELL"]; + + if (!cell) { + + cell = [[DoctorEvaluationTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"EVALUATIONCELL"]; + } + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.model = self.dataArray[indexPath.row - 1]; + return cell; + } + + + return UITableViewCell.new; + + + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +// +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * hearView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 0)]; + + hearView.backgroundColor = KClearColor; + + return hearView; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTableViewCell.h new file mode 100644 index 0000000..7ed6402 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTableViewCell.h @@ -0,0 +1,19 @@ +// +// DoctorEvaluationTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/16. +// + +#import +#import "EvaluatListModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctorEvaluationTableViewCell : UITableViewCell + +@property (nonatomic, strong) EvaluatListModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTableViewCell.m new file mode 100644 index 0000000..35d94d0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorEvaluationTableViewCell.m @@ -0,0 +1,150 @@ +// +// DoctorEvaluationTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/16. +// + +#import "DoctorEvaluationTableViewCell.h" + + +#import "FSXBStarRateView.h" + + +@interface DoctorEvaluationTableViewCell () + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) FSXBStarRateView * starview; + +@property (nonatomic, strong) UILabel * roomLabel; + +@property (nonatomic, strong) UILabel * evaluatLabel; + +@property (nonatomic, strong) UILabel * typeLabel; + +@property (nonatomic, strong) UILabel * timeLabel; + +@end + +@implementation DoctorEvaluationTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + + } + return self; +} + +- (void)createUI { + + self.nameLabel = [[UILabel alloc] init]; + self.nameLabel.textColor = CFontColor1; + self.nameLabel.font = BOLDSYSTEMFONT(14); + self.nameLabel.text = @"匿名用户"; + self.nameLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.nameLabel]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(14); + make.top.mas_offset(15); + make.height.mas_offset(14); + + }]; + [self.nameLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.starview = [[FSXBStarRateView alloc] initWithFrame:CGRectMake(0, 20, 100, 15) numberOfStars:5 rateStyle:HalfStar isAnination:YES finish:^(CGFloat currentScore) { + NSLog(@"%.2f",currentScore); + }]; + self.starview.enable = YES; + self.starview.currentScore = 3; + [self.contentView addSubview:self.starview]; + + [self.starview mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.nameLabel.mas_right).offset(8); + make.top.mas_equalTo(self.nameLabel); + make.height.mas_offset(15); + make.width.mas_offset(100); + }]; +// self.roomLabel = [[UILabel alloc] init]; +// self.roomLabel.textColor = UIColorHex(#3390FF); +// self.roomLabel.font = MEDIUMFONT(12); +// self.roomLabel.text = @""; +// self.roomLabel.textAlignment = NSTextAlignmentRight; +// [self.contentView addSubview:self.roomLabel]; +// +// [self.roomLabel mas_makeConstraints:^(MASConstraintMaker *make) { +// make.right.mas_offset(-16); +// make.top.mas_offset(15); +// make.height.mas_offset(14); +// +// }]; +// [self.roomLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + + self.timeLabel = [[UILabel alloc] init]; + self.timeLabel.textColor = UIColorHex(#999999); + self.timeLabel.font = MEDIUMFONT(12); + self.timeLabel.text = @"2023-01-15"; + self.timeLabel.textAlignment = NSTextAlignmentRight; + [self.contentView addSubview:self.timeLabel]; + + [self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(self.contentView).offset(-15); + make.top.mas_equalTo(@15); + make.width.mas_offset(200); + make.height.mas_offset(14); + + }]; + + + self.evaluatLabel = [[UILabel alloc] init]; + self.evaluatLabel.textColor = UIColorHex(#999999); + self.evaluatLabel.font = SYSTEMFONT(12); + self.evaluatLabel.text = @""; + self.evaluatLabel.numberOfLines = 0; + self.evaluatLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.evaluatLabel]; + + [self.evaluatLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.right.mas_offset(-16); + make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(15); + make.bottom.mas_equalTo(-11); + }]; + + [self.evaluatLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + +} + +- (void)setModel:(EvaluatListModel *)model { + + _model = model; + //1 图文 2音 + self.evaluatLabel.text = _model.context; + CGFloat currentSocore = [_model.score floatValue]; + self.starview.currentScore =currentSocore; + self.timeLabel.text = _model.time; + self.nameLabel.text = _model.userName; +// if (!ValidStr(_model.officeName)) { +// self.roomLabel.text = _model.officeName; +// +// } +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorInfoTopView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorInfoTopView.h new file mode 100644 index 0000000..02652d7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorInfoTopView.h @@ -0,0 +1,27 @@ +// +// DoctorInfoTopView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import +#import "DoctorReportModel.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^userCollectCurrentDoctorBlock)(DoctorReportDoctorInfoModel * doctorModel); + +@interface DoctorInfoTopView : UIView + +//@property (nonatomic, strong) DoctorReportDoctorInfoModel * doctorModel; +//@property (nonatomic, strong) DoctorReportConSessionModel * sessionModel; +@property (nonatomic, strong) DoctorReportModel * model; +@property (nonatomic, assign) CGFloat doctorinfoHeight; + +@property (nonatomic, assign) bool isJujue; + +@property (nonatomic, copy) userCollectCurrentDoctorBlock collectBlock; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorInfoTopView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorInfoTopView.m new file mode 100644 index 0000000..83bed1e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorInfoTopView.m @@ -0,0 +1,531 @@ +// +// DoctorInfoTopView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import "DoctorInfoTopView.h" +#import "NSDate+BRPickerView.h" +@interface DoctorInfoTopView () + +@property (nonatomic, strong) UIImageView * heardImage; +@property (nonatomic, strong) NSMutableArray * labsArray; + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) UILabel * jobLabel; + +@property (nonatomic, strong) UILabel * hospatilLabel; + +@property (nonatomic, strong) UILabel * depmentLabel; + +@property (nonatomic, strong) UILabel * timeLabel; + +@property (nonatomic, strong) UILabel * questionTypeLabel; + +@property (nonatomic, strong) UILabel * starTimeLabel; + +@property (nonatomic, strong) UIButton * collectBtn; + +@property (nonatomic, strong) UIView * starTimeView ; //开始时间视图 +@property (nonatomic, strong) UIView * jujueView ; //拒绝视图 +@property (nonatomic, strong) UIView * cancelQuestionView ; //取消视图 +@property (nonatomic, strong) UIView * questionRecordView ; //咨询记录 + + +@property (nonatomic, strong) UILabel * jujueyuanyinLab ; //拒绝原因 +@property (nonatomic, strong) UILabel * jujueBeizhuLab ; //拒绝备注 +@property (nonatomic, strong) UILabel * beizhuLabel ; //拒绝备注 +@property (nonatomic, strong) UILabel * recordStarLabel ; //拒绝备注 + + + +@property (nonatomic, strong) UILabel * cancelTimeLabel ; //取消时间 + + +@end + +@implementation DoctorInfoTopView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ +#pragma mark:懒加载 +- (NSMutableArray *)labsArray { + + if (!_labsArray) { + + _labsArray = [[NSMutableArray alloc] init]; + } + return _labsArray; +} + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + + } + + return self; +} + +- (void)createUI { + + self.heardImage = [[UIImageView alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(15), 60, 60)]; + self.heardImage.layer.cornerRadius = 30; + self.heardImage.layer.masksToBounds = YES; + [self addSubview:self.heardImage]; + + self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.heardImage.right + kRealValue(20), kRealValue(24), 100, 22)]; + self.nameLabel.text = @""; + self.nameLabel.font = BOLDSYSTEMFONT(21); + self.nameLabel.textColor = CFontColor1; + self.nameLabel.textAlignment = NSTextAlignmentLeft; + CGFloat nameW = [HQCommonUtils getLengthFromText:self.nameLabel.text andFontSize:21]; + self.nameLabel.width = nameW + kRealValue(5); + [self addSubview:self.nameLabel]; + + self.jobLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.nameLabel.right + kRealValue(12), kRealValue(30), 100, 13)]; + self.jobLabel.text = @""; + self.jobLabel.font = BOLDSYSTEMFONT(13); + self.jobLabel.textColor = CFontColor1; + self.jobLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.jobLabel]; + + + self.collectBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.width - kRealValue(15) - 60, kRealValue(24), 60, 25)]; + self.collectBtn.backgroundColor = UIColorHex(#21BEBD); + [self.collectBtn setTitle:@"关注" forState:UIControlStateNormal]; + self.collectBtn.titleLabel.font = SYSTEMFONT(12); + [self.collectBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.collectBtn.layer.cornerRadius = 13.0; + self.collectBtn.layer.masksToBounds = true; + [self.collectBtn addTarget:self action:@selector(userCollectDoctor) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:self.collectBtn]; + + self.hospatilLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.heardImage.right + kRealValue(18),self.jobLabel.bottom + kRealValue(18) ,self.width - self.heardImage.right - kRealValue(30), 13)]; + self.hospatilLabel.text = @""; + self.hospatilLabel.font = BOLDSYSTEMFONT(13); + self.hospatilLabel.textColor = CFontColor1; + self.hospatilLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.hospatilLabel]; + + UIView * lineV = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), self.heardImage.bottom + kRealValue(15), self.width - kRealValue(30), 1)]; + lineV.backgroundColor = UIColorHex(#E0E0E0); + [self addSubview:lineV]; + + UILabel * leftTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15),lineV.bottom + kRealValue(15), 100, 14)]; + leftTimeLabel.text = @"预约时间"; + leftTimeLabel.font = MEDIUMFONT(14); + leftTimeLabel.textColor = CFontColor1; + leftTimeLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:leftTimeLabel]; + + self.timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.width - 300 - 19,lineV.bottom + kRealValue(15), 300, 13)]; + self.timeLabel.text = @""; + self.timeLabel.font = BOLDSYSTEMFONT(13); + self.timeLabel.textColor = CFontColor1; + self.timeLabel.textAlignment = NSTextAlignmentRight; + [self addSubview:self.timeLabel]; + + UILabel * leftTypeLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15),leftTimeLabel.bottom + kRealValue(13), 100, 14)]; + leftTypeLabel.text = @"预约类型"; + leftTypeLabel.font = MEDIUMFONT(14); + leftTypeLabel.textColor = CFontColor1; + leftTypeLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:leftTypeLabel]; + + self.questionTypeLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.width - 300 - 19, self.timeLabel.bottom + kRealValue(13), 300, 14)]; + self.questionTypeLabel.text = @""; + self.questionTypeLabel.font = BOLDSYSTEMFONT(13); + self.questionTypeLabel.textColor = CFontColor1; + self.questionTypeLabel.textAlignment = NSTextAlignmentRight; + [self addSubview:self.questionTypeLabel]; + + //从这里开始不一样 + + UIView * starTimeView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), self.questionTypeLabel.bottom + kRealValue(16), self.width - kRealValue(30), 30)]; + self.starTimeView = starTimeView; + starTimeView.hidden = YES; + [self addSubview:starTimeView]; + + UIView * lineType = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, self.width - kRealValue(30), 1)]; + lineType.backgroundColor = UIColorHex(#E0E0E0); + [starTimeView addSubview:lineType]; + + UILabel * starLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,lineType.bottom + kRealValue(13), 100, 14)]; + starLabel.text = @"开始时间"; + starLabel.font = MEDIUMFONT(14); + starLabel.textColor = CFontColor1; + starLabel.textAlignment = NSTextAlignmentLeft; + [starTimeView addSubview:starLabel]; + + self.starTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(starTimeView.width - 300 - 15, lineType.bottom + kRealValue(13), 300, 22)]; + self.starTimeLabel.text = @""; + self.starTimeLabel.font = BOLDSYSTEMFONT(13); + self.starTimeLabel.textColor = CFontColor1; + self.starTimeLabel.textAlignment = NSTextAlignmentRight; + [starTimeView addSubview:self.starTimeLabel]; + starTimeView.height = starLabel.bottom + kRealValue(10); + self.starTimeView.hidden = YES; + // 1 拒绝 + + UIView * jujueView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), self.questionTypeLabel.bottom + kRealValue(13), self.width - kRealValue(30), 30)]; + self.jujueView = jujueView; + jujueView.hidden = true; + [self addSubview:jujueView]; + + UILabel * jujueLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,1, 100, 14)]; + jujueLabel.text = @"拒绝原因"; + jujueLabel.font = MEDIUMFONT(14); + jujueLabel.textColor = CFontColor1; + jujueLabel.textAlignment = NSTextAlignmentLeft; + [jujueView addSubview:jujueLabel]; + + UILabel * jujueyuanyinLab = [[UILabel alloc] initWithFrame:CGRectMake(jujueLabel.right + 10, 0, jujueView.width - 20 - jujueLabel.width, 15)]; + jujueyuanyinLab.text = @""; + jujueyuanyinLab.font = BOLDSYSTEMFONT(13); + self.jujueyuanyinLab = jujueyuanyinLab; + self.jujueyuanyinLab.numberOfLines = 0; + jujueyuanyinLab.textColor = CFontColor1; + jujueyuanyinLab.textAlignment = NSTextAlignmentRight; + [jujueView addSubview:jujueyuanyinLab]; + + + UILabel * beizhuLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,jujueLabel.bottom + kRealValue(13), 100, 14)]; + beizhuLabel.text = @"拒绝备注"; + beizhuLabel.font = MEDIUMFONT(14); + beizhuLabel.textColor = CFontColor1; + beizhuLabel.textAlignment = NSTextAlignmentLeft; + self.beizhuLabel = beizhuLabel; + [jujueView addSubview:beizhuLabel]; + + self.jujueBeizhuLab = [[UILabel alloc] initWithFrame:CGRectMake(beizhuLabel.right + 10, jujueyuanyinLab.bottom + 1, jujueView.width - 20 - jujueLabel.width, 22)]; + self.jujueBeizhuLab.text = @""; + self.jujueBeizhuLab.font = BOLDSYSTEMFONT(13); + self.jujueBeizhuLab.numberOfLines = 0; + self.jujueBeizhuLab.textColor = CFontColor1; + self.jujueBeizhuLab.textAlignment = NSTextAlignmentRight; + [jujueView addSubview:self.jujueBeizhuLab]; +// + + // 取消 + self.cancelQuestionView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), self.questionTypeLabel.bottom + kRealValue(16), self.width - kRealValue(30), 30)]; + [self addSubview:self.cancelQuestionView]; + + UIView * cancellineType = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), 0, self.width - kRealValue(30), 1)]; + cancellineType.backgroundColor = UIColorHex(#E0E0E0); + [self.cancelQuestionView addSubview:cancellineType]; + + UILabel * cancelStarLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,cancellineType.bottom + kRealValue(13), 100, 14)]; + cancelStarLabel.text = @"预计开始时间"; + cancelStarLabel.font = MEDIUMFONT(14); + cancelStarLabel.textColor = CFontColor1; + cancelStarLabel.textAlignment = NSTextAlignmentLeft; + [self.cancelQuestionView addSubview:cancelStarLabel]; + + UILabel * openLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,cancelStarLabel.bottom + kRealValue(13), 150, 12)]; + openLabel.text = @"请打开APP并保证网络流畅"; + openLabel.font = MEDIUMFONT(11); + openLabel.textColor = UIColorHex(#999999); + openLabel.textAlignment = NSTextAlignmentLeft; + [self.cancelQuestionView addSubview:openLabel]; + + self.cancelTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.width - 300 - 19, cancellineType.bottom + kRealValue(13), 300, 22)]; + self.cancelTimeLabel.text = @""; + self.cancelTimeLabel.font = BOLDSYSTEMFONT(13); + self.cancelTimeLabel.textColor = UIColorHex(#999999); + self.cancelTimeLabel.textAlignment = NSTextAlignmentRight; + [self.cancelQuestionView addSubview:self.cancelTimeLabel]; + //中划线 + NSDictionary *attribtDic = @{NSStrikethroughStyleAttributeName: [NSNumber numberWithInteger:NSUnderlineStyleSingle]}; + NSMutableAttributedString *attribtStr = [[NSMutableAttributedString alloc]initWithString: self.cancelTimeLabel.text attributes:attribtDic]; + // 赋值 + self.cancelTimeLabel.attributedText = attribtStr; + + self.cancelQuestionView.height = openLabel.bottom + kRealValue(10); + + //咨询记录 + + self.questionRecordView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(15), self.starTimeView.bottom + kRealValue(10), self.width - kRealValue(30), 30)]; + self.questionRecordView.backgroundColor = KWhiteColor; + [self addSubview:self.questionRecordView]; + + UIView * reocerdlineType = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.questionRecordView.width , 1)]; + reocerdlineType.backgroundColor = UIColorHex(#E0E0E0); + [self.questionRecordView addSubview:reocerdlineType]; + + UILabel * recordStarLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,reocerdlineType.bottom + kRealValue(13), 100, 14)]; + recordStarLabel.text = @"咨询记录"; + recordStarLabel.font = MEDIUMFONT(14); + recordStarLabel.textColor = CFontColor1; + recordStarLabel.textAlignment = NSTextAlignmentLeft; + self.recordStarLabel = recordStarLabel; + [self.questionRecordView addSubview:recordStarLabel]; + + // 赋值 + self.questionRecordView.height = recordStarLabel.bottom + kRealValue(10); + + + + self.doctorinfoHeight = self.cancelQuestionView.bottom + kRealValue(15); +} + + +- (void)setModel:(DoctorReportModel *)model { + _model = model; + + DoctorReportConSessionModel * sessionModel = [DoctorReportConSessionModel modelWithDictionary:_model.conSession] ; + + DoctorReportDoctorInfoModel * doctorModel = [DoctorReportDoctorInfoModel modelWithDictionary:_model.conDoctorDO] ; + + //医生信息 + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,doctorModel.photo]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.heardImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:IMAGE_NAMED(@"doctorNoImage")]; + self.nameLabel.text = doctorModel.doctorName; + + CGFloat nameW = [HQCommonUtils getLengthFromText:self.nameLabel.text andFontSize:21]; + self.nameLabel.width = nameW + kRealValue(5); + self.jobLabel.text = doctorModel.doctorTitle; + self.jobLabel.frame = CGRectMake(self.nameLabel.right + kRealValue(12), kRealValue(30), 100, 13); + + if (ValidStr(doctorModel.resourceName) && ValidStr(doctorModel.departmentName) ) { + + self.hospatilLabel.text = @""; + }else + { + if (ValidStr(doctorModel.resourceName) ||ValidStr(doctorModel.departmentName) ) { + if (ValidStr(doctorModel.resourceName)) { + self.hospatilLabel.text = [NSString stringWithFormat:@"%@",doctorModel.departmentName]; + } + if (ValidStr(doctorModel.departmentName)) { + self.hospatilLabel.text = [NSString stringWithFormat:@"%@",doctorModel.resourceName]; + } + } + else + { + self.hospatilLabel.text = [NSString stringWithFormat:@"%@ %@",doctorModel.resourceName,doctorModel.departmentName]; + } + } + + + if([doctorModel.tfFollow integerValue] == 1) { + + [self.collectBtn setTitle:@"已关注" forState:UIControlStateNormal]; + [self.collectBtn setTitleColor:CFontColor2 forState:UIControlStateNormal]; + [self.collectBtn setBackgroundColor:CViewBgColor]; + [self.collectBtn setImage:[UIImage imageWithColor:CViewBgColor] forState:UIControlStateNormal]; + + }else + { + [self.collectBtn setImage:IMAGE_NAMED(@"detail_collect") forState:UIControlStateNormal]; + } + //状态数据 + NSString * timeString = [HQCommonUtils getTimeFromTimestamp:[sessionModel.sessionDateLong integerValue] andDateFormat:@"YYYY年MM月dd日"]; + NSString * weekString; + NSArray * weekArray = @[@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周天"]; + NSString * amString = [sessionModel.amPm integerValue] == 1 ? @"下午":@"上午"; + if ( [sessionModel.week integerValue] >= 1) { + weekString = weekArray[[sessionModel.week integerValue] - 1]; + } + self.timeLabel.text = [NSString stringWithFormat:@"%@ %@ %@",timeString,weekString,amString]; + NSString * typeString = [sessionModel.contentType integerValue] == 1 ? @"图文咨询":@"视频咨询"; + self.questionTypeLabel.text = typeString; + + + //预约状态 1待确认 2待开始 3已开始 4待评价 5已完成 + // 6 拒绝 7取消 8 超时 + if ( [sessionModel.contentStatus integerValue] == 6) { //拒绝 + + self.jujueView.hidden = false; + self.starTimeView.hidden = true; + self.cancelQuestionView.hidden = true; + self.jujueyuanyinLab.text = sessionModel.reasonType; + self.jujueBeizhuLab.text = sessionModel.rejectReason; + CGFloat labH = [HQCommonUtils getSpaceLabelHeight: self.jujueyuanyinLab withStr:self.jujueyuanyinLab.text withFont:[UIFont systemFontOfSize:14 weight:UIFontWeightMedium] withWidth: self.jujueyuanyinLab.width withLineSpacing:2]; + + CGFloat beizhulabH = [HQCommonUtils getSpaceLabelHeight: self.jujueBeizhuLab withStr:self.jujueBeizhuLab.text withFont:[UIFont systemFontOfSize:14 weight:UIFontWeightMedium] withWidth: self.jujueyuanyinLab.width withLineSpacing:2]; + + //布局 + self.jujueView.top = self.questionTypeLabel.bottom + kRealValue(16); + self.jujueyuanyinLab.top = 1; + self.jujueBeizhuLab.height = beizhulabH; + self.jujueBeizhuLab.top = self.jujueyuanyinLab.bottom + kRealValue(16); + self.beizhuLabel.top = self.jujueyuanyinLab.bottom + kRealValue(16); + self.jujueView.height = self.beizhuLabel.bottom+ 15; + self.doctorinfoHeight = self.jujueView.bottom + kRealValue(15); + self.questionRecordView.top = self.jujueView.bottom; + self.questionRecordView.height = 10; + self.questionRecordView.hidden = YES; + self.questionRecordView.backgroundColor = KWhiteColor; + self.doctorinfoHeight = self.questionRecordView.bottom + kRealValue(12); + self.recordStarLabel.hidden = true; +// NSDictionary *attribtDic = @{NSStrikethroughStyleAttributeName: [NSNumber numberWithInteger:NSUnderlineStyleSingle]}; +// NSMutableAttributedString *attribtStr = [[NSMutableAttributedString alloc]initWithString: self.timeLabel.text attributes:attribtDic]; +// // 类型 +// NSDictionary * typeattribtDic = @{NSStrikethroughStyleAttributeName: [NSNumber numberWithInteger:NSUnderlineStyleSingle]}; +// NSMutableAttributedString * typeattribtStr = [[NSMutableAttributedString alloc]initWithString: self.questionTypeLabel.text attributes:typeattribtDic]; +// self.timeLabel.attributedText = typeattribtStr; +// self.doctorinfoHeight = self.questionTypeLabel.bottom + kRealValue(15); + } + if ( [sessionModel.contentStatus integerValue] == 1 || [sessionModel.contentStatus integerValue] == 2) { //待确认 + + self.jujueView.hidden = true ; + self.starTimeView.hidden = true; + self.cancelQuestionView.hidden = true; + self.questionRecordView.hidden = YES; + if ( ValidStr(sessionModel.doctorStartTime)) { //如果医生开始时间为空 那么不显示 + + self.starTimeView.hidden = true; + }else + { + self.starTimeView.hidden = false; + self.starTimeLabel.text = [HQCommonUtils getTimeFromTimestamp:[sessionModel.sessionDateLong integerValue] andDateFormat:@"YYYY年MM月dd日 HH:mm"]; + } + + self.doctorinfoHeight = self.questionTypeLabel.bottom + kRealValue(15); + } + if ( [sessionModel.contentStatus integerValue] == 7) { //取消 + + self.jujueView.hidden = YES; + self.starTimeView.hidden = YES; + self.cancelQuestionView.hidden = false; + self.questionRecordView.hidden = YES; + self.jujueyuanyinLab.text = doctorModel.responseRate; + CGFloat labH = [HQCommonUtils getSpaceLabelHeight: self.jujueyuanyinLab withStr:self.jujueyuanyinLab.text withFont:[UIFont systemFontOfSize:14 weight:UIFontWeightMedium] withWidth: self.jujueyuanyinLab.width withLineSpacing:5]; + self.jujueyuanyinLab.height = labH; + self.jujueView.hidden = YES; + self.doctorinfoHeight = self.questionTypeLabel.bottom + kRealValue(15); + } + if ( [sessionModel.contentStatus integerValue] == 3 || [sessionModel.contentStatus integerValue] == 4 || [sessionModel.contentStatus integerValue] == 5) { //在线咨询 + for (UILabel * currentlab in self.labsArray) { + + [currentlab removeFromSuperview]; + } + [self.labsArray removeAllObjects]; + + self.jujueView.hidden = true ; + self.starTimeView.hidden = false; + self.cancelQuestionView.hidden = true; + + if ( ValidStr(sessionModel.doctorStartTime)) { //如果医生开始时间为空 那么不显示 + + self.starTimeView.hidden = true; + }else + { + self.starTimeView.hidden = false; + NSString * doctorStar = [HQCommonUtils getTimeFromTimestamp:[sessionModel.doctorStartTimeLong integerValue] andDateFormat:@"YYYY年MM月dd日 HH:mm"]; + NSString * doctorend = [HQCommonUtils getTimeFromTimestamp:[sessionModel.doctorEndTimeLong integerValue] andDateFormat:@"HH:mm"]; + + self.starTimeLabel.text = [NSString stringWithFormat:@"%@~%@",doctorStar,doctorend]; + } + + NSArray * recordArray = _model.imList; + CGFloat height = 30; + for (int i = 0 ; i < recordArray.count; i ++) { + + DoctoIMListModel * imModel = recordArray[i]; + + + UILabel * recordLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 45 + 25 * i, self.questionRecordView.width, 20)]; + recordLabel.textAlignment = NSTextAlignmentLeft; + recordLabel.font = SYSTEMFONT(14); + NSString * questionType = @""; + NSString * timeString; + if (ValidStr(imModel.startTime) || ValidStr(imModel.endTime)) { + + timeString = @"时长:--"; + }else + { + timeString = [self dateTimeDifferenceWithStartTime:imModel.startTime endTime:imModel.endTime]; + } + if ([imModel.type intValue] == 2) { + questionType = @"视频咨询"; + recordLabel.text = [NSString stringWithFormat:@"%@:%@ %@",questionType,imModel.startTime,timeString]; + }else + { + questionType = @"约定时间"; + NSString * doctorStar = [HQCommonUtils getTimeFromTimestamp:[imModel.startTimLong integerValue] andDateFormat:@"YYYY-MM-dd HH:mm"]; + NSString * doctorend = [HQCommonUtils getTimeFromTimestamp:[imModel.endTimeLong integerValue] andDateFormat:@"HH:mm"]; + recordLabel.text = [NSString stringWithFormat:@"%@:%@~%@",questionType,doctorStar,doctorend]; + } + recordLabel.textColor = CFontColor1; + + + + + if (i == recordArray.count - 1) { + + height = recordLabel.bottom; + self.questionRecordView.height = recordLabel.bottom; + } + [self.questionRecordView addSubview:recordLabel]; + [self.labsArray addObject:recordLabel]; + } + + + self.doctorinfoHeight = self.questionRecordView.bottom + kRealValue(15); + } + + +} + + +-(NSString *)dateTimeDifferenceWithStartTime:(NSString *)startTime endTime:(NSString *)endTime{ + NSDateFormatter *date = [[NSDateFormatter alloc]init]; + [date setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; + NSDate *startD =[date dateFromString:startTime]; + NSDate *endD = [date dateFromString:endTime]; + NSTimeInterval start = [startD timeIntervalSince1970]*1; + NSTimeInterval end = [endD timeIntervalSince1970]*1; + NSTimeInterval value = end - start; + int second = (int)value %60;//秒 + int minute = (int)value /60%60; + int house = (int)value % (24 * 3600)/3600; + int day = (int)value / (24 * 3600); + NSString *str; + if (day != 0) { + str = [NSString stringWithFormat:@"时长:%d天%d小时%d分%d秒",day,house,minute,second]; + }else if (day==0 && house != 0) { + str = [NSString stringWithFormat:@"时长:%d小时%d分%d秒",house,minute,second]; + }else if (day== 0 && house== 0 && minute!=0) { + str = [NSString stringWithFormat:@"时长:%d分%d秒",minute,second]; + }else{ + str = [NSString stringWithFormat:@"时长:%d秒",second]; + } + + return str; +} + +- (void)userCollectDoctor { + + DoctorReportDoctorInfoModel * doctorModel = [DoctorReportDoctorInfoModel modelWithDictionary:self.model.conDoctorDO] ; + if (self.collectBlock) { + + self.collectBlock(doctorModel); + } + + +} +///将时间戳转为日期时间 + +/// @param timestamp 时间戳 + +/// @param dateFormat 日期样式 YYYY-MM-dd HH:mm:ss + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionView.h new file mode 100644 index 0000000..8d18fb4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionView.h @@ -0,0 +1,21 @@ +// +// DoctorRoomCollectionView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^roomCollectViewBlock)(NSString * deparmentID,NSString * deparmentName); + +@interface DoctorRoomCollectionView : UICollectionView + +@property (nonatomic, strong) NSArray * dataArray; +@property (nonatomic, assign) NSInteger type; //1 是搜索专家页的collectview +@property (nonatomic, copy) roomCollectViewBlock roomBlock; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionView.m new file mode 100644 index 0000000..edd9d6a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionView.m @@ -0,0 +1,105 @@ +// +// DoctorRoomCollectionView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import "DoctorRoomCollectionView.h" +#import "DoctorRoomCollectionViewCell.h" + + + + +@interface DoctorRoomCollectionView () + + + + +@end +@implementation DoctorRoomCollectionView + + +- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout +{ + if (self = [super initWithFrame:frame collectionViewLayout:layout]) + { + [self createUI]; + } + return self; +} + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; + +} + +- (void)setType:(NSInteger)type { + _type = type; + [self reloadData]; +} + + +- (void)createUI +{ + self.delegate = self; + self.dataSource = self; + self.backgroundColor = KWhiteColor; + self.showsHorizontalScrollIndicator = NO; + [self registerClass:[DoctorRoomCollectionViewCell class] forCellWithReuseIdentifier:@"roomCell"]; + + +} + +-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ + return 1; +} + +-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + // NSLog(@"guguiiuigiuggiuugi%ld",_productArr.count); + + return self.dataArray.count; +} + + + +-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ + + DoctorRoomCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"roomCell" forIndexPath:indexPath]; + + cell.backgroundColor = KWhiteColor; + cell.layer.shadowColor = [UIColor colorWithWhite:0 alpha:0.3].CGColor; // 将黑色改为灰色,并降低不透明度 + cell.layer.shadowOffset = CGSizeMake(0, 2); + cell.layer.shadowOpacity = 0.5; // 提高不透明度 + cell.layer.shadowRadius = 3; + cell.layer.masksToBounds = NO; + cell.model = self.dataArray[indexPath.item]; + return cell; +} +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath +{ + + return CGSizeMake((kScreenWidth - 30)/2,73); + +} + +-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath +{ + DepartmentModel * model = self.dataArray[indexPath.item]; + + if (self.roomBlock) { + + self.roomBlock(model.depar_id, model.departmentName); + } + +} + +- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { + + return UIEdgeInsetsMake(10, 10, 10, 10); +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionViewCell.h new file mode 100644 index 0000000..0380371 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionViewCell.h @@ -0,0 +1,19 @@ +// +// DoctorRoomCollectionViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import +#import "FoundExpertModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctorRoomCollectionViewCell : UICollectionViewCell + +@property (nonatomic, strong) DepartmentModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionViewCell.m new file mode 100644 index 0000000..0e51de6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorRoomCollectionViewCell.m @@ -0,0 +1,116 @@ +// +// DoctorRoomCollectionViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import "DoctorRoomCollectionViewCell.h" + +@interface DoctorRoomCollectionViewCell () + + +@property (nonatomic, strong) UIImageView * roomImage; + +@property (nonatomic, strong) UILabel * roomLabel; + +@property (nonatomic, strong) UILabel * roomSubLabel; + +@property (nonatomic, strong) UILabel * doctorLabel; + +@end + +@implementation DoctorRoomCollectionViewCell + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; + +} + +- (void)createUI { + + + self.roomImage = [[UIImageView alloc] init]; + self.roomImage.image = IMAGE_NAMED(@"placeholdIMG"); + self.roomImage.layer.cornerRadius = 15.0; + self.roomImage.layer.masksToBounds = YES; + [self addSubview:self.roomImage]; + + [self.roomImage mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(12); + make.top.mas_offset(21); + make.width.height.mas_offset(30); + }]; + + self.roomLabel = [[UILabel alloc] init]; + self.roomLabel.textColor = CFontColor1; + self.roomLabel.font = BOLDSYSTEMFONT(14); + self.roomLabel.text = @"妇产科"; + self.roomLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.roomLabel]; + + [self.roomLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.roomImage.mas_right).offset(8); + make.right.mas_equalTo(@-10); + make.top.mas_offset(18); + make.height.mas_offset(14); + }]; + + self.roomSubLabel = [[UILabel alloc] init]; + self.roomSubLabel.font = BOLDSYSTEMFONT(14); + self.roomSubLabel.text = @""; + self.roomSubLabel.numberOfLines = 2; + self.roomSubLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.roomSubLabel]; + + [self.roomSubLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(@14); + make.right.mas_equalTo(@-10); + make.top.mas_equalTo(self.roomImage.mas_bottom).offset(10); + }]; + + [self.roomSubLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.doctorLabel = [[UILabel alloc] init]; + self.doctorLabel.font = SYSTEMFONT(14); + self.doctorLabel.text = @""; + self.doctorLabel.textColor = UIColorHex(#333333); + self.doctorLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.doctorLabel]; + + [self.doctorLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(@0); + make.left.mas_equalTo(self.roomLabel); + make.height.mas_offset(15); + make.bottom.mas_equalTo(@-12); + }]; + + +} + + +- (void)setModel:(DepartmentModel *)model { + _model = model; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_model.image]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + + [self.roomImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:IMAGE_NAMED(@"roomPlaceholder")]; +// self.roomSubLabel.text = _model.mark; + self.roomLabel.text =_model.departmentName; + self.doctorLabel.attributedText = [HQCommonUtils firstString:@"有" firstColor:CFontColor2 firstSize:14 secondString:[NSString stringWithFormat:@"%@",_model.doctorNum] secondColor:UIColorHex(#21BEBD) secondSize:14 thirdString:@"名专家" thirdColor:CFontColor2 thirdSize:14]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorSelectTimeCollectionCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorSelectTimeCollectionCell.h new file mode 100644 index 0000000..b66d1b4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorSelectTimeCollectionCell.h @@ -0,0 +1,19 @@ +// +// DoctorSelectTimeCollectionCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/21. +// + +#import +#import "DoctorTimeModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctorSelectTimeCollectionCell : UICollectionViewCell + +@property (nonatomic, strong) DoctorTimeModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorSelectTimeCollectionCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorSelectTimeCollectionCell.m new file mode 100644 index 0000000..97ed870 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorSelectTimeCollectionCell.m @@ -0,0 +1,145 @@ +// +// DoctorSelectTimeCollectionCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/21. +// + +#import "DoctorSelectTimeCollectionCell.h" + + +@interface DoctorSelectTimeCollectionCell () + +@property (nonatomic, strong) UILabel * monthLabel; + +@property (nonatomic, strong) UILabel * weakLabel; + +@property (nonatomic, strong) UILabel * statusLabel; + +@end + + + + +@implementation DoctorSelectTimeCollectionCell + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; + +} + +- (void)createUI { + + self.monthLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, kRealValue(11), self.width, 14)]; + self.monthLabel.text = @"05/07"; + self.monthLabel.textColor = CFontColor1; + self.monthLabel.font = SYSTEMFONT(13); + self.monthLabel.textAlignment = NSTextAlignmentCenter; + [self.contentView addSubview:self.monthLabel]; + + self.weakLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, self.monthLabel.bottom + kRealValue(5), self.width, 14)]; + self.weakLabel.text = @"周五上午"; + self.weakLabel.textColor = CFontColor1; + self.weakLabel.font = BOLDSYSTEMFONT(13); + self.weakLabel.textAlignment = NSTextAlignmentCenter; + [self.contentView addSubview:self.weakLabel]; + + self.statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,self.weakLabel.bottom + kRealValue(11), self.width, 14)]; + self.statusLabel.text = @"可预约"; + self.statusLabel.textColor = CFontColor1; + self.statusLabel.font = MEDIUMFONT(11); + self.statusLabel.textAlignment = NSTextAlignmentCenter; + [self.contentView addSubview:self.statusLabel]; + + +} + +- (void)setModel:(DoctorTimeModel *)model { + + _model = model; + + + if ([model.schedulingNum integerValue] - [model.readySchedulingNum integerValue] > 0) { + NSInteger lastNumber = [model.schedulingNum integerValue] - [model.readySchedulingNum integerValue]; + self.statusLabel.text = [NSString stringWithFormat:@"剩余%ld",lastNumber] ; + self.backgroundColor = KWhiteColor; + self.layer.cornerRadius = 10.0f; + self.layer.masksToBounds = YES; + self.layer.borderColor = UIColorHex(#999999).CGColor; + self.layer.borderWidth = 1.0f; + self.backgroundColor = KWhiteColor; + + }else + { + self.statusLabel.text = @"不可约"; + self.backgroundColor = UIColorHex(#DDDDDD); + self.layer.cornerRadius = 10.0f; + self.layer.masksToBounds = YES; + self.layer.borderColor = KWhiteColor.CGColor; + } + + + if (_model.isAppment == true) { + + if ([model.schedulingNum integerValue] - [model.readySchedulingNum integerValue] > 0) { + self.backgroundColor = UIColorHex(#21BEBD); + self.monthLabel.textColor = KWhiteColor; + self.statusLabel.textColor = KWhiteColor; + self.weakLabel.textColor = KWhiteColor; + self.layer.borderColor = KClearColor.CGColor; + + }else + { + self.backgroundColor = UIColorHex(#DDDDDD); + self.monthLabel.textColor = UIColorHex(#333333); + self.statusLabel.textColor = UIColorHex(#666666); + self.weakLabel.textColor = UIColorHex(#333333); + self.layer.cornerRadius = 10.0f; + self.layer.masksToBounds = YES; + self.layer.borderColor = KWhiteColor.CGColor; + } + + + + + } + if (_model.isAppment == false) { + + if ([model.schedulingNum integerValue] - [model.readySchedulingNum integerValue] > 0) { + + self.backgroundColor = KWhiteColor; + self.monthLabel.textColor = UIColorHex(#333333); + self.statusLabel.textColor = UIColorHex(#666666); + self.weakLabel.textColor = UIColorHex(#333333); + + }else + { + self.backgroundColor = UIColorHex(#DDDDDD); + self.layer.cornerRadius = 10.0f; + self.layer.masksToBounds = YES; + self.monthLabel.textColor = UIColorHex(#333333); + self.statusLabel.textColor = UIColorHex(#666666); + self.weakLabel.textColor = UIColorHex(#333333); + self.layer.borderColor = KWhiteColor.CGColor; + } + + } + NSArray * array = @[@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周天"]; + NSString * aftenString = [_model.type integerValue] == 0 ? @"上午":@"下午"; + + if (!ValidStr(_model.week)) { + NSInteger weekInt = [_model.week integerValue] - 1; + self.weakLabel.text = [NSString stringWithFormat:@"%@%@",array[weekInt],aftenString]; + + } + + self.monthLabel.text = [NSString stringWithFormat:@"%@",_model.schedulingDate]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorStatusView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorStatusView.h new file mode 100644 index 0000000..8a5a723 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorStatusView.h @@ -0,0 +1,24 @@ +// +// DoctorStatusView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctorStatusView : UIView + +@property (nonatomic, assign) BOOL isSelected; + +@property (nonatomic, assign) BOOL isLast; + +@property (nonatomic, assign) NSInteger lastType; + +@property (nonatomic, copy) NSString * statusString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorStatusView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorStatusView.m new file mode 100644 index 0000000..a662cef --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorStatusView.m @@ -0,0 +1,120 @@ +// +// DoctorStatusView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import "DoctorStatusView.h" + + +@interface DoctorStatusView () + +@property (nonatomic, strong) UIButton * statusBtn; + +@property (nonatomic, strong) UILabel * statusLabel; + +@property (nonatomic, strong) UILabel * numberLabel; + + +@property (nonatomic, strong) UIImageView * statusView; + +@property (nonatomic, strong) UIView * lineView; + +@end + + +@implementation DoctorStatusView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.statusBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(5), 0, kRealValue(38), kRealValue(38))]; + [self.statusBtn setImage:[UIImage imageNamed:@"statusTop_nomal"] forState:UIControlStateNormal]; + [self.statusBtn setImage:[UIImage imageNamed:@"statusTop_selected"] forState:UIControlStateSelected]; + [self addSubview:self.statusBtn]; + + + self.numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(5), 0, kRealValue(38), kRealValue(38))]; + self.numberLabel.textAlignment = NSTextAlignmentCenter; + self.numberLabel.font = SYSTEMFONT(13); + self.numberLabel.text = @"1"; + self.numberLabel.textColor = UIColorHex(#21BEBD); + [self addSubview:self.numberLabel]; + + + self.statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, self.statusBtn.bottom + 8, 60, 13)]; + self.statusLabel.textAlignment = NSTextAlignmentLeft; + self.statusLabel.font = SYSTEMFONT(13); + self.statusLabel.text = @"在线咨询"; + self.statusLabel.textColor = KWhiteColor; + [self addSubview:self.statusLabel]; + + self.statusView = [[UIImageView alloc] initWithFrame:CGRectMake(self.statusBtn.right + kRealValue(8) , kRealValue(13), 20, 7)]; + self.statusView.image = [UIImage imageNamed:@"line_selected"]; + self.statusView.hidden = true; + [self addSubview:self.statusView]; + + self.lineView = [[UIImageView alloc] initWithFrame:CGRectMake(self.statusBtn.right , kRealValue(19), kRealValue(24), 2)]; + self.lineView.backgroundColor = KWhiteColor; + self.lineView.hidden = true; + [self addSubview:self.lineView]; + +} + +- (void)setIsSelected:(BOOL)isSelected { + + _isSelected = isSelected; + + if (_isSelected) { + self.statusBtn.selected = true; + self.statusView.hidden = false; + self.lineView.hidden = true; + self.statusLabel.textColor = KWhiteColor; + } + else { + self.statusBtn.selected = false; + self.statusView.hidden = true; + self.lineView.hidden = false; + self.statusLabel.textColor = UIColorHex(#FBFBFB); + } +} + + +- (void)setLastType:(NSInteger)lastType { + + _lastType = lastType; + + if (_lastType == 4) { + self.lineView.hidden = YES; + self.statusView.hidden = YES; + } + self.numberLabel.text = [NSString stringWithFormat:@"%ld",_lastType + 1]; + +} + +- (void)setStatusString:(NSString *)statusString { + + _statusString = statusString; + + self.statusLabel.text = _statusString; + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorTimeSelectedCollectView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorTimeSelectedCollectView.h new file mode 100644 index 0000000..cb15f78 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorTimeSelectedCollectView.h @@ -0,0 +1,27 @@ +// +// DoctorTimeSelectedCollectView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/21. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol DoctorTimeSelectedProtocol + +- (void)doctorTimeSureAction:(NSString *)timeID; + +@end + +@interface DoctorTimeSelectedCollectView : UICollectionView + + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, weak)id timeDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorTimeSelectedCollectView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorTimeSelectedCollectView.m new file mode 100644 index 0000000..218674d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/DoctorTimeSelectedCollectView.m @@ -0,0 +1,128 @@ +// +// DoctorTimeSelectedCollectView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/21. +// + +#import "DoctorTimeSelectedCollectView.h" +#import "DoctorSelectTimeCollectionCell.h" + +@interface DoctorTimeSelectedCollectView () + + + + +@end + + +@implementation DoctorTimeSelectedCollectView + + +- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout +{ + if (self = [super initWithFrame:frame collectionViewLayout:layout]) + { + [self createUI]; + } + return self; +} + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; + +} + + +- (void)createUI +{ + self.delegate = self; + self.dataSource = self; + self.backgroundColor = KWhiteColor; + self.showsHorizontalScrollIndicator = NO; + [self registerClass:[DoctorSelectTimeCollectionCell class] forCellWithReuseIdentifier:@"timeCell"]; + [self registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footer"]; + + +} + +-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ + return 1; +} + +-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + // NSLog(@"guguiiuigiuggiuugi%ld",_productArr.count); + return self.dataArray.count; +} + + + +-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ + + DoctorSelectTimeCollectionCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"timeCell" forIndexPath:indexPath]; + + cell.model = self.dataArray[indexPath.item]; + return cell; +} +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath +{ + + return CGSizeMake((kScreenWidth - 48 )/4,75); + +} + +-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath +{ + + DoctorTimeModel * model = self.dataArray[indexPath.item]; + + if ([model.schedulingNum integerValue] - [model.readySchedulingNum integerValue] <= 0) { + + return; + + } + else + { + + for (DoctorTimeModel * subModel in self.dataArray) { + + if (subModel == model) { + subModel.isAppment = YES; + }else + { + subModel.isAppment = false; + } + } + } + + if ([self.timeDelegate respondsToSelector:@selector(doctorTimeSureAction:)]) { + + [self.timeDelegate doctorTimeSureAction:model.time_id ]; + } + + [self reloadData]; + +} +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section { + return CGSizeMake(kScreenWidth, 40); +} + +- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{ + + UICollectionReusableView * footerer = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footer"forIndexPath:indexPath]; + + UILabel * heardLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, kRealValue(15), kScreenWidth - 30, 20)]; + heardLabel.text = @"预约须知(预约即代表统一以下规则):1、预约不收取任何额外费用; 2、停诊将短信通知,请保持手机畅通。"; + heardLabel.numberOfLines = 0; + heardLabel.textColor = UIColorHex(#999999); + CGFloat h = [HQCommonUtils getSpaceLabelHeight:heardLabel withStr:heardLabel.text withFont:[UIFont systemFontOfSize:12] withWidth:kScreenWidth - kRealValue(30) withLineSpacing:5]; + heardLabel.height = h; + heardLabel.font = SYSTEMFONT(12); + [footerer addSubview:heardLabel]; + footerer.backgroundColor = KWhiteColor; + return footerer; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/EvaluationListTableView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/EvaluationListTableView.h new file mode 100644 index 0000000..0776e66 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/EvaluationListTableView.h @@ -0,0 +1,20 @@ +// +// EvaluationListTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface EvaluationListTableView : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, assign) NSInteger type; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/EvaluationListTableView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/EvaluationListTableView.m new file mode 100644 index 0000000..a0c73f8 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/EvaluationListTableView.m @@ -0,0 +1,138 @@ +// +// EvaluationListTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/14. +// + +#import "EvaluationListTableView.h" +#import "HospitalEvaluationTableViewCell.h" +#import "DoctorEvaluationTableViewCell.h" + +@interface EvaluationListTableView () + + +@end + +@implementation EvaluationListTableView + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleSingleLine; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; +} + +- (void)setType:(NSInteger)type { + _type = type; + [self reloadData]; +} + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return self.dataArray.count; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + if (self.type == 2) { + + DoctorEvaluationTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"DOCTORCELL"]; + + if (!cell) { + + cell = [[DoctorEvaluationTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"DOCTORCELL"]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.model = self.dataArray[indexPath.row]; + return cell; + + }else + { + HospitalEvaluationTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"EVALUATIONCELL"]; + + if (!cell) { + + cell = [[HospitalEvaluationTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"EVALUATIONCELL"]; + } + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.model = self.dataArray[indexPath.row]; + return cell; + } + return UITableViewCell.new; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + +} + +-(CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +// +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * hearView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 0)]; + + hearView.backgroundColor = KClearColor; + + return hearView; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollection.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollection.h new file mode 100644 index 0000000..d1689e4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollection.h @@ -0,0 +1,22 @@ +// +// FoundExpertSubCollection.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import +#import "FoundExpertModel.h" +NS_ASSUME_NONNULL_BEGIN + +typedef void(^sicksOnClickBlock)(SicksModel * model); + +@interface FoundExpertSubCollection : UICollectionView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, copy) sicksOnClickBlock sickBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollection.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollection.m new file mode 100644 index 0000000..76def83 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollection.m @@ -0,0 +1,113 @@ +// +// FoundExpertSubCollection.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import "FoundExpertSubCollection.h" +#import "FoundExpertSubCollectionViewCell.h" + + +@interface FoundExpertSubCollection () + + + + +@end + +@implementation FoundExpertSubCollection + + +- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout +{ + if (self = [super initWithFrame:frame collectionViewLayout:layout]) + { + [self createUI]; + } + return self; +} + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; + +} + + +- (void)createUI +{ + self.delegate = self; + self.dataSource = self; + self.backgroundColor = KWhiteColor; + [self registerClass:[FoundExpertSubCollectionViewCell class] forCellWithReuseIdentifier:@"foundCell"]; + [self registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"]; + + +} + +-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ + + return 1; +} + +-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + // NSLog(@"guguiiuigiuggiuugi%ld",_productArr.count); + return self.dataArray.count; +} + + + +-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ + + + SicksModel * model = self.dataArray[indexPath.item]; + + FoundExpertSubCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"foundCell" forIndexPath:indexPath]; + + cell.backgroundColor = KWhiteColor; + + cell.layer.cornerRadius = 13.0f; + cell.layer.masksToBounds = YES; + cell.layer.borderColor = UIColorHex(#BBBBBB).CGColor; + cell.layer.borderWidth = 1.0f; + cell.diseaLabel.text = model.sicksName; + return cell; +} +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath +{ + + return CGSizeMake((kScreenWidth - 30)/2,26); + +} + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { + return CGSizeMake(kScreenWidth, 30); +} + + +-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath +{ + SicksModel * model = self.dataArray[indexPath.item]; + if (self.sickBlock) { + self.sickBlock(model); + } + +} + +- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{ +// NSArray * array = @[@"常见病",@"皮肤性病",@"慢性病",@"职业病"]; +// + UICollectionReusableView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"forIndexPath:indexPath]; + + UILabel * heardLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(10), kScreenWidth, 20)]; +// heardLabel.text = array[indexPath.section]; + heardLabel.textColor = CFontColor1; + heardLabel.font = SYSTEMFONT(15); + [header addSubview:heardLabel]; + header.backgroundColor = KWhiteColor; + return header; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollectionViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollectionViewCell.h new file mode 100644 index 0000000..d0bc1bf --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollectionViewCell.h @@ -0,0 +1,18 @@ +// +// FoundExpertSubCollectionViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FoundExpertSubCollectionViewCell : UICollectionViewCell + +@property (nonatomic, strong) UILabel * diseaLabel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollectionViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollectionViewCell.m new file mode 100644 index 0000000..c00f5a2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundExpertSubCollectionViewCell.m @@ -0,0 +1,40 @@ +// +// FoundExpertSubCollectionViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import "FoundExpertSubCollectionViewCell.h" + + + +@implementation FoundExpertSubCollectionViewCell + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + + } + + return self; +} + +- (void)createUI { + + self.diseaLabel = [[UILabel alloc] init]; + self.diseaLabel.textColor = CFontColor1; + self.diseaLabel.font = MEDIUMFONT(13); + self.diseaLabel.textAlignment = NSTextAlignmentCenter; + [self.contentView addSubview:self.diseaLabel]; + + [self.diseaLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.top.right.mas_offset(0); + make.bottom.mas_offset(0); + }]; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundLeftTableView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundLeftTableView.h new file mode 100644 index 0000000..290df57 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundLeftTableView.h @@ -0,0 +1,26 @@ +// +// FoundLeftTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol foundLeftCellDelegate + +- (void)leftCellAction:(NSInteger)index; + +@end + +@interface FoundLeftTableView : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, weak)id leftDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundLeftTableView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundLeftTableView.m new file mode 100644 index 0000000..042e756 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundLeftTableView.m @@ -0,0 +1,147 @@ +// +// FoundLeftTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import "FoundLeftTableView.h" +#import "FoundRoomsTableViewCell.h" + + + +@interface FoundLeftTableView () + + +@end + +@implementation FoundLeftTableView + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.backgroundColor = KWhiteColor; +} + + + + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return self.dataArray.count; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} +// +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + + return 40; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + static NSString * cellID = @"cellID"; + + + FoundRoomsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[FoundRoomsTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + + cell.model = self.dataArray[indexPath.row]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + SearchRoomModel * model = self.dataArray[indexPath.row]; + + for (SearchRoomModel * subModel in self.dataArray) { + if (subModel == model) { + subModel.isSelected = true; + } + else + { + subModel.isSelected = false; + } + } + + if ([self.leftDelegate respondsToSelector:@selector(leftCellAction:)]) { + + [self.leftDelegate leftCellAction:indexPath.row]; + + } + [self reloadData]; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +// +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * hearView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 0)]; + + hearView.backgroundColor = KRedColor; + + return hearView; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRightTableView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRightTableView.h new file mode 100644 index 0000000..3268626 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRightTableView.h @@ -0,0 +1,24 @@ +// +// FoundRightTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^rightTableActionBlock)(NSString * roomID , NSString *roomName ); + +@interface FoundRightTableView : UITableView + +@property (nonatomic, strong) NSArray * rightDataArray; + +@property (nonatomic, copy) rightTableActionBlock rightBlock; + +@property (nonatomic, assign) NSInteger searchType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRightTableView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRightTableView.m new file mode 100644 index 0000000..b4df4bb --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRightTableView.m @@ -0,0 +1,195 @@ +// +// FoundRightTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import "FoundRightTableView.h" +#import "FoundRoomsTableViewCell.h" + + + +@interface FoundRightTableView () + + +@end + +@implementation FoundRightTableView + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleSingleLine; + self.showsVerticalScrollIndicator = NO; + self.backgroundColor = KWhiteColor; +} + + + + +- (void)setRightDataArray:(NSArray *)rightDataArray { + + _rightDataArray = rightDataArray; + + [self reloadData]; + +} + +- (void)setSearchType:(NSInteger)searchType { + + _searchType = searchType; + + [self reloadData]; +} + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return self.rightDataArray.count; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} +// +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + + return 45; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + static NSString * cellID = @"cellID"; + + + + + FoundRoomsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[FoundRoomsTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + + if (self.searchType == 2) { + cell.sickModel = self.rightDataArray[indexPath.row] ; + + } + if (self.searchType == 1) { + cell.rightModel = self.rightDataArray[indexPath.row] ; + + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (self.searchType == 1) { + SearchRoomModel * model = self.rightDataArray[indexPath.row]; + + for (SearchRoomModel * subModel in self.rightDataArray) { + if (subModel == model) { + subModel.isSelected = true; + } + else + { + subModel.isSelected = false; + } + } + + if (self.rightBlock) { + if ([model.departmentName containsString:@"全部医生"]) { + self.rightBlock(model.room_Id,@"全部科室"); + }else + { + self.rightBlock(model.room_Id,model.departmentName); + + } + + } + } + + if (self.searchType == 2) { + SearchSicksModel * sickmodel = self.rightDataArray[indexPath.row]; + + for (SearchSicksModel * subModel in self.rightDataArray) { + if (subModel == sickmodel) { + subModel.isSelected = true; + } + else + { + subModel.isSelected = false; + } + } + + if (self.rightBlock) { + + if ([sickmodel.sicksName containsString:@"全部医生"]) { + self.rightBlock(sickmodel.sicks_id,sickmodel.CustomdepartmentName); + }else + { + self.rightBlock(sickmodel.sicks_id,sickmodel.sicksName); + + } + } + } + [self reloadData]; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +// +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * hearView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 0)]; + + hearView.backgroundColor = KRedColor; + + return hearView; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRoomsTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRoomsTableViewCell.h new file mode 100644 index 0000000..2ba6ead --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRoomsTableViewCell.h @@ -0,0 +1,21 @@ +// +// FoundRoomsTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import +#import "SearchRoomModel.h" +#import "SearchSicksModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface FoundRoomsTableViewCell : UITableViewCell + +@property (nonatomic, strong) SearchRoomModel * model; +@property (nonatomic, strong) SearchRoomModel * rightModel; +@property (nonatomic, strong) SearchSicksModel * sickModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRoomsTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRoomsTableViewCell.m new file mode 100644 index 0000000..f576032 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/FoundRoomsTableViewCell.m @@ -0,0 +1,118 @@ +// +// FoundRoomsTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/19. +// + +#import "FoundRoomsTableViewCell.h" + +@interface FoundRoomsTableViewCell () + +@property (nonatomic, strong) UIView * backView; + + +@property (nonatomic, strong) UILabel * roomLabel; + +@end + +@implementation FoundRoomsTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.backView = [[UIView alloc] init]; + + [self.contentView addSubview:self.backView]; + + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.bottom.left.right.mas_offset(0); + }]; + + self.roomLabel = [[UILabel alloc] init]; + + self.roomLabel.font = MEDIUMFONT(12); + + self.roomLabel.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.roomLabel]; + + [self.roomLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(kRealValue(30)); + make.right.bottom.top.mas_offset(0); + }]; + +} + +- (void)setModel:(SearchRoomModel *)model { + + _model = model; + + self.roomLabel.text = [NSString stringWithFormat:@"%@",_model.departmentName] ; + + self.roomLabel.textColor = UIColorHex(#666666); + + + if (_model.isSelected) { + self.backView.backgroundColor = KWhiteColor; + }else + { + self.backView.backgroundColor = UIColorHex(#F3F3F3); + } + +} + +- (void)setRightModel:(SearchRoomModel *)rightModel { + + _rightModel = rightModel; + + + + self.roomLabel.text = [NSString stringWithFormat:@"%@(%@)",_rightModel.departmentName,_rightModel.doctorNum] ; + + if (_rightModel.isSelected) { + + self.roomLabel.textColor = UIColorHex(#21BEBD); + }else + { + self.roomLabel.textColor = UIColorHex(#666666); + } + +} + +- (void)setSickModel:(SearchSicksModel *)sickModel { + + _sickModel = sickModel; + + self.roomLabel.text = [NSString stringWithFormat:@"%@(%@)",_sickModel.sicksName,_sickModel.doctorNum]; + + if (_sickModel.isSelected) { + + self.roomLabel.textColor = UIColorHex(#21BEBD); + }else + { + self.roomLabel.textColor = UIColorHex(#666666); + } + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyDoctorTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyDoctorTableViewCell.h new file mode 100644 index 0000000..de69cf3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyDoctorTableViewCell.h @@ -0,0 +1,18 @@ +// +// HealthyDoctorTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import +#import "DoctorRecommendModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface HealthyDoctorTableViewCell : UITableViewCell + +@property (nonatomic, strong) QuestionDoctorListModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyDoctorTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyDoctorTableViewCell.m new file mode 100644 index 0000000..38b54a0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyDoctorTableViewCell.m @@ -0,0 +1,214 @@ +// +// HealthyDoctorTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "HealthyDoctorTableViewCell.h" + +@interface HealthyDoctorTableViewCell() + +@property (nonatomic, strong) UIImageView * doctorImg; + +@property (nonatomic, strong) UILabel * namelabel; + +@property (nonatomic, strong) UILabel * introduceLabel; + +@property (nonatomic, strong) UIButton * statusBtn; + +@property (nonatomic, strong) UILabel * lvlabel; + +@property (nonatomic, strong) UILabel * hospationLabel; + +@end + + +@implementation HealthyDoctorTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.doctorImg = [[UIImageView alloc] init]; + self.doctorImg.layer.cornerRadius = 25; + self.doctorImg.layer.masksToBounds = true; + [self.contentView addSubview:self.doctorImg]; + + [self.doctorImg mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_offset(15); + make.width.height.mas_offset(50); + }]; + + + self.namelabel = [[UILabel alloc] init]; + self.namelabel.textColor = CFontColor1; + self.namelabel.font = BOLDSYSTEMFONT(14); + self.namelabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.namelabel]; + + [self.namelabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImg.mas_right).offset(8); + make.top.mas_offset(15); + make.height.mas_offset(15); + }]; + [self.namelabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.statusBtn = [[UIButton alloc] init]; +// [self.statusBtn setTitle:@"历史咨询" forState:UIControlStateNormal]; +// [self.statusBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; +// self.statusBtn.layer.cornerRadius = 4.0f; +// self.statusBtn.layer.masksToBounds = YES; +// self.statusBtn.layer.borderWidth = 1.0f; +// self.statusBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; +// self.statusBtn.titleLabel.font = MEDIUMFONT(10); + [self.contentView addSubview:self.statusBtn ]; + [self.statusBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-15); + make.top.mas_offset(15); + make.height.mas_offset(17); + make.width.mas_offset(60); + }]; + + + self.lvlabel = [[UILabel alloc] init]; + self.lvlabel.text = @""; + self.lvlabel.textColor = KWhiteColor; + self.lvlabel.backgroundColor = UIColorHex(#21BEBD); + self.lvlabel.layer.cornerRadius = 3.0f; + self.lvlabel.layer.masksToBounds = YES; + self.lvlabel.layer.borderWidth = 1.0f; + self.lvlabel.layer.borderColor = UIColorHex(#21BEBD).CGColor; + self.lvlabel.font = MEDIUMFONT(12); + self.lvlabel.textAlignment = NSTextAlignmentCenter; + [self.contentView addSubview:self.lvlabel]; + + [self.lvlabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.namelabel.mas_left); + make.top.mas_equalTo(self.namelabel.mas_bottom).offset(10); + make.width.mas_offset(55); + make.height.mas_offset(15); + }]; + + self.hospationLabel = [[UILabel alloc] init]; + self.hospationLabel.text = @""; + self.hospationLabel.textColor = UIColorHex(#666666); + self.hospationLabel.font = MEDIUMFONT(13); + self.hospationLabel.textAlignment = NSTextAlignmentCenter; + [self.contentView addSubview:self.hospationLabel]; + + [self.hospationLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.lvlabel.mas_right).offset(10); + make.top.mas_equalTo(self.lvlabel.mas_top).offset(2); + make.height.mas_offset(13); + }]; + [self.hospationLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + //新增 + + + + self.introduceLabel = [[UILabel alloc] init]; + self.introduceLabel.text = @""; + self.introduceLabel.textColor = UIColorHex(#666666); + self.introduceLabel.font = MEDIUMFONT(13); + self.introduceLabel.textAlignment = NSTextAlignmentLeft; + self.introduceLabel.numberOfLines = 3 ; + self.introduceLabel.lineBreakMode = NSLineBreakByTruncatingTail; // 超过三行时截断尾部显示省略号 + [self.contentView addSubview:self.introduceLabel]; + + [self.introduceLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImg.mas_right).offset(8); + make.right.mas_offset(-17); + make.top.mas_equalTo(self.lvlabel.mas_bottom).offset(12); + }]; + [self.introduceLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + UIView * linv = [[UIView alloc] init]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [self.contentView addSubview:linv]; + + [linv mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(@15); + make.right.mas_offset(-15); + make.height.mas_equalTo(@1); + make.top.mas_equalTo(self.introduceLabel.mas_bottom).offset(15); + make.bottom.mas_equalTo(2); + }]; +} + +- (void)setModel:(QuestionDoctorListModel *)model { + _model = model; + + if(ValidStr(_model.hospitalLevel) ) { + self.lvlabel.hidden = YES; + + }else + { + self.lvlabel.hidden = false; + self.lvlabel.text = _model.hospitalLevel; + } + + if (ValidStr(_model.departmentName)) { + + _model.departmentName = @""; + + } + + self.namelabel.attributedText = [HQCommonUtils firstString:[NSString stringWithFormat:@"%@ ",_model.doctorName] firstColor:UIColorHex(#333333) firstSize:14 secondString:[NSString stringWithFormat:@" %@",_model.doctorTitle] secondColor:UIColorHex(#333333) secondSize:13 thirdString:[NSString stringWithFormat:@" %@",_model.departmentName] thirdColor:UIColorHex(#333333) thirdSize:13]; + + self.hospationLabel.text = [NSString stringWithFormat:@" %@ ",_model.resourceName]; + + self.introduceLabel.text = [NSString stringWithFormat:@"擅长:%@",_model.goodAt]; + + UIFont *font = self.introduceLabel.font; + CGFloat lineHeight = font.lineHeight; + CGFloat maxHeight = lineHeight * 3; + + // 判断视图是否已经加载 + if ([self isViewLoaded:self.introduceLabel]) { + [self.introduceLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.lessThanOrEqualTo(@(maxHeight)); + }]; + } else { + NSLog(@"customView 还未加载到父视图中"); + } + + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_model.photo]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.doctorImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"doctorNoImage"]]; +} + +- (BOOL)isViewLoaded:(UIView *)view { + // 通过检查视图的 superview 属性来判断是否加载 + return view.superview != nil; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionHeardView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionHeardView.h new file mode 100644 index 0000000..ad7f6c1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionHeardView.h @@ -0,0 +1,32 @@ +// +// HealthyQuestionHeardView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol questionToolsProtocl + +- (void)foundQuestionAction; + +- (void)smallQuestionAction; + +- (void)myQuestionAction; + + +@end + +@interface HealthyQuestionHeardView : UIView + +@property (nonatomic, assign) CGFloat h; + +@property (nonatomic, weak)id headDelegate; +@property (nonatomic, copy) NSString * haveSessioning; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionHeardView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionHeardView.m new file mode 100644 index 0000000..c9640ab --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionHeardView.m @@ -0,0 +1,171 @@ +// +// HealthyQuestionHeardView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "HealthyQuestionHeardView.h" +#import "SDCycleScrollView.h" +#import "HealthyToolsView.h" + +@interface HealthyQuestionHeardView () + +@property (nonatomic, strong) SDCycleScrollView * adTitleView; +@property (nonatomic, strong) UIView * redRadioView; +@end + +@implementation HealthyQuestionHeardView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + [self createUI]; + } + + return self; + +} + +- (void)createUI { + + + UIView * topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kStatusBarHeight + kRealValue(18))]; + topView.backgroundColor = UIColorHex(#14BEBE); + [self addSubview:topView]; + + UILabel * detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(0 ,kStatusBarHeight , kScreenWidth, kRealValue(18))]; + detailLabel.text = @"健康咨询"; + detailLabel.font = MEDIUMFONT(18); + detailLabel.textColor = KWhiteColor; + detailLabel.textAlignment = NSTextAlignmentCenter; + [topView addSubview:detailLabel]; + + UIImageView * backImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, topView.bottom - 1, kScreenWidth, kRealValue(288))]; + backImage.image = [UIImage imageNamed:@"topBackImg"]; + [self addSubview:backImage]; + +// +// UILabel * questionLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(39), kRealValue(100), MAXFLOAT, 17)]; +// +// questionLabel.text = @"油田健康咨询"; +// +// questionLabel.font = BOLDSYSTEMFONT(17); +// +// questionLabel.textColor = KWhiteColor; +// +// questionLabel.textAlignment = NSTextAlignmentLeft; +//// +// CGSize labeSize = [questionLabel.text boundingRectWithSize:CGSizeMake(MAXFLOAT, 30) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading attributes: @{NSFontAttributeName:BOLDSYSTEMFONT(17)} context:nil].size; +// +// +// questionLabel.frame = CGRectMake(kRealValue(39), kRealValue(90), labeSize.width, 17); +// +// [backImage addSubview:questionLabel]; +// +// + + +// +// UIImageView * titleImage = [[UIImageView alloc] initWithFrame:CGRectMake(kScreenWidth - kRealValue(17) - kRealValue(201), backImage.bottom - 115, kRealValue(201), 115)]; +// titleImage.image = [UIImage imageNamed:@"questionTitleImg"]; +// [self addSubview:titleImage]; + +// UIView * adBackView = [[UIView alloc] initWithFrame:CGRectMake(0, backImage.bottom, kScreenWidth, 35)]; +// adBackView.backgroundColor = RGBA(84, 236, 203, 0.1); +// [self addSubview:adBackView]; +// +// self.adTitleView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(kRealValue(17.5), 0, kScreenWidth - kRealValue(27), 35) delegate:self placeholderImage:nil]; +// self.adTitleView .scrollDirection = UICollectionViewScrollDirectionVertical; +// self.adTitleView .onlyDisplayText = YES; +// self.adTitleView.titleLabelBackgroundColor = KClearColor; +// self.adTitleView.titleLabelTextFont = MEDIUMFONT(13); +// self.adTitleView.titleLabelTextColor = RGBA(33, 190, 189, 1); +// NSMutableArray *titlesArray = [NSMutableArray new]; +// [titlesArray addObject:@"体检通知📢:您预约了明天的体检别忘了哟!"]; +// self.adTitleView .titlesGroup = [titlesArray copy]; +// [self.adTitleView disableScrollGesture]; +// [adBackView addSubview:self.adTitleView ]; + + // + NSArray * toolsArray = @[@"allRoomDoctor",@"myQuestionHome"]; +// NSArray * colorArray = @[UIColorHex(#E7FFF6),UIColorHex(#E7FBFF),UIColorHex(#EAEFFF)]; +// NSArray * detailArray = @[@"全科医生咨询",@"专科医生咨询",@"您进行中的咨询"]; + + CGFloat toolsW = ( kScreenWidth - kRealValue(40) ) / 2; + + for (int i = 0; i < toolsArray.count; i ++) { + + HealthyToolsView * healthyView = [[HealthyToolsView alloc] initWithFrame:CGRectMake(kRealValue(15) + (toolsW + kRealValue(8)) * i , backImage.bottom - kRealValue(13) - kRealValue(126), toolsW, kRealValue(126))]; + healthyView.layer.cornerRadius = 10.0f; + healthyView.layer.masksToBounds = true; + healthyView.imageString = toolsArray[i]; + [self addSubview:healthyView]; + + + UIButton * btn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(15) + (toolsW + kRealValue(8)) * i , backImage.bottom - kRealValue(13) - kRealValue(126), toolsW, kRealValue(126))]; + [btn addTarget:self action:@selector(toolsAction:) forControlEvents:UIControlEventTouchUpInside]; + btn.tag = 100 + i ; + [self addSubview:btn]; + + } + + self.h = backImage.bottom; + + self.height = self.h; +} + +- (void)toolsAction:(UIButton *)btn { + + switch (btn.tag) { + case 100: + { + if ([self.headDelegate respondsToSelector:@selector(smallQuestionAction)]) { + + [self.headDelegate smallQuestionAction]; + } + } + break; + case 101: + { + //新增全科咨询记录 + if ([self.headDelegate respondsToSelector:@selector(foundQuestionAction)]) { + + [self.headDelegate foundQuestionAction]; + } + } + break; + case 102: + { + if ([self.headDelegate respondsToSelector:@selector(myQuestionAction)]) { + + [self.headDelegate myQuestionAction]; + } + } + break; + + default: + break; + } +} + +- (void)setHaveSessioning:(NSString *)haveSessioning { + _haveSessioning = haveSessioning; + if ([_haveSessioning integerValue] != 0) { + self.redRadioView.hidden = false; + }else + { + self.redRadioView.hidden = YES; + + } + + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionTable.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionTable.h new file mode 100644 index 0000000..9bed3d1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionTable.h @@ -0,0 +1,29 @@ +// +// HealthyQuestionTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import +#import "HealthyQuestionHeardView.h" +#import "HomeQusetionRecordsModel.h" +NS_ASSUME_NONNULL_BEGIN + +typedef void(^doctorBlock)(HomeQusetionRecordsModel * model); +typedef void(^lookMoreDoctorBlock)(); + +@interface HealthyQuestionTable : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, copy) doctorBlock tableBlock; +@property (nonatomic, copy) lookMoreDoctorBlock lookMoreBlock; + +@property (nonatomic, weak)id headDelegate; + +@property (nonatomic, copy) NSString * haveSessioning; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionTable.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionTable.m new file mode 100644 index 0000000..ec4c31d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyQuestionTable.m @@ -0,0 +1,180 @@ +// +// HealthyQuestionTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "HealthyQuestionTable.h" +#import "HealthyDoctorTableViewCell.h" +#import "HealthyQuestionHeardView.h" +#import "QustionHomeRecordsCell.h" + +@interface HealthyQuestionTable () + +@property (nonatomic, strong) HealthyQuestionHeardView * heardView; + +@end + +@implementation HealthyQuestionTable + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableHeaderView = [self createHeardView]; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; +} + +- (void)setHeadDelegate:(id)headDelegate { + + _headDelegate = headDelegate; + + self.heardView.headDelegate = _headDelegate; + +} + +- (UIView *)createHeardView { + + HealthyQuestionHeardView * heardView = [[HealthyQuestionHeardView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(332))]; + + self.heardView = heardView; + + heardView.headDelegate = self.headDelegate; + + heardView.height = heardView.h; + + return heardView; + + +} + +- (void)setHaveSessioning:(NSString *)haveSessioning { + _haveSessioning = haveSessioning; + self.heardView.haveSessioning = _haveSessioning; + +} +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return self.dataArray.count; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + static NSString * cellID = @"cellID"; + + + QustionHomeRecordsCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[QustionHomeRecordsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.model = self.dataArray[indexPath.row]; + cell.backgroundColor = CViewBgColor; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + HomeQusetionRecordsModel * model = self.dataArray[indexPath.row]; + + if (self.tableBlock) { + + self.tableBlock(model); + } + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return kRealValue(48); +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * sectionHeardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(45))]; + sectionHeardView.backgroundColor = CViewBgColor; + + UILabel * todayLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(16), 190, 16)]; + + todayLabel.text = @"专家咨询记录"; + + todayLabel.textAlignment = NSTextAlignmentLeft; + + todayLabel.textColor = CFontColor1; + + todayLabel.font = BOLDSYSTEMFONT(16); + + [sectionHeardView addSubview:todayLabel]; + + YYLabel * morelabel = [[YYLabel alloc] initWithFrame:CGRectMake(kScreenWidth - 165 , kRealValue(17), 150, 15)]; + + morelabel.text = @"更多 >"; + morelabel.textAlignment = NSTextAlignmentRight; + morelabel.textColor = UIColorHex(#999999); + morelabel.font = SYSTEMFONT(14); + MJWeakSelf + [morelabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + if (self.lookMoreBlock) { + self.lookMoreBlock(); + } + }]; + [sectionHeardView addSubview:morelabel]; + + return sectionHeardView; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyToolsView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyToolsView.h new file mode 100644 index 0000000..a46268d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyToolsView.h @@ -0,0 +1,24 @@ +// +// HealthyToolsView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HealthyToolsView : UIView + +@property (nonatomic, copy) NSString * nameString; + +@property (nonatomic, copy) NSString * detailString; + +@property (nonatomic, copy) NSString * imageString; + +@property (nonatomic, strong) UIColor * backColor; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyToolsView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyToolsView.m new file mode 100644 index 0000000..7bfa93e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HealthyToolsView.m @@ -0,0 +1,86 @@ +// +// HealthyToolsView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "HealthyToolsView.h" + +@interface HealthyToolsView () + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) UILabel * detailLabel; + +@property (nonatomic, strong) UIImageView * toolsImage; + +@end + + + +@implementation HealthyToolsView + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + + } + + return self; +} + +- (void)createUI { + +// self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(8), kRealValue(17), 90, 13)]; +// self.nameLabel.text = @""; +// self.nameLabel.textColor = CFontColor1; +// self.nameLabel.font = BOLDSYSTEMFONT(14); +// self.nameLabel.textAlignment = NSTextAlignmentLeft; +// [self addSubview:self.nameLabel]; +// +// self.detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(8), self.nameLabel.bottom + kRealValue(9), self.width - kRealValue(16), 13)]; +// self.detailLabel.text = @""; +// self.detailLabel.textColor = UIColorHex(#666666); +// self.detailLabel.font = MEDIUMFONT(13); +// self.detailLabel.textAlignment = NSTextAlignmentLeft; +// [self addSubview:self.detailLabel]; + + self.toolsImage = [[UIImageView alloc] initWithFrame:CGRectMake(0 , 0, self.width, self.height)]; + [self addSubview:self.toolsImage]; + +} + +- (void)setBackColor:(UIColor *)backColor { + + _backColor = backColor; + + self.backgroundColor = _backColor; +} + +- (void)setNameString:(NSString *)nameString { + + _nameString = nameString; + + self.nameLabel.text = _nameString; + +} + +- (void)setDetailString:(NSString *)detailString { + + _detailString = detailString; + + self.detailLabel.text = _detailString; +} + +- (void)setImageString:(NSString *)imageString { + + _imageString = imageString; + + self.toolsImage.image = [UIImage imageNamed:_imageString]; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalListTableCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalListTableCell.h new file mode 100644 index 0000000..4eaea61 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalListTableCell.h @@ -0,0 +1,19 @@ +// +// HospitalListTableCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import +#import "HospitalListTableCell.h" +#import "HospitalInfoModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface HospitalListTableCell : UITableViewCell + +@property (nonatomic , strong) HospitalInfoModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalListTableCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalListTableCell.m new file mode 100644 index 0000000..c5396af --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalListTableCell.m @@ -0,0 +1,352 @@ +// +// HospitalListTableCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import "HospitalListTableCell.h" +#import "UILabel+ChangeLineSpaceAndWordSpace.h" +#import "TYMapNavSheet.h" + + +@interface HospitalListTableCell () +{ + TYMapNavSheet * TYNavSheet; +} + +@property (nonatomic, strong) UIView * backView; + +@property (nonatomic, strong) UIImageView * hospitalImage; + +@property (nonatomic, strong) UILabel * lvLabel; + +@property (nonatomic, strong) UILabel * hospitalName; + +@property (nonatomic, strong) UILabel * addressLabel; + +@property (nonatomic, strong) UILabel * roomLabel; + +@property (nonatomic, strong) UILabel * discanceLabel; + +@property (nonatomic, strong) UIButton * mapNavButton; + +@property (nonatomic, strong) UIImageView * locatImg; +@end + +@implementation HospitalListTableCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; + +} + + +- (void)createUI { + + self.backView = [[UIView alloc] init]; + self.backView.backgroundColor = KWhiteColor; + [self.contentView addSubview:self.backView]; + + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.right.mas_offset(-15); + make.top.mas_offset(5); + make.bottom.mas_offset(-5); + }]; + + self.hospitalImage = [[UIImageView alloc] init]; + self.hospitalImage.layer.cornerRadius = 10.0f; + self.hospitalImage.layer.masksToBounds = true; + self.hospitalImage.contentMode = UIViewContentModeScaleAspectFill; + [self.backView addSubview:self.hospitalImage]; + + [self.hospitalImage mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(10); + make.width.height.mas_offset(63); + make.top.mas_offset(15); + }]; + + self.lvLabel = [[UILabel alloc] init]; + self.lvLabel.layer.cornerRadius = 3.0f; + self.lvLabel.layer.masksToBounds = true; + self.lvLabel.text = @"二甲"; + self.lvLabel.textColor = KWhiteColor; + self.lvLabel.backgroundColor = UIColorHex(#21BEBD); + self.lvLabel.textAlignment = NSTextAlignmentCenter; + self.lvLabel.font = MEDIUMFONT(9); + [UILabel changeWordSpaceForLabel:self.lvLabel WithSpace:2]; + [self.backView addSubview:self.lvLabel]; + + [self.lvLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.hospitalImage.mas_right).offset(10); + make.top.mas_offset(20); + make.height.mas_offset(15); + + }]; + + [self.lvLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.hospitalName = [[UILabel alloc] init]; + self.hospitalName.text = @"生命科学专科医院"; + self.hospitalName.font = BOLDSYSTEMFONT(14); + self.hospitalName.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.hospitalName]; + + [self.hospitalName mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.lvLabel.mas_right).offset(10); + make.right.mas_offset(-30); + make.top.mas_offset(20); + make.height.mas_offset(15); + + }]; + + + + self.roomLabel = [[UILabel alloc] init]; + self.roomLabel.text = @"重点科室:眼科、病理科"; + self.roomLabel.font = MEDIUMFONT(12); + self.roomLabel.textAlignment = NSTextAlignmentLeft; + self.roomLabel.textColor = CFontColor1; + [self.backView addSubview:self.roomLabel]; + + [self.roomLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.hospitalImage.mas_right).offset(10); + make.right.mas_offset(-30); + make.top.mas_equalTo(self.hospitalName.mas_bottom).offset(5); + make.height.mas_offset(15); + + }]; + + + UIImageView * locatImg = [[UIImageView alloc] init]; + self.locatImg = locatImg; + locatImg.image = [UIImage imageNamed:@"hospatilAddress"]; + + [self.backView addSubview:locatImg]; + + [locatImg mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.hospitalImage.mas_right).offset(10); + make.width.mas_offset(10); + make.top.mas_equalTo(self.roomLabel.mas_bottom).offset(10); + make.height.mas_offset(12); + + }]; + + + self.discanceLabel = [[UILabel alloc] init]; + self.discanceLabel.text = @"km"; + self.discanceLabel.font = MEDIUMFONT(13); + self.discanceLabel.textAlignment = NSTextAlignmentLeft; + self.discanceLabel.textColor = CFontColor1; + [self.backView addSubview:self.discanceLabel]; + + [self.discanceLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(locatImg.mas_right).offset(10); + make.top.mas_equalTo(locatImg.mas_top).offset(-1); + make.height.mas_offset(15); + + }]; + + [self.discanceLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.mapNavButton = [[UIButton alloc] init]; + [self.mapNavButton setTitle:@"导航" forState:UIControlStateNormal]; + [self.mapNavButton setTitleColor:UIColorHex(#3390FF) forState:UIControlStateNormal]; + self.mapNavButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + self.mapNavButton.titleLabel.font = SYSTEMFONT(12); + [self.mapNavButton addTarget:self action:@selector(mapNavLocationAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.backView addSubview:self.mapNavButton]; + + [self.mapNavButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.discanceLabel.mas_right).offset(8); + make.width.mas_offset(60); + make.top.mas_equalTo(locatImg.mas_top).offset(-3); + make.height.mas_offset(20); + }]; + + + self.addressLabel = [[UILabel alloc] init]; + self.addressLabel.text = @"1111111"; + self.addressLabel.font = MEDIUMFONT(13); + self.addressLabel.textColor = UIColorHex(#999999); + self.addressLabel.numberOfLines = 0; + [self.backView addSubview:self.addressLabel]; + + [self.addressLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.hospitalImage.mas_right).offset(10); + make.right.mas_offset(-20); + make.top.mas_equalTo(self.locatImg.mas_bottom).offset(10); + make.bottom.mas_equalTo(self.backView.mas_bottom); + }]; + + [self.addressLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + + [self.backView mas_updateConstraints:^(MASConstraintMaker *make) { + + make.bottom.mas_equalTo(self.addressLabel.mas_bottom).offset(20); + }]; +} + + +- (void)setModel:(HospitalInfoModel *)model { + + _model = model; + + self.hospitalName.text = _model.resourceName; + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_model.img]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.hospitalImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:IMAGE_NAMED(@"hospitalNoimage")]; + + if (ValidStr(_model.level)) { + self.lvLabel.hidden = YES; + [self.hospitalName mas_updateConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.hospitalImage.mas_right).offset(10); + make.right.mas_offset(-30); + make.top.mas_equalTo(self.hospitalName.mas_bottom).offset(10); + make.height.mas_offset(15); + + }]; + + }else + { + self.lvLabel.hidden = NO; + + self.lvLabel.text = [NSString stringWithFormat:@" %@ ",_model.level]; + + + } +// + if (ValidStr(_model.keyDepartments)) { + self.roomLabel.hidden = true; + [self.locatImg mas_updateConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.hospitalName.mas_bottom).offset(10); + }]; + }else{ + self.roomLabel.hidden = false; + self.roomLabel.text = [NSString stringWithFormat:@"重点科室:%@",_model.keyDepartments]; + [self.locatImg mas_updateConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.roomLabel.mas_bottom).offset(10); + }]; + } +// +// if (ValidStr(_model.keyDepartments)) { +// +// self.roomLabel.hidden = true; +// self.locatImg.top = self.hospitalName.bottom + 10; +// self.discanceLabel.top = self.locatImg.top; +// self.mapNavButton.top = self.locatImg.top; +// self.addressLabel.top = self.locatImg.bottom + 7; +// +// }else +// { +// self.roomLabel.hidden = false; +// self.roomLabel.text = _model.keyDepartments; +// self.locatImg.top = self.roomLabel.bottom + 10; +// self.discanceLabel.top = self.locatImg.top; +// self.mapNavButton.top = self.locatImg.top; +// self.addressLabel.top = self.locatImg.bottom + 7; +// } +// + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + + NSLog(@"经度:%f 纬度:%f", longitude, latitude); + //1.将两个经纬度点转成投影点 + MAMapPoint point1 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(_model.latitude,_model.longitude)); + MAMapPoint point2 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(latitude,longitude)); + //2.计算距离 + CLLocationDistance distance = MAMetersBetweenMapPoints(point1,point2); + NSLog(@"距离:%f", distance); + self.discanceLabel.text = [NSString stringWithFormat:@"%.2fkm",distance/1000]; + + + if (ValidStr(_model.address)) { + self.addressLabel.hidden = true; + [self.backView mas_updateConstraints:^(MASConstraintMaker *make) { + + make.bottom.mas_equalTo(self.hospitalImage.mas_bottom).offset(5); + }]; + + }else + { + self.addressLabel.hidden = false; + self.addressLabel.text = [NSString stringWithFormat:@"%@",_model.address]; + +// CGFloat labH = [HQCommonUtils getSpaceLabelHeight: self.addressLabel withStr:self.addressLabel.text withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:kScreenWidth - 110 withLineSpacing:5]; +// [self.addressLabel mas_updateConstraints:^(MASConstraintMaker *make) { +// make.height.mas_offset(labH); +// }]; + [self.backView mas_updateConstraints:^(MASConstraintMaker *make) { + + make.bottom.mas_equalTo(self.addressLabel.mas_bottom).offset(5); + }]; + } +} + +- (void)mapNavLocationAction:(UIButton *)navBtn { + + TYNavSheet = [[TYMapNavSheet alloc]init]; + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + +// NSLog(@"经度:%f 纬度:%f", longitude, latitude); +// //1.将两个经纬度点转成投影点 +// MAMapPoint point1 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(model.latitude,model.longitude)); +// MAMapPoint point2 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(latitude,longitude)); +// //2.计算距离 +// CLLocationDistance distance = MAMetersBetweenMapPoints(point1,point2); + NSMutableDictionary * Dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"我的位置",@"startName",self.model.address,@"endName", nil]; + [TYNavSheet ShowMapNavSheetSuperView:[HQCommonUtils getCurrentVC] withLocationDic:Dic withstartCoor:CLLocationCoordinate2DMake(latitude, longitude) withendCoor:CLLocationCoordinate2DMake(self.model.latitude, self.model.longitude)]; + +} + +-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + [TYNavSheet actionSheetBtnClick:buttonIndex]; +} + + + + +- (void)layoutIfNeeded { + [super layoutIfNeeded]; + + self.backView.layer.cornerRadius = 4.0f; + self.backView.layer.masksToBounds = YES; + self.backView.layer.shadowColor = [UIColor grayColor].CGColor; +// self.layer.shadowOffset = CGSizeMake(3, 3);//有偏移量的情况,默认向右向下有阴影 + self.backView.layer.shadowOffset = CGSizeZero; //设置偏移量为0,四周都有阴影 + self.backView.layer.shadowRadius = 3.0f;//阴影半径,默认3 + self.backView.layer.shadowOpacity = 0.3f;//阴影透明度,默认0 + self.backView.layer.masksToBounds = NO; + self.backView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.backView.bounds cornerRadius:self.backView.layer.cornerRadius].CGPath; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTiitleTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTiitleTableViewCell.h new file mode 100644 index 0000000..34c5283 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTiitleTableViewCell.h @@ -0,0 +1,16 @@ +// +// EvaluationTiitleTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface EvaluationTiitleTableViewCell : UITableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTiitleTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTiitleTableViewCell.m new file mode 100644 index 0000000..50d451f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTiitleTableViewCell.m @@ -0,0 +1,64 @@ +// +// EvaluationTiitleTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "EvaluationTiitleTableViewCell.h" + +@implementation EvaluationTiitleTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + UILabel * titLabel = [[UILabel alloc] init]; + titLabel.font = BOLDSYSTEMFONT(16); + titLabel.textAlignment = NSTextAlignmentLeft; + titLabel.text = @"患者评价"; + [self.contentView addSubview:titLabel]; + + [titLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(16); + make.width.mas_offset(100); + make.height.mas_offset(16); + make.top.mas_offset(23); + make.bottom.mas_offset(10); + }]; + + YYLabel * moreEvaLabel = [[YYLabel alloc] init]; + moreEvaLabel.text = @"更多评价 >"; + moreEvaLabel.textColor = UIColorHex(#999999); + moreEvaLabel.textAlignment = NSTextAlignmentRight; + [self.contentView addSubview:moreEvaLabel]; + + [moreEvaLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-16); + make.width.mas_offset(100); + make.height.mas_offset(14); + make.top.bottom.mas_offset(23); + }]; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTitleTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTitleTableViewCell.h new file mode 100644 index 0000000..fd4f53a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTitleTableViewCell.h @@ -0,0 +1,20 @@ +// +// EvaluationTitleTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/1. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^lookMoreEvaluation)(void); + +@interface EvaluationTitleTableViewCell : UITableViewCell + +@property (nonatomic, copy) lookMoreEvaluation moreBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTitleTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTitleTableViewCell.m new file mode 100644 index 0000000..83b6b34 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/EvaluationTitleTableViewCell.m @@ -0,0 +1,85 @@ +// +// EvaluationTitleTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/1. +// + +#import "EvaluationTitleTableViewCell.h" + +@implementation EvaluationTitleTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + + +- (void)createUI { + + UILabel * heardLabel = [[UILabel alloc] init]; + heardLabel.text = @"用户评价"; + heardLabel.textColor = UIColorHex(#333333); + heardLabel.font = BOLDSYSTEMFONT(16); + [self.contentView addSubview:heardLabel]; + + [heardLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(13); + make.height.mas_offset(16); + make.top.mas_offset(23); + make.bottom.mas_offset(-16); + }]; + + YYLabel * moreLabel = [[YYLabel alloc]init]; + moreLabel.text = @"更多评价 "; + + [self.contentView addSubview:moreLabel]; + + [moreLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-16); + make.height.mas_offset(16); + make.top.mas_offset(23); + make.bottom.mas_offset(-16); + }]; + + UIImage *image = [UIImage imageNamed:@"ic_more_info"]; + + NSMutableAttributedString * attri = [[NSMutableAttributedString alloc] initWithString:moreLabel.text]; + + NSMutableAttributedString * attachText = [NSMutableAttributedString attachmentStringWithContent:image contentMode:UIViewContentModeCenter attachmentSize:CGSizeMake(6, 11) alignToFont:[UIFont boldSystemFontOfSize:13] alignment:YYTextVerticalAlignmentCenter]; //content:内容  size:图片尺寸 alignToFont:字符串内字体的格式 + [attri appendAttributedString:attachText]; + + moreLabel.attributedText = attri; + + moreLabel.textAlignment = NSTextAlignmentRight; + + moreLabel.font = MEDIUMFONT(13); + moreLabel.textColor = UIColorHex(#999999); + + MJWeakSelf + [moreLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + if (weakSelf.moreBlock) { + + weakSelf.moreBlock(); + } + + }]; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilDoctorCollectionViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilDoctorCollectionViewCell.h new file mode 100644 index 0000000..80895f7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilDoctorCollectionViewCell.h @@ -0,0 +1,19 @@ +// +// HospatilDoctorCollectionViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/1. +// + +#import +#import "FoundExpertModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HospatilDoctorCollectionViewCell : UICollectionViewCell + +@property (nonatomic, strong) DoctorListModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilDoctorCollectionViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilDoctorCollectionViewCell.m new file mode 100644 index 0000000..3cce6be --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilDoctorCollectionViewCell.m @@ -0,0 +1,106 @@ +// +// HospatilDoctorCollectionViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/1. +// + +#import "HospatilDoctorCollectionViewCell.h" + +@interface HospatilDoctorCollectionViewCell () + + +@property (nonatomic, strong) UIImageView * doctorImage; + +@property (nonatomic, strong) UILabel * doctorName; + +@property (nonatomic, strong) UILabel * jobLabel; + +@end + +@implementation HospatilDoctorCollectionViewCell + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; + +} + +- (void)createUI { + + + self.doctorImage = [[UIImageView alloc] init]; + self.doctorImage.image = IMAGE_NAMED(@"placeholdIMG"); + self.doctorImage.layer.cornerRadius = 25; + self.doctorImage.layer.masksToBounds = YES; + [self addSubview:self.doctorImage]; + + [self.doctorImage mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(16); + make.top.mas_offset(15); + make.width.height.mas_offset(50); + }]; + + self.doctorName = [[UILabel alloc] init]; + self.doctorName.textColor = CFontColor1; + self.doctorName.font = BOLDSYSTEMFONT(14); + self.doctorName.text = @"张大夫"; + self.doctorName.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.doctorName]; + + [self.doctorName mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImage.mas_right).offset(9); + make.top.mas_offset(15); + make.height.mas_offset(14); + }]; + [self.doctorName setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + + self.jobLabel = [[UILabel alloc] init]; + self.jobLabel.textColor = UIColorHex(#333333); + self.jobLabel.font = BOLDSYSTEMFONT(14); + self.jobLabel.text = @"主任医师 内科"; + self.jobLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.jobLabel]; + + [self.jobLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorName); + make.top.mas_equalTo(self.doctorName.mas_bottom).offset(10); + }]; + + [self.jobLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + +} + +- (void)setModel:(DoctorListModel *)model { + + _model = model; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_model.photo]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + + [self.doctorImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:IMAGE_NAMED(@"doctorNoImage")]; + self.doctorName.text = _model.doctorName; + if (!ValidStr(_model.departmentName)) { + self.jobLabel.text = [NSString stringWithFormat:@"%@ %@",_model.doctorTitle,_model.departmentName]; + + }else + { + self.jobLabel.text = [NSString stringWithFormat:@"%@",_model.doctorTitle]; + } + +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilIntroduceTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilIntroduceTableViewCell.h new file mode 100644 index 0000000..db82c77 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilIntroduceTableViewCell.h @@ -0,0 +1,16 @@ +// +// HospatilIntroduceTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HospatilIntroduceTableViewCell : UITableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilIntroduceTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilIntroduceTableViewCell.m new file mode 100644 index 0000000..f762728 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospatilIntroduceTableViewCell.m @@ -0,0 +1,74 @@ +// +// HospatilIntroduceTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "HospatilIntroduceTableViewCell.h" + +@implementation HospatilIntroduceTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + UILabel * locationLabel = [[UILabel alloc] init]; + + locationLabel.text = @"医院简介"; + + locationLabel.font = BOLDSYSTEMFONT(16); + + locationLabel.textColor = CFontColor1; + + [self.contentView addSubview:locationLabel]; + + [locationLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(16); + make.top.mas_offset(15); + make.width.mas_offset(100); + make.height.mas_offset(16); + }]; + + UILabel * disanceLabel = [[UILabel alloc] init]; + + disanceLabel.text = @"西京医院坐落在美丽的古都西安,为第四军医大学第一附属医院,前身是1939年延安抗战岁月里诞生的中央医院,1954年与原第五军医大学附属医院合并。2017年转隶空军。 [1] 医院始终秉承践行宗旨、救死扶伤的“使命文化”,勇于争先、不断超越的“创新文化”,精益求精、追求卓越的“精品文化”,公平竞争、和谐发展的“阳光文化”,锐意进取、创新发展,先后获全国百佳医院、全国百姓放心示范医院、全国拥政爱民模范单位、全国抗震救灾英雄集体、全军医院建设先进单位、全军为部队服务先进医院、总后先进师旅团单位和总后先进党委等殊荣。在国内权威部门发布的全国医院综合排名中,医院综合实力跻身全国五强,院名被国家工商总局认定为中国驰名商标。"; + + disanceLabel.font = BOLDSYSTEMFONT(16); + + disanceLabel.textColor = CFontColor1; + + disanceLabel.numberOfLines = 0; + + [self.contentView addSubview:disanceLabel]; + + [disanceLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(16); + make.top.mas_equalTo(locationLabel.mas_bottom).offset(16); + make.right.mas_offset(-16); + make.bottom.mas_offset(-10); + }]; + [disanceLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; +} + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalEvaluationTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalEvaluationTableViewCell.h new file mode 100644 index 0000000..148a986 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalEvaluationTableViewCell.h @@ -0,0 +1,19 @@ +// +// HospitalEvaluationTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import +#import "EvaluatListModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HospitalEvaluationTableViewCell : UITableViewCell + +@property (nonatomic, strong) EvaluatListModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalEvaluationTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalEvaluationTableViewCell.m new file mode 100644 index 0000000..cff8c33 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalEvaluationTableViewCell.m @@ -0,0 +1,160 @@ +// +// HospitalEvaluationTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "HospitalEvaluationTableViewCell.h" +#import "FSXBStarRateView.h" + + +@interface HospitalEvaluationTableViewCell () + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) FSXBStarRateView * starview; + +@property (nonatomic, strong) UILabel * roomLabel; + +@property (nonatomic, strong) UILabel * evaluatLabel; + +@property (nonatomic, strong) UILabel * typeLabel; + +@property (nonatomic, strong) UILabel * timeLabel; + +@end + +@implementation HospitalEvaluationTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + + } + return self; +} + +- (void)createUI { + + self.nameLabel = [[UILabel alloc] init]; + self.nameLabel.textColor = CFontColor1; + self.nameLabel.font = BOLDSYSTEMFONT(14); + self.nameLabel.text = @"匿名用户"; + self.nameLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.nameLabel]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(14); + make.top.mas_offset(15); + make.height.mas_offset(14); + + }]; + [self.nameLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.starview = [[FSXBStarRateView alloc] initWithFrame:CGRectMake(0, 20, 100, 15) numberOfStars:5 rateStyle:HalfStar isAnination:YES finish:^(CGFloat currentScore) { + NSLog(@"%.2f",currentScore); + }]; + self.starview.enable = YES; + self.starview.currentScore = 3; + [self.contentView addSubview:self.starview]; + + [self.starview mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.nameLabel.mas_right).offset(8); + make.top.mas_equalTo(self.nameLabel); + make.height.mas_offset(15); + make.width.mas_offset(100); + }]; + self.roomLabel = [[UILabel alloc] init]; + self.roomLabel.textColor = UIColorHex(#3390FF); + self.roomLabel.font = MEDIUMFONT(12); + self.roomLabel.text = @""; + self.roomLabel.textAlignment = NSTextAlignmentRight; + [self.contentView addSubview:self.roomLabel]; + + [self.roomLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-15); + make.top.mas_offset(15); + make.height.mas_offset(14); + + }]; + [self.roomLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + +// self.typeLabel = [[UILabel alloc] init]; +// self.typeLabel.textColor = UIColorHex(#999999); +// self.typeLabel.font = MEDIUMFONT(12); +// self.typeLabel.text = @"王先生 图文咨询"; +// self.typeLabel.textAlignment = NSTextAlignmentLeft; +// [self.contentView addSubview:self.typeLabel]; +// +// [self.typeLabel mas_makeConstraints:^(MASConstraintMaker *make) { +// +// make.left.mas_offset(15); +// make.bottom.mas_offset(-17); +// make.height.mas_offset(14); +// }]; +// [self.typeLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.timeLabel = [[UILabel alloc] init]; + self.timeLabel.textColor = UIColorHex(#999999); + self.timeLabel.font = MEDIUMFONT(12); + self.timeLabel.text = @"2023-01-15"; + self.timeLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.timeLabel]; + + [self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.right.mas_offset(-16); + make.bottom.mas_equalTo(@-17); + make.height.mas_offset(14); + + }]; + + + self.evaluatLabel = [[UILabel alloc] init]; + self.evaluatLabel.textColor = UIColorHex(#999999); + self.evaluatLabel.font = MEDIUMFONT(12); + self.evaluatLabel.text = @""; + self.evaluatLabel.numberOfLines = 0; + self.evaluatLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.evaluatLabel]; + + [self.evaluatLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.right.mas_offset(-16); + make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(15); + make.bottom.mas_equalTo(self.timeLabel.mas_top).offset(-11); + }]; + + [self.evaluatLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + +} + +- (void)setModel:(EvaluatListModel *)model { + + _model = model; + //1 图文 2音 + self.evaluatLabel.text = _model.context; + self.starview.currentScore = [_model.score floatValue]; + self.timeLabel.text = _model.time; + self.nameLabel.text = _model.userName; + if (!ValidStr(_model.officeName)) { + self.roomLabel.text = _model.officeName; + + } +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalLocationTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalLocationTableViewCell.h new file mode 100644 index 0000000..a9554d4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalLocationTableViewCell.h @@ -0,0 +1,19 @@ +// +// HospitalLocationTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HospitalLocationTableViewCell : UITableViewCell + +@property (nonatomic, strong) MAMapView * mapView ; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalLocationTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalLocationTableViewCell.m new file mode 100644 index 0000000..99d55c7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalLocationTableViewCell.m @@ -0,0 +1,118 @@ +// +// HospitalLocationTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "HospitalLocationTableViewCell.h" + +@interface HospitalLocationTableViewCell () + + +@end + +@implementation HospitalLocationTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + UILabel * locationLabel = [[UILabel alloc] init]; + + locationLabel.text = @"医院位置"; + + locationLabel.font = BOLDSYSTEMFONT(16); + + locationLabel.textColor = CFontColor1; + + [self.contentView addSubview:locationLabel]; + + [locationLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(16); + make.top.mas_offset(15); + make.width.mas_offset(100); + make.height.mas_offset(16); + }]; + + // ///初始化地图 + self.mapView = [[MAMapView alloc] init]; // 开启定位 + + self.mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + self.mapView.showsCompass = YES; //设置成NO表示关闭指南针;YES表示显示指南针 + self.mapView.compassOrigin = CGPointMake(self.mapView.compassOrigin.x, 222); + self.mapView.showsScale = YES; //设置成NO表示不显示比例尺;YES表示显示比例尺 + self.mapView.delegate = self; + [self.contentView addSubview:self.mapView]; + MAUserLocationRepresentation *r = [[MAUserLocationRepresentation alloc] init]; + r.showsAccuracyRing = YES;///精度圈是否显示,默认YES + r.showsHeadingIndicator = YES;///是否显示方向指示(MAUserTrackingModeFollowWithHeading模式开启)。默认为YES + r.enablePulseAnnimation = YES;///内部蓝色圆点是否使用律动效果, 默认YES +// r.image = [UIImage imageNamed:@"你的图片"]; ///定位图标, 与蓝色原点互斥 + [self.mapView updateUserLocationRepresentation:r]; + + [self.mapView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(16); + make.top.mas_equalTo(locationLabel.mas_bottom).offset(16); + make.height.mas_offset(132); + make.right.mas_offset(-16); + }]; + + UILabel * disanceLabel = [[UILabel alloc] init]; + + disanceLabel.text = @"北京市西城区西什库大街8号"; + + disanceLabel.font = BOLDSYSTEMFONT(16); + + disanceLabel.textColor = CFontColor1; + + [self.contentView addSubview:disanceLabel]; + + [disanceLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(16); + make.top.mas_equalTo(self.mapView.mas_bottom).offset(16); + make.height.mas_offset(13); + make.right.mas_offset(-16); + make.bottom.mas_offset(-10); + }]; +} +#pragma mark - MAMapViewDelegate + +- (void)mapViewRequireLocationAuth:(CLLocationManager *)locationManager +{ + [locationManager requestAlwaysAuthorization]; +} + + +- (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated +{ +} + + +- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation +{ + if (updatingLocation) + { + NSLog(@"userlocation :%@", userLocation.location); + } +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainDoctorCollectView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainDoctorCollectView.h new file mode 100644 index 0000000..f53dbe4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainDoctorCollectView.h @@ -0,0 +1,25 @@ +// +// HospitalMainDoctorCollectView.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/1. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^lookMoreDocotorBlock)(void); +typedef void(^DcotorDetailBlock)(NSString * doctorID, NSString * doctorName); + +@interface HospitalMainDoctorCollectView : UICollectionView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, copy) lookMoreDocotorBlock doctorBlock; +@property (nonatomic, copy) DcotorDetailBlock collSelectBlock; + +@property (nonatomic, copy) NSDictionary * parmDic; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainDoctorCollectView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainDoctorCollectView.m new file mode 100644 index 0000000..3195bd2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainDoctorCollectView.m @@ -0,0 +1,150 @@ +// +// HospitalMainDoctorCollectView.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/1. +// + +#import "HospitalMainDoctorCollectView.h" +#import "HospatilDoctorCollectionViewCell.h" + + +@interface HospitalMainDoctorCollectView () + + +@property (nonatomic, strong) UILabel * sectLabel; + +@end + +@implementation HospitalMainDoctorCollectView + + +- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout +{ + if (self = [super initWithFrame:frame collectionViewLayout:layout]) + { + [self createUI]; + } + return self; +} + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; + +} + +- (void)setParmDic:(NSDictionary *)parmDic { + + _parmDic = parmDic; + NSString * keshiNumer = _parmDic[@"departmentNum"]; + NSString *yishengNumer = _parmDic[@"doctorNum"]; + if (ValidStr(keshiNumer)) { + keshiNumer = @"-"; + } + if (ValidStr(yishengNumer)) { + yishengNumer = @"-"; + } + self.sectLabel.text =[NSString stringWithFormat:@"(%@个科室%@位专家)",keshiNumer,yishengNumer]; + [self reloadData]; +} + + +- (void)createUI +{ + self.delegate = self; + self.dataSource = self; + self.backgroundColor = KWhiteColor; + [self registerClass:[HospatilDoctorCollectionViewCell class] forCellWithReuseIdentifier:@"foundCell"]; + [self registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"]; + + +} + +-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ + + return 1; +} + +-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + // NSLog(@"guguiiuigiuggiuugi%ld",_productArr.count); + return self.dataArray.count; +} + + + +-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ + + HospatilDoctorCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"foundCell" forIndexPath:indexPath]; + + cell.backgroundColor = KWhiteColor; + cell.model = self.dataArray[indexPath.item]; + return cell; +} +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath +{ + + return CGSizeMake((kScreenWidth - 60)/2,75); + +} + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { + return CGSizeMake(kScreenWidth, 30); +} + + +-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath +{ + DoctorListModel * model = self.dataArray[indexPath.item]; + if (self.collSelectBlock) { + self.collSelectBlock(model.doctorId, model.doctorName); + } + +} + +- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{ + + UICollectionReusableView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"forIndexPath:indexPath]; + + UILabel * heardLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(10), kScreenWidth, 20)]; + heardLabel.text = @"科室医生"; + heardLabel.textColor = UIColorHex(#333333); + heardLabel.font = BOLDSYSTEMFONT(16); + CGFloat w = [HQCommonUtils getLengthFromText:heardLabel.text andFontSize:16]; + heardLabel.width = w; + [header addSubview:heardLabel]; + + UILabel * lastLabel = [[UILabel alloc] initWithFrame:CGRectMake(heardLabel.right, kRealValue(10), kScreenWidth, 20)]; + self.sectLabel = lastLabel; + lastLabel.textColor = UIColorHex(#666666); + lastLabel.font = BOLDSYSTEMFONT(11); + [header addSubview:lastLabel]; + + YYLabel * moreLabel = [[YYLabel alloc]initWithFrame:CGRectMake(kScreenWidth - 170,kRealValue(10), 120, 17)]; + moreLabel.text = @"查看全部 "; + moreLabel.textColor = UIColorHex(#999999); + [header addSubview:moreLabel]; + + UIImage *image = [UIImage imageNamed:@"ic_more_info"]; + + NSMutableAttributedString * attri = [[NSMutableAttributedString alloc] initWithString:moreLabel.text]; + + NSMutableAttributedString * attachText = [NSMutableAttributedString attachmentStringWithContent:image contentMode:UIViewContentModeCenter attachmentSize:CGSizeMake(6, 11) alignToFont:[UIFont boldSystemFontOfSize:13] alignment:YYTextVerticalAlignmentCenter]; //content:内容  size:图片尺寸 alignToFont:字符串内字体的格式 + [attri appendAttributedString:attachText]; + + moreLabel.attributedText = attri; + + moreLabel.textAlignment = NSTextAlignmentRight; + + MJWeakSelf + [moreLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + + weakSelf.doctorBlock(); + }]; + + header.backgroundColor = KWhiteColor; + return header; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainHeardView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainHeardView.h new file mode 100644 index 0000000..b91b3a5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainHeardView.h @@ -0,0 +1,22 @@ +// +// HospitalMainHeardView.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import + +typedef void(^lookHospitalJianjie)(void); +NS_ASSUME_NONNULL_BEGIN + +@interface HospitalMainHeardView : UIView + +@property (nonatomic, copy) lookHospitalJianjie lookBlock; + +@property (nonatomic, copy) NSString * hospitalString; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainHeardView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainHeardView.m new file mode 100644 index 0000000..e645ef6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainHeardView.m @@ -0,0 +1,131 @@ +// +// HospitalMainHeardView.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "HospitalMainHeardView.h" +#import "YYLabel.h" +#import "NSAttributedString+YYText.h" + +@interface HospitalMainHeardView () + +@property (nonatomic,strong) YYLabel *label;; + +@end + +@implementation HospitalMainHeardView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + + + [self createUI]; + } + + return self; + +} + +- (void)createUI { + + UILabel * titLabel = [[UILabel alloc] initWithFrame:CGRectMake(17, 18.5, 100, 16)]; + titLabel.font = BOLDSYSTEMFONT(16); + titLabel.textColor = UIColorHex(#333333); + titLabel.text = @"医院简介"; + titLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:titLabel]; + + NSMutableAttributedString *text = [NSMutableAttributedString new]; +// // 添加文本 +// NSString *title = @""; + +// [text appendAttributedString:[[NSAttributedString alloc] initWithString:title attributes:nil]]; +// NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; +// [paragraphStyle setLineSpacing:6]; +// [text addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])]; +// + text.font = MEDIUMFONT(13) ; + _label = [YYLabel new]; + _label.userInteractionEnabled = YES; + _label.numberOfLines = 4; + _label.textVerticalAlignment = YYTextVerticalAlignmentTop; + _label.frame = CGRectMake(17 ,titLabel.bottom + 15 , self.width-34,80); + _label.attributedText = text; + [self addSubview:_label]; + // 添加全文 +// [self addSeeMoreButton]; + + +} + +- (void)setHospitalString:(NSString *)hospitalString { + _hospitalString = hospitalString; + + NSMutableAttributedString *text = [NSMutableAttributedString new]; + // 添加文本 + NSString *title = _hospitalString; + + // //富文本 +// [NSString stringWithFormat:@"%@ ",title]; + NSAttributedString *attrStr = [[NSAttributedString alloc] initWithData:[[NSString stringWithFormat:@"%@ ",title] dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; + + [text appendAttributedString:attrStr]; + + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + [paragraphStyle setLineSpacing:6]; + [text addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])]; + + _label.attributedText = text; + + [self addSeeMoreButton]; + +} + + + + +#pragma mark - 添加全文 +- (void)addSeeMoreButton { + + __weak __typeof(self) weakSelf = self; + + NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"...查看全部>"]; + + YYTextHighlight *hi = [YYTextHighlight new]; + [hi setColor:[UIColor colorWithRed:0.578 green:0.790 blue:1.000 alpha:1.000]]; + + hi.tapAction = ^(UIView *containerView,NSAttributedString *text,NSRange range, CGRect rect) { + + // 点击全文回调 + YYLabel *label = weakSelf.label; + weakSelf.lookBlock(); + [label sizeToFit]; + }; + + + [text setColor:UIColorHex(#3390FF) range:[text.string rangeOfString:@"查看全部>"]]; + [text setTextHighlight:hi range:[text.string rangeOfString:@"查看全部>"]]; + text.font = _label.font; + + YYLabel *seeMore = [YYLabel new]; + seeMore.attributedText = text; + [seeMore sizeToFit]; + + NSAttributedString *truncationToken = [NSAttributedString attachmentStringWithContent:seeMore contentMode:UIViewContentModeCenter attachmentSize:seeMore.frame.size alignToFont:text.font alignment:YYTextVerticalAlignmentCenter]; + + _label.truncationToken = truncationToken; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainTableView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainTableView.h new file mode 100644 index 0000000..bf61adf --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainTableView.h @@ -0,0 +1,26 @@ +// +// HospitalMainTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import +#import "HospitalLocationTableViewCell.h" +#import "EvaluationTiitleTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^lookMoreEvaluation)(void); + +@interface HospitalMainTableView : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, strong) HospitalLocationTableViewCell * disCell ; + +@property (nonatomic, copy) lookMoreEvaluation moreBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainTableView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainTableView.m new file mode 100644 index 0000000..ec2b14e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/HospitalMain/HospitalMainTableView.m @@ -0,0 +1,150 @@ +// +// HospitalMainTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/9. +// + +#import "HospitalMainTableView.h" +#import "HospitalMainHeardView.h" +#import "HospitalEvaluationTableViewCell.h" +#import "HospatilIntroduceTableViewCell.h" +#import "EvaluationTitleTableViewCell.h" + + +@interface HospitalMainTableView () + +@property (nonatomic, strong) HospitalMainHeardView * headView; + +@end + +@implementation HospitalMainTableView + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.backgroundColor = KClearColor; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; +} + + + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return self.dataArray.count + 1; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + if (indexPath.row == 0) { + + EvaluationTitleTableViewCell * titleCell = [tableView dequeueReusableCellWithIdentifier:@"TitleCELL"]; + + if (!titleCell) { + + titleCell = [[EvaluationTitleTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TitleCELL"]; + } + + titleCell.selectionStyle = UITableViewCellSelectionStyleNone; + titleCell.moreBlock = ^{ + self.moreBlock(); + }; + return titleCell; + + }else + { + HospitalEvaluationTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"EVALUATIONCELL"]; + + if (!cell) { + + cell = [[HospitalEvaluationTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"EVALUATIONCELL"]; + } + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.model = self.dataArray[indexPath.row - 1]; + return cell; + } + + + return UITableViewCell.new; + + + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +// +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * hearView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 0)]; + + hearView.backgroundColor = KClearColor; + + return hearView; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchExpertTableCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchExpertTableCell.h new file mode 100644 index 0000000..10f3df6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchExpertTableCell.h @@ -0,0 +1,29 @@ +// +// MainSearchExpertTableCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/25. +// + +#import +#import "FoundExpertModel.h" +NS_ASSUME_NONNULL_BEGIN + + +@protocol zhuangjiaListProtocol + +- (void)zongheZhuangjiaPictureAction:(NSString *)doctorID; +- (void)zongheZhuangjiaVideoAction:(NSString *)doctorID; + +@end + +@interface MainSearchExpertTableCell : UITableViewCell + +@property (nonatomic, strong) DoctorListModel * doctorModel; + +@property (nonatomic, weak)id zhuangjiaListDelegate; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchExpertTableCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchExpertTableCell.m new file mode 100644 index 0000000..d41a2db --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchExpertTableCell.m @@ -0,0 +1,398 @@ +// +// MainSearchExpertTableCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/25. +// + +#import "MainSearchExpertTableCell.h" + +@interface MainSearchExpertTableCell () + +@property (nonatomic, strong) UIView * backView; +@property (nonatomic, strong) UIImageView * doctorImg; + +@property (nonatomic, strong) UILabel * namelabel; + +@property (nonatomic, strong) UILabel * currentLabel; + +@property (nonatomic, strong) UILabel * roomLabel; + +@property (nonatomic, strong) UILabel * introduceLabel; + +@property (nonatomic, strong) UIButton * statusBtn; + +@property (nonatomic, strong) UILabel * lvlabel; + +@property (nonatomic, strong) UILabel * hospationLabel; + +@property (nonatomic, strong) UIButton * pictureButton; + +@property (nonatomic, strong) UIButton * videoButton; + +@property (nonatomic, strong) UILabel * toolsLabel; + +@property (nonatomic, strong) UIImageView * hotImage; + +@end + +@implementation MainSearchExpertTableCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.backView = [[UIView alloc] init]; + [self.contentView addSubview:self.backView]; + + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.right.mas_offset(-15); + make.top.mas_offset(0); + make.bottom.mas_offset(10); + }]; + + + self.doctorImg = [[UIImageView alloc] init]; + self.doctorImg.layer.cornerRadius = 25; + self.doctorImg.layer.masksToBounds = true; + [self.backView addSubview:self.doctorImg]; + + [self.doctorImg mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_offset(10); + make.width.height.mas_offset(50); + }]; + + + + self.namelabel = [[UILabel alloc] init]; + self.namelabel.text = @"张医生"; + self.namelabel.textColor = CFontColor1; + self.namelabel.font = BOLDSYSTEMFONT(14); + self.namelabel.textAlignment = NSTextAlignmentLeft; + self.namelabel.attributedText = [HQCommonUtils firstString:@"张医生 " firstColor:UIColorHex(#333333) firstSize:14 secondString:@" 主任医师" secondColor:UIColorHex(#333333) secondSize:13 thirdString:@" 内科 " thirdColor:UIColorHex(#333333) thirdSize:13]; + [self.backView addSubview:self.namelabel]; + + [self.namelabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImg.mas_right).offset(8); + make.top.mas_offset(10); + make.height.mas_offset(15); + }]; + [self.namelabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.roomLabel = [[UILabel alloc] init]; + self.roomLabel.text = @""; + self.roomLabel.textColor = CFontColor1; + self.roomLabel.font = BOLDSYSTEMFONT(14); + self.roomLabel.textAlignment = NSTextAlignmentLeft; +// self.roomLabel.attributedText = [HQCommonUtils firstString:@"张医生 " firstColor:UIColorHex(#333333) firstSize:14 secondString:@" 主任医师" secondColor:UIColorHex(#333333) secondSize:13 thirdString:@" 内科 " thirdColor:UIColorHex(#333333) thirdSize:13]; + [self.backView addSubview:self.roomLabel]; + + [self.roomLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImg.mas_right).offset(8); + make.top.mas_equalTo(self.namelabel.mas_bottom).offset(10); + make.height.mas_offset(15); + }]; + [self.roomLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + + self.statusBtn = [[UIButton alloc] init]; + [self.statusBtn setTitle:@"历史咨询" forState:UIControlStateNormal]; + [self.statusBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.statusBtn.layer.cornerRadius = 4.0f; + self.statusBtn.layer.masksToBounds = YES; + self.statusBtn.titleLabel.font = MEDIUMFONT(10); + self.statusBtn.backgroundColor = RGBA(33, 190, 189, 0.5); + [self.backView addSubview:self.statusBtn ]; + [self.statusBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-15); + make.top.mas_offset(10); + make.height.mas_offset(17); + make.width.mas_offset(60); + }]; + + + self.lvlabel = [[UILabel alloc] init]; + self.lvlabel.font = MEDIUMFONT(12); + self.lvlabel.textColor = KWhiteColor; + self.lvlabel.backgroundColor = UIColorHex(#21BEBD); + self.lvlabel.layer.cornerRadius = 3.0f; + self.lvlabel.layer.masksToBounds = YES; + [self.backView addSubview:self.lvlabel]; + + [self.lvlabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.namelabel.mas_left); + make.top.mas_equalTo(self.roomLabel.mas_bottom).offset(10); + make.height.mas_offset(15); + }]; + [self.lvlabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.hospationLabel = [[UILabel alloc] init]; + self.hospationLabel.text = @" -- "; + self.hospationLabel.textColor = UIColorHex(#666666); + self.hospationLabel.font = MEDIUMFONT(13); + self.hospationLabel.textAlignment = NSTextAlignmentCenter; + [self.backView addSubview:self.hospationLabel]; + + [self.hospationLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.lvlabel.mas_right).offset(10); + make.top.mas_equalTo(self.lvlabel.mas_top); + make.height.mas_offset(13); + }]; + [self.hospationLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + //新增 + + + self.introduceLabel = [[UILabel alloc] init]; + self.introduceLabel.text = @"擅长:神经内科疾病的治疗,尤其擅长以脑血管、老年痴呆症、老年抑郁症等神经内科常见病的诊疗及研究"; + self.introduceLabel.textColor = UIColorHex(#666666); + self.introduceLabel.font = MEDIUMFONT(13); + self.introduceLabel.textAlignment = NSTextAlignmentLeft; + self.introduceLabel.numberOfLines = 3 ; + [self.backView addSubview:self.introduceLabel]; + + [self.introduceLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImg.mas_right).offset(8); + make.right.mas_offset(-17); + make.top.mas_equalTo(self.lvlabel.mas_bottom).offset(10); +// make.height.greaterThanOrEqualTo(@(60)); + }]; + [self.introduceLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + + +// UIImageView * hotImage = [[UIImageView alloc] init]; +// hotImage.image = IMAGE_NAMED(@"doctorHot"); +// self.hotImage = hotImage; +// [self.backView addSubview:hotImage]; + +// [self.hotImage mas_makeConstraints:^(MASConstraintMaker *make) { +// make.left.mas_equalTo(self.introduceLabel.mas_left); +// make.top.mas_equalTo(self.introduceLabel.mas_bottom).offset(14); +// make.width.mas_equalTo(14); +// make.height.mas_offset(15); +// }]; + //新增 + self.toolsLabel = [[UILabel alloc] init]; + self.toolsLabel.text = @"综合评价:-- / 回复率:-- / 咨询量:--"; + self.toolsLabel.textColor = UIColorHex(#666666); + self.toolsLabel.font = MEDIUMFONT(11); + self.toolsLabel.textAlignment = NSTextAlignmentLeft; + self.toolsLabel.numberOfLines = 2; + [self.backView addSubview:self.toolsLabel]; + + [self.toolsLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImg.mas_right).offset(8); + make.right.mas_offset(-17); + make.top.mas_equalTo(self.introduceLabel.mas_bottom).offset(14); + }]; + + [self.toolsLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + UIView * linv = [[UIView alloc] init]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [self.backView addSubview:linv]; + + [linv mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(@15); + make.right.mas_offset(-15); + make.height.mas_equalTo(@1); + make.top.mas_equalTo(self.toolsLabel.mas_bottom).offset(17); + }]; + + self.pictureButton = [[UIButton alloc] init]; + [self.pictureButton setTitle:@"图文咨询" forState:UIControlStateNormal]; + [self.pictureButton setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.pictureButton.titleLabel.font = MEDIUMFONT(13); + self.pictureButton.backgroundColor = KWhiteColor; + [self.pictureButton addTarget:self action:@selector(pictureQustionAction) forControlEvents:UIControlEventTouchUpInside]; + [self.backView addSubview:self.pictureButton ]; + + [self.pictureButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_equalTo(linv.mas_bottom).offset(5); + make.height.mas_offset(40); + make.width.mas_equalTo(linv.mas_width).multipliedBy(0.5); + }]; + + UIView * cowlinv = [[UIView alloc] init]; + cowlinv.backgroundColor = UIColorHex(#E0E0E0); + [self.backView addSubview:cowlinv]; + + [cowlinv mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(self.pictureButton.mas_right); + make.width.mas_offset(1); + make.height.mas_equalTo(38); + make.top.mas_equalTo(linv.mas_bottom).offset(2); + }]; + + self.videoButton = [[UIButton alloc] init]; + [self.videoButton setTitle:@"视频咨询" forState:UIControlStateNormal]; + [self.videoButton setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.videoButton.titleLabel.font = MEDIUMFONT(13); + self.videoButton.backgroundColor = KWhiteColor; + [self.videoButton addTarget:self action:@selector(videoQustionAction) forControlEvents:UIControlEventTouchUpInside]; + [self.backView addSubview:self.videoButton ]; + [self.videoButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.pictureButton.mas_right).offset(1); + make.top.mas_equalTo(linv.mas_bottom).offset(5); + make.height.mas_offset(40); + make.width.mas_equalTo(linv.mas_width).multipliedBy(0.5); + + }]; + + [self.backView mas_updateConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.right.mas_offset(-15); + make.top.mas_offset(10); + make.bottom.mas_equalTo(self.pictureButton.mas_bottom).offset(4); + }]; + [self.backView mas_updateConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.right.mas_offset(-15); + make.top.mas_offset(10); + make.bottom.mas_equalTo(self.videoButton.mas_bottom).offset(4); + }]; +// [HQCommonUtils addShadowToView:self.backView]; +} + +- (void)setDoctorModel:(DoctorListModel *)doctorModel { + + _doctorModel = doctorModel; + self.introduceLabel.text = [NSString stringWithFormat:@"擅长:%@", _doctorModel.goodAt]; + self.namelabel.text = self.doctorModel.doctorName; + self.roomLabel.text = [NSString stringWithFormat:@"%@ %@",self.doctorModel.doctorTitle,self.doctorModel.departmentName]; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_doctorModel.photo]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.doctorImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:IMAGE_NAMED(@"doctorNoImage")]; + + self.toolsLabel.text = [NSString stringWithFormat:@" 综合评价:%@ / 回复率:%.1f%% / 咨询量:%@",_doctorModel.overallMerit,[_doctorModel.responseRate floatValue],_doctorModel.messageNum]; + self.hospationLabel.text = self.doctorModel.resourceName; + + if (ValidStr(_doctorModel.hospitalLevel)) { + self.lvlabel.backgroundColor = KWhiteColor; + + }else + { + self.lvlabel.backgroundColor = UIColorHex(#21BEBD); + + self.lvlabel.text = [NSString stringWithFormat:@" %@ ",_doctorModel.hospitalLevel]; + + +// self.lvlabel.width = [HQCommonUtils getLengthFromTe + } + if (ValidStr(_doctorModel.tfShowFire)) { + + }else + { + NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:self.toolsLabel.text]; + [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] range:NSMakeRange(0, [self.toolsLabel.text length])]; + NSTextAttachment *icon = [[NSTextAttachment alloc] init]; + UIImage *iconImage = [UIImage imageNamed:@"doctorHot"]; + [icon setBounds:CGRectMake(0, -3, 15, 15)]; + [icon setImage:iconImage]; + NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:icon]; + [attrStr insertAttributedString:string atIndex:0]; + self.toolsLabel.attributedText = attrStr; + } + + if (ValidStr(_doctorModel.tfShowFire)) { + + }else + { + + + } + if(ValidStr(_doctorModel.type)) { + + self.statusBtn.hidden = true; + }else { + self.statusBtn.hidden = false; + } + + //判断是否开始服务 + if ([_doctorModel.doctorStatus intValue] != 3) { //非停诊 + if ([_doctorModel.audioStatus intValue] == 1) { //开启 + + [self.videoButton setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.videoButton.backgroundColor = KWhiteColor; + self.videoButton.userInteractionEnabled = true; + + }else + { + [self.videoButton setTitleColor:UIColor.grayColor forState:UIControlStateNormal]; + self.videoButton.userInteractionEnabled = false;; + } + + } + else{ + self.videoButton.userInteractionEnabled = false; + [self.videoButton setTitleColor:UIColor.grayColor forState:UIControlStateNormal]; + [self.pictureButton setTitleColor:UIColor.grayColor forState:UIControlStateNormal]; + + self.pictureButton.userInteractionEnabled = false; + } + + + + self.backView.backgroundColor = KWhiteColor; + self.backView.layer.cornerRadius = 4.0f; + self.backView.layer.masksToBounds = YES; + self.backView.layer.shadowColor = [UIColor grayColor].CGColor; +// self.layer.shadowOffset = CGSizeMake(3, 3);//有偏移量的情况,默认向右向下有阴影 + self.backView.layer.shadowOffset = CGSizeZero; //设置偏移量为0,四周都有阴影 + self.backView.layer.shadowRadius = 3.0f;//阴影半径,默认3 + self.backView.layer.shadowOpacity = 0.3f;//阴影透明度,默认0 + self.backView.layer.masksToBounds = NO; + + +} + +- (void)videoQustionAction { + + if ([self.zhuangjiaListDelegate respondsToSelector:@selector(zongheZhuangjiaVideoAction:)]) { + + [self.zhuangjiaListDelegate zongheZhuangjiaVideoAction:self.doctorModel.doctorId]; + } + + +} + +- (void)pictureQustionAction { + + if ([self.zhuangjiaListDelegate respondsToSelector:@selector(zongheZhuangjiaPictureAction:)]) { + + [self.zhuangjiaListDelegate zongheZhuangjiaPictureAction:self.doctorModel.doctorId]; + } + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchTable.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchTable.h new file mode 100644 index 0000000..094923b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchTable.h @@ -0,0 +1,53 @@ +// +// MainSearchTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/25. +// + +#import +#import "FoundExpertModel.h" +#import "ZongheZhuangjiaTableViewCell.h" +#import "DoctorRoomCollectionView.h" +NS_ASSUME_NONNULL_BEGIN + +typedef void(^mainSearchCellOnClick)(NSString * type, NSString * needID); + +typedef void(^searcMoreHospitalMoreBlcok)(); + +typedef void(^searcMoreDoctorMoreBlcok)(); + +typedef void(^searcMoreSicksMoreBlcok)(); + +typedef void(^searcMoreRoomsMoreBlcok)(); + +typedef void(^searcMoreRoomsMoreBlcok)(); + +typedef void(^searcSicksRelustBlcok)(SicksModel * model); + +@interface MainSearchTable : UITableView + +@property (nonatomic, strong) NSArray * docotorArray; +@property (nonatomic, assign) NSInteger type; // 1 综合 2 专家 3 医院 +@property (nonatomic, strong) FoundExpertModel * model; +@property (nonatomic, strong) NSArray * HospitalArray; +@property (nonatomic, copy) mainSearchCellOnClick mainBlock; + +@property (nonatomic, copy) searcMoreHospitalMoreBlcok hospitalBlock; + +@property (nonatomic, copy) searcMoreDoctorMoreBlcok doctorBlock; + +@property (nonatomic, copy) searcMoreSicksMoreBlcok sicksBlock; + +@property (nonatomic, copy) searcMoreRoomsMoreBlcok roomsBlock; + + +@property (nonatomic, weak)id zongheZhuangjiaDelegate; + +@property (nonatomic, copy) roomCollectViewBlock doctorSearBlock; + +@property (nonatomic, copy) searcSicksRelustBlcok sicksSearBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchTable.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchTable.m new file mode 100644 index 0000000..3bdcf2a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/MainSearchTable.m @@ -0,0 +1,724 @@ +// +// MainSearchTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/25. +// + +#import "MainSearchTable.h" +#import "MainSearchExpertTableCell.h" +#import "HospitalListTableCell.h" +#import "ZHTagListView.h" +#import "DoctorRoomCollectionView.h" +#import "searchHospatilCellTableViewCell.h" +#import "ZongheZhuangjiaTableViewCell.h" + +@interface MainSearchTable () + +@property (nonatomic, assign) CGFloat footH; +@property (nonatomic, strong) DoctorRoomCollectionView * collectView; +@property (nonatomic, strong) ZHTagListView *tagList; +@property (nonatomic, strong) UIView * roomView; +@property (nonatomic, strong) UILabel * roomLabel; +@property (nonatomic, strong) UILabel * canselLabel; +@property (nonatomic, strong) UIView * headerView; +//@property (nonatomic, strong) UIButton * moreRoomBtn; +//@property (nonatomic, strong) UIButton * moreBtn; + + +@end + +@implementation MainSearchTable + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if ([[UIDevice currentDevice].systemVersion floatValue] >= 11) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.tableFooterView.height = self.footH; + self.estimatedRowHeight = 60; + self.backgroundColor = CViewBgColor; + self.rowHeight = UITableViewAutomaticDimension; + +} + +- (UIView *)createFooterView { + + UIView * headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 100)]; + self.headerView = headerView; + UILabel * canselLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(18) , 110, 15)]; + canselLabel.text = @"疾病"; + self.canselLabel = canselLabel; + canselLabel.font = MEDIUMFONT(15); + canselLabel.textAlignment = NSTextAlignmentLeft; + canselLabel.textColor = CFontColor1; + [headerView addSubview:canselLabel]; + //6.6日新增 暂不要 +// UIButton * moreBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.width - kRealValue(15) - 60, kRealValue(10), 60, 16)]; +// [moreBtn setTitle:@"更多 >" forState:UIControlStateNormal]; +// +// [moreBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; +// +// moreBtn.titleLabel.font = SYSTEMFONT(14); +// +// [moreBtn addTarget:self action:@selector(moreSicksOnClick) forControlEvents:UIControlEventTouchUpInside]; +// self.moreBtn = moreBtn; +// [headerView addSubview:moreBtn]; + + + NSMutableArray *_dataSource = @[ + ].mutableCopy; + + ZHTagListConfiguration *config = [ZHTagListConfiguration defaultConfiguration]; + config.tagTextColor = CFontColor1; + config.tagTextMargin = 11; + config.tagHeight = 27; + config.tagTextFont = SYSTEMFONT(13); + config.tagListViewInset = UIEdgeInsetsMake(15, 15, 15, 10); + + ZHTagListView *tagList = [[ZHTagListView alloc] initWithFrame:CGRectMake(0, canselLabel.bottom, kScreenWidth - 30, 0) configuration:config tagTexts:_dataSource]; + tagList.backgroundColor = KWhiteColor; + self.tagList = tagList; + [headerView addSubview:tagList]; + [tagList.tagButtonList enumerateObjectsUsingBlock:^(UIButton * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (idx == 6) { + [obj setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; + *stop = YES; + } + }]; + [tagList setTagClickHandler:^(ZHTagListView *tagListView, NSString *tagText, NSUInteger index) { + + [self selectDiseaAction:index]; + }]; + + + + UIView * roomView = [[UIView alloc] initWithFrame:CGRectMake(0, tagList.bottom + kRealValue(10), kScreenWidth, 200)]; + self.roomView = roomView; + [headerView addSubview:roomView]; + + UILabel * roomLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), 0 , 110, 15)]; + roomLabel.text = @"科室"; + self.roomLabel = roomLabel; + roomLabel.font = MEDIUMFONT(15); + roomLabel.textAlignment = NSTextAlignmentLeft; + roomLabel.textColor = CFontColor1; + [roomView addSubview:roomLabel]; + //6.6日新增 暂不要 +// UIButton * moreRoomBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.width - kRealValue(15) - 60, 0, 60, 16)]; +// [moreRoomBtn setTitle:@"更多 >" forState:UIControlStateNormal]; +// +// [moreRoomBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; +// +// moreRoomBtn.titleLabel.font = SYSTEMFONT(14); +// self.moreRoomBtn = moreRoomBtn; +// [moreRoomBtn addTarget:self action:@selector(moreRoomsOnClick) forControlEvents:UIControlEventTouchUpInside]; +// +// [roomView addSubview:moreRoomBtn]; + //找专家 + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; + layout.itemSize = CGSizeMake((kScreenWidth - 30)/2,95); + layout.scrollDirection = UICollectionViewScrollDirectionVertical; + layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10); +// layout.minimumLineSpacing = 10; +// layout.minimumInteritemSpacing = 10; + + self.collectView = [[DoctorRoomCollectionView alloc]initWithFrame:CGRectMake(0, roomLabel.bottom + 15, kScreenWidth , 95 * 4 + 60) collectionViewLayout:layout]; + self.collectView.type = 1; + self.collectView.scrollEnabled = NO; + self.collectView.roomBlock = self.doctorSearBlock; + [roomView addSubview:self.collectView]; + + + roomView.height = self.collectView.bottom + kRealValue(10);; + + headerView.height = tagList.bottom + roomView.height + kRealValue(160); + + self.footH = headerView.height; + + return headerView; +} + + +- (void)selectDiseaAction:(int)index { + + SicksModel * sicModel = _model.SicksList[index]; + if (self.sicksSearBlock) { + self.sicksSearBlock(sicModel); + } + + +} + + +- (void)setDocotorArray:(NSArray *)docotorArray { + _docotorArray = docotorArray; + [self reloadData]; +} + +- (void)setHospitalArray:(NSArray *)HospitalArray { + _HospitalArray = HospitalArray; + [self reloadData]; + +} + +- (void)setType:(NSInteger)type { + _type = type; + if (_type == 2 || _type == 3) { + self.tableFooterView = [[UIView alloc] init];; + }else + { + self.tableFooterView = [self createFooterView]; + + } + [self reloadData]; +} + +- (void)setModel:(FoundExpertModel *)model { + + _model = model; + self.collectView.dataArray = self.model.DepartmentList; + + NSMutableArray * titleArray = [[NSMutableArray alloc] init]; + for (SicksModel * sicModel in model.SicksList) { + + [titleArray addObject:sicModel.sicksName]; + } + + if (model.SicksList.count == 0) { + self.canselLabel.hidden = YES; +// self.moreBtn.hidden =YES; + }else + { + self.canselLabel.hidden = false; +// self.moreBtn.hidden =false; + } + if (model.DepartmentList.count == 0) { + self.roomLabel.hidden = YES; +// self.moreRoomBtn.hidden = YES; + } + else + { + self.roomLabel.hidden = false; +// self.moreRoomBtn.hidden = false; + } + self.tagList.tagDataArray = titleArray; + + self.roomView.height = self.collectView.bottom + kRealValue(10);; + + self.roomView.frame = CGRectMake(0, self.tagList.bottom + kRealValue(10), kScreenWidth, self.roomView.height); + + self.headerView.height = self.roomView.bottom + kRealValue(10); + [self reloadData]; + +} + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + //其实用枚举更好 页面写完早 但是要快不如判断 + if (self.type == 1) { //综合 + if (section == 0) { + return self.model.DoctorList.count; + } + if (section == 1) { + + return self.model.hospitalList.count; + } + } + if (self.type == 2) + { + return self.docotorArray.count; + } + if (self.type == 3) + { + return self.HospitalArray.count; + } + + return 5; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + + if (self.type == 1 ) { + return 2; + } + return 1; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + // 是0加载专家 + + if (self.type == 1) { //综合 + + if (indexPath.section == 0) { + static NSString * cellID = @"cellID"; + + ZongheZhuangjiaTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[ZongheZhuangjiaTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.doctorModel = self.model.DoctorList[indexPath.row]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.backgroundColor = KWhiteColor; + cell.zongheZhuangjiaDelegate = self.zongheZhuangjiaDelegate; + return cell; + } + + if (indexPath.section == 1) { + + searchHospatilCellTableViewCell * hospcell = [tableView dequeueReusableCellWithIdentifier:@"HOSPITALCELL"]; + + if (!hospcell) { + + hospcell = [[searchHospatilCellTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"HOSPITALCELL"]; + } + hospcell.selectionStyle = UITableViewCellSelectionStyleNone; + hospcell.model = self.model.hospitalList[indexPath.row]; + return hospcell; + } + } + if (self.type == 2) { //专家 + + static NSString * cellID = @"cellID"; + + ZongheZhuangjiaTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[ZongheZhuangjiaTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.doctorModel = self.docotorArray[indexPath.row]; + cell.backgroundColor = KClearColor; + cell.zongheZhuangjiaDelegate = self.zongheZhuangjiaDelegate; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + + } + + if (self.type == 3) { //医院 + + searchHospatilCellTableViewCell * hospcell = [tableView dequeueReusableCellWithIdentifier:@"HOSPITALCELL"]; + + if (!hospcell) { + + hospcell = [[searchHospatilCellTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"HOSPITALCELL"]; + } + hospcell.selectionStyle = UITableViewCellSelectionStyleNone; + hospcell.model = self.HospitalArray[indexPath.row]; + return hospcell; + + } + return UITableViewCell.new; + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + if (self.type == 1) { + + if (self.model.DoctorList.count > 0 && self.model.hospitalList.count > 0) { + + if (indexPath.section == 0) { + + DoctorListModel * doctormodel = self.model.DoctorList[indexPath.row]; + CGFloat h = 30; + + if (!ValidStr(doctormodel.goodAt)) { + NSMutableAttributedString * expanceString = [[NSMutableAttributedString alloc] initWithString:doctormodel.goodAt]; + UILabel * lab = [[UILabel alloc] initWithFrame:CGRectMake(88, 0, kScreenWidth - 127, 10)]; + + if ( !ValidStr(doctormodel.goodAt) ) { + int currentLins = [self getNumberOfLinesWithText:expanceString andLabelWidth: kScreenWidth - 127]; + + if (currentLins < 3) { + h = [HQCommonUtils getSpaceLabelHeight:lab withStr:doctormodel.goodAt withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:lab.width withLineSpacing:5]; + }else + { + h = 60; + } + + } + + return kRealValue(110) + h + kRealValue(85); + } + return kRealValue(110) + h + kRealValue(85); + } + if (indexPath.section == 1) { + + HospitalInfoModel * hosmodel = self.model.hospitalList[indexPath.row]; + + UILabel * lab = [[UILabel alloc] initWithFrame:CGRectMake(83, 0, kScreenWidth - 120, 10)]; + + lab.text = hosmodel.address; + + CGFloat labH = [HQCommonUtils getSpaceLabelHeight:lab withStr:hosmodel.address withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:kScreenWidth - 120 withLineSpacing:5]; + + if (ValidStr(hosmodel.keyDepartments)) { + + return 85 + labH; + }else + { + return 110 + labH; + } + } + } + + if (self.model.DoctorList.count == 0 && self.model.hospitalList.count == 0 ) + { + return CGFLOAT_MIN; + } + + if ( (self.model.DoctorList.count > 0 && self.model.hospitalList.count == 0) || (self.model.DoctorList.count == 0 && self.model.hospitalList.count > 0) ) + { + if (self.model.DoctorList.count > 0 && self.model.hospitalList.count == 0) { + + if (indexPath.section == 0) { + + DoctorListModel * doctormodel = self.model.DoctorList[indexPath.row]; + CGFloat h = 30.0; + + if (!ValidStr(doctormodel.goodAt)) { + NSMutableAttributedString * expanceString = [[NSMutableAttributedString alloc] initWithString:doctormodel.goodAt]; + UILabel * lab = [[UILabel alloc] initWithFrame:CGRectMake(88, 0, kScreenWidth - 127, 10)]; + + if ( !ValidStr(doctormodel.goodAt) ) { + int currentLins = [self getNumberOfLinesWithText:expanceString andLabelWidth: kScreenWidth - 127]; + + if (currentLins < 3) { + h = [HQCommonUtils getSpaceLabelHeight:lab withStr:doctormodel.goodAt withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:lab.width withLineSpacing:5]; + }else + { + h = 60; + } + + } + + return kRealValue(110) + h + kRealValue(85); + } + return kRealValue(110) + h + kRealValue(85); + + }else + { + return CGFLOAT_MIN; + } + + } + if (self.model.DoctorList.count == 0 && self.model.hospitalList.count > 0) { + + if (indexPath.section == 0) { + return CGFLOAT_MIN; + }else + { + HospitalInfoModel * hosmodel = self.model.hospitalList[indexPath.row]; + + UILabel * lab = [[UILabel alloc] initWithFrame:CGRectMake(83, 0, kScreenWidth - 120, 10)]; + + lab.text = hosmodel.address; + + CGFloat labH = [HQCommonUtils getSpaceLabelHeight:lab withStr:hosmodel.address withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:kScreenWidth - 120 withLineSpacing:5]; + + if (ValidStr(hosmodel.keyDepartments)) { + + return 85 + labH; + }else + { + return 110 + labH; + } + + } + + } + + } + } + if (self.type == 2) { + DoctorListModel * doctormodel = self.docotorArray[indexPath.row]; + CGFloat h = 30; + if (!ValidStr(doctormodel.goodAt)) { + NSMutableAttributedString * expanceString = [[NSMutableAttributedString alloc] initWithString:doctormodel.goodAt]; + UILabel * lab = [[UILabel alloc] initWithFrame:CGRectMake(88, 0, kScreenWidth - 127, 10)]; + + if ( !ValidStr(doctormodel.goodAt) ) { + int currentLins = [self getNumberOfLinesWithText:expanceString andLabelWidth: kScreenWidth - 127]; + + if (currentLins < 3) { + h = [HQCommonUtils getSpaceLabelHeight:lab withStr:doctormodel.goodAt withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:lab.width withLineSpacing:5]; + }else + { + h = 60; + } + + } + return kRealValue(110) + h + kRealValue(70); + } + return kRealValue(110) + h + kRealValue(70); + } + + if (self.type == 3) { + HospitalInfoModel * hosmodel = self.model.hospitalList[indexPath.row]; + + UILabel * lab = [[UILabel alloc] initWithFrame:CGRectMake(83, 0, kScreenWidth - 120, 10)]; + + lab.text = hosmodel.address; + + CGFloat labH = [HQCommonUtils getSpaceLabelHeight:lab withStr:hosmodel.address withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:kScreenWidth - 120 withLineSpacing:5]; + + if (ValidStr(hosmodel.keyDepartments)) { + + return 85 + labH; + }else + { + return 110 + labH; + } + } + return 10; + +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + + if (indexPath.section == 0) { + + DoctorListModel * doctorModel = self.model.DoctorList[indexPath.row]; + + if (self.mainBlock) { + self.mainBlock(@"医生", doctorModel.doctorId); + } + } + + + if (indexPath.section == 1) { + + HospitalInfoModel * hosmodel = self.model.hospitalList[indexPath.row]; + + if (self.mainBlock) { + self.mainBlock(@"医院", hosmodel.hositalId); + } + } + + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + if (self.type == 1) { + if (self.model.DoctorList.count > 0 && self.model.hospitalList.count > 0) { + + return kRealValue(40); + } + + if (self.model.DoctorList.count == 0 && self.model.hospitalList.count == 0 ) + { + return CGFLOAT_MIN; + } + + if ( (self.model.hospitalList.count > 0 && self.model.DoctorList.count == 0) || (self.model.hospitalList.count == 0 && self.model.DoctorList.count > 0) ) + { + + if (self.model.hospitalList.count > 0 && self.model.DoctorList.count == 0) { + + if (section == 0) { + + return CGFLOAT_MIN; + } + if (section == 1) { + + return kRealValue(40); + } + } + if (self.model.hospitalList.count == 0 && self.model.DoctorList.count > 0) { + + if (section == 0) { + return kRealValue(40); + } + if (section == 1) { + + return CGFLOAT_MIN; + } + } + } + } + if (self.type == 2 || self.type == 3) { + return kRealValue(40); + } + return kRealValue(40); +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * sectionHeardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.width, kRealValue(40))]; + sectionHeardView.backgroundColor = KClearColor; + + UILabel * todayLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(10), 90, 16)]; + todayLabel.textAlignment = NSTextAlignmentLeft; + + todayLabel.textColor = CFontColor1; + + todayLabel.font = BOLDSYSTEMFONT(16); + + [sectionHeardView addSubview:todayLabel]; + + +// UIButton * moreBtn = [[UIButton alloc] initWithFrame:CGRectMake(sectionHeardView.width - kRealValue(15) - 60, kRealValue(10), 60, 16)]; +// [moreBtn setTitle:@"更多 >" forState:UIControlStateNormal]; +// +// [moreBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; +// +// moreBtn.titleLabel.font = SYSTEMFONT(14); +// +// todayLabel.font = BOLDSYSTEMFONT(16); +// +// [sectionHeardView addSubview:moreBtn]; + + if (self.type == 1) { + if (self.model.DoctorList.count > 0 && self.model.hospitalList.count > 0) { + + if (section == 0) { + todayLabel.text = @"专家"; +// [moreBtn addTarget:self action:@selector(doctoreMoreClick) forControlEvents:UIControlEventTouchUpInside]; + + return sectionHeardView; + } + if (section == 1) { + todayLabel.text = @"医院"; +// [moreBtn addTarget:self action:@selector(hospitalMoreClick) forControlEvents:UIControlEventTouchUpInside]; + + return sectionHeardView; + } + } + + if (self.model.DoctorList.count == 0 && self.model.hospitalList.count == 0 ) + { + return [UIView new]; + } + + if ( (self.model.hospitalList.count > 0 && self.model.DoctorList.count == 0) || (self.model.hospitalList.count == 0 && self.model.DoctorList.count > 0) ) + { + + if (self.model.hospitalList.count > 0 && self.model.DoctorList.count == 0) { + + if (section == 0) { + return [UIView new];; + } + if (section == 1) { + todayLabel.text = @"医院"; +// [moreBtn addTarget:self action:@selector(hospitalMoreClick) forControlEvents:UIControlEventTouchUpInside]; + + } + } + if (self.model.hospitalList.count == 0 && self.model.DoctorList.count > 0) { + + if (section == 0) { + todayLabel.text = @"专家"; +// [moreBtn addTarget:self action:@selector(doctoreMoreClick) forControlEvents:UIControlEventTouchUpInside]; + + + } + if (section == 1) { + + return [UIView new]; + } + } + } + } + if (self.type == 2) { + todayLabel.text = @"专家"; + } + if (self.type == 3) { + todayLabel.text = @"医院"; + } + + return sectionHeardView; + + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + +//获取文本行数 +- (int)getNumberOfLinesWithText:(NSMutableAttributedString *)text andLabelWidth:(CGFloat)width { + CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)text); + CGMutablePathRef Path = CGPathCreateMutable(); + CGPathAddRect(Path, NULL ,CGRectMake(0 , 0 , width, INT_MAX)); + CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), Path, NULL); + // 得到字串在frame中被自动分成了多少个行。 + CFArrayRef rows = CTFrameGetLines(frame); + // 实际行数 + int numberOfLines = CFArrayGetCount(rows); + CFRelease(frame); + CGPathRelease(Path); + CFRelease(framesetter); + return numberOfLines; +} + +- (void)doctoreMoreClick { + + if (self.doctorBlock) { + + self.doctorBlock(); + } + + +} + +- (void)hospitalMoreClick { + + if (self.hospitalBlock) { + + self.hospitalBlock(); + } + +} + +- (void)moreSicksOnClick { + + if (self.sicksBlock) { + + self.sicksBlock(); + } + +} +- (void)moreRoomsOnClick { + + if (self.roomsBlock) { + + self.roomsBlock(); + } + +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchConetShowTable.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchConetShowTable.h new file mode 100644 index 0000000..6e39f03 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchConetShowTable.h @@ -0,0 +1,22 @@ +// +// SearchConetShowTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^hospitalListBlcok)(NSString * hospitalName, NSString * hospitalID); + +@interface SearchConetShowTable : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, copy) hospitalListBlcok hosBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchConetShowTable.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchConetShowTable.m new file mode 100644 index 0000000..5937741 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchConetShowTable.m @@ -0,0 +1,125 @@ +// +// SearchConetShowTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + +#import "SearchConetShowTable.h" +#import "SearchShowUpTableViewCell.h" + + +@interface SearchConetShowTable () + +@property (nonatomic, assign) CGFloat footH; + +@end + +@implementation SearchConetShowTable + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; +} + + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return self.dataArray.count; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + SearchShowUpTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"CELLID"]; + + if (!cell) { + + cell = [[SearchShowUpTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELLID"]; + } + + cell.model = self.dataArray[indexPath.row]; + + return cell; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + HospitalInfoModel * model = self.dataArray[indexPath.row]; + + if (self.hosBlock) { + + self.hosBlock(model.resourceName, model.hositalId); + } + + +} + + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + return kRealValue(43); + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + return [[UIView alloc] init]; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchShowUpTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchShowUpTableViewCell.h new file mode 100644 index 0000000..bbf0d18 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchShowUpTableViewCell.h @@ -0,0 +1,19 @@ +// +// SearchShowUpTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + +#import +#import "HospitalInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SearchShowUpTableViewCell : UITableViewCell + +@property (nonatomic, strong) HospitalInfoModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchShowUpTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchShowUpTableViewCell.m new file mode 100644 index 0000000..7d49a38 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchShowUpTableViewCell.m @@ -0,0 +1,57 @@ +// +// SearchShowUpTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + + +#import "SearchShowUpTableViewCell.h" + +@interface SearchShowUpTableViewCell () + +@property (nonatomic, strong) UILabel * nameLabel; + +@end + + +@implementation SearchShowUpTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(30), 0, kScreenWidth - kRealValue(30), kRealValue(43))];; + self.nameLabel.textColor = UIColorHex(#666666); + self.nameLabel.textAlignment = NSTextAlignmentLeft; + self.nameLabel.font = SYSTEMFONT(12); + [self.contentView addSubview:self.nameLabel]; + +} + +- (void)setModel:(HospitalInfoModel *)model { + + _model = model; + self.nameLabel.text = _model.resourceName; + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchZhuangjiaTable.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchZhuangjiaTable.h new file mode 100644 index 0000000..7962bd0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchZhuangjiaTable.h @@ -0,0 +1,28 @@ +// +// SearchZhuangjiaTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + +#import +#import "MainSearchExpertTableCell.h" + +@protocol zhuangjiaProtocol + +- (void)zhuangjiaJumpDetail:(NSString *)memberID; + +@end + +NS_ASSUME_NONNULL_BEGIN + +@interface SearchZhuangjiaTable : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, weak)id zhuangjiaDelegate; +@property (nonatomic, weak)id zhuangjiaListDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchZhuangjiaTable.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchZhuangjiaTable.m new file mode 100644 index 0000000..2b81cb3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/SearchZhuangjiaTable.m @@ -0,0 +1,127 @@ +// +// SearchZhuangjiaTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/26. +// + +#import "SearchZhuangjiaTable.h" +#import "HospitalListTableCell.h" +#import "ZHTagListView.h" +#import "DoctorRoomCollectionView.h" + +@interface SearchZhuangjiaTable () + +@end + +@implementation SearchZhuangjiaTable + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; +} + + + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return 1; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + MainSearchExpertTableCell * cell = [tableView dequeueReusableCellWithIdentifier:@"ZHUANJIACELL"]; + + if (!cell) { + + cell = [[MainSearchExpertTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ZHUANJIACELL"]; + } + cell.doctorModel = self.dataArray[indexPath.section]; + cell.zhuangjiaListDelegate = self.zhuangjiaListDelegate; + cell.backgroundColor = KClearColor; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + +} +// +//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { +// +// DoctorListModel * doctormodel = self.dataArray[indexPath.section]; +// +// return doctormodel.cellHeight; +// +//} + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + DoctorListModel * doctorModel = self.dataArray[indexPath.section]; + + if ([self.zhuangjiaDelegate respondsToSelector:@selector(zhuangjiaJumpDetail:)]) { + + [self.zhuangjiaDelegate zhuangjiaJumpDetail:doctorModel.doctorId]; + } +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return kRealValue(10); +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + return [[UIView alloc] init]; + + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/ZongheZhuangjiaTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/ZongheZhuangjiaTableViewCell.h new file mode 100644 index 0000000..b4df2ea --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/ZongheZhuangjiaTableViewCell.h @@ -0,0 +1,29 @@ +// +// ZongheZhuangjiaTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/21. +// + +#import +#import "FoundExpertModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol zongHeZhuangjiaProtocol + +- (void)zongheZhuangjiaPictureAction:(NSString *)doctorID; +- (void)zongheZhuangjiaVideoAction:(NSString *)doctorID; + +@end + + +@interface ZongheZhuangjiaTableViewCell : UITableViewCell + +@property (nonatomic, strong) DoctorListModel * doctorModel; + +@property (nonatomic, weak)id zongheZhuangjiaDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/ZongheZhuangjiaTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/ZongheZhuangjiaTableViewCell.m new file mode 100644 index 0000000..5bda6b0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/MainSearchView/ZongheZhuangjiaTableViewCell.m @@ -0,0 +1,387 @@ +// +// ZongheZhuangjiaTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/21. +// + +#import "ZongheZhuangjiaTableViewCell.h" + + + +@interface ZongheZhuangjiaTableViewCell () + +@property (nonatomic, strong) UIView * backView; +@property (nonatomic, strong) UIView * superBackView; + +@property (nonatomic, strong) UIImageView * doctorImg; + +@property (nonatomic, strong) UILabel * namelabel; +@property (nonatomic, strong) UILabel * currentLabel; + +@property (nonatomic, strong) UILabel * introduceLabel; + +@property (nonatomic, strong) UIButton * statusBtn; + +@property (nonatomic, strong) UILabel * lvlabel; + +@property (nonatomic, strong) UILabel * hospationLabel; + +@property (nonatomic, strong) UILabel * roomLabel; + + +@property (nonatomic, strong) UIButton * pictureButton; + +@property (nonatomic, strong) UIButton * videoButton; + +@property (nonatomic, strong) UILabel * toolsLabel; + +@property (nonatomic, strong) UIImageView * hotImage; + +@property (nonatomic, strong) UIView * linvView; +@property (nonatomic, strong) UIView * cowlinv; + +@end + +@implementation ZongheZhuangjiaTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + + self.superBackView = [[UIView alloc] initWithFrame:CGRectMake(15, 0, kScreenWidth - 60, 100)]; + self.superBackView.layer.shadowColor = [UIColor lightGrayColor].CGColor; + self.superBackView.layer.shadowOffset = CGSizeMake(0,0.5); + self.superBackView.layer.shadowOpacity = 0.6; + self.superBackView.layer.shadowRadius = 1.0; + self.superBackView.clipsToBounds = NO; + [self.contentView addSubview:self.superBackView]; + + self.backView = [[UIView alloc] initWithFrame:CGRectMake(0, 1, kScreenWidth - 60, 100)]; + self.backView.layer.shadowColor = [UIColor lightGrayColor].CGColor; + self.backView.layer.shadowOffset = CGSizeMake(0,0.5); + self.backView.layer.shadowOpacity = 0.6; + self.backView.layer.shadowRadius = 1.0; + self.backView.clipsToBounds = NO; + [self.superBackView addSubview:self.backView]; + + + + self.doctorImg = [[UIImageView alloc] initWithFrame:CGRectMake(15, 10, 50, 50)]; + self.doctorImg.layer.cornerRadius = 25; + self.doctorImg.layer.masksToBounds = true; + [self.backView addSubview:self.doctorImg]; + + + + self.namelabel = [[UILabel alloc] initWithFrame:CGRectMake(self.doctorImg.right + 8, 10, self.backView.width - self.doctorImg.right -30, 15)]; + self.namelabel.text = @"张医生"; + self.namelabel.textColor = CFontColor1; + self.namelabel.font = BOLDSYSTEMFONT(14); + self.namelabel.textAlignment = NSTextAlignmentLeft; +// self.namelabel.attributedText = [HQCommonUtils firstString:@"张医生 " firstColor:UIColorHex(#333333) firstSize:14 secondString:@" 主任医师" secondColor:UIColorHex(#333333) secondSize:13 thirdString:@" 内科 " thirdColor:UIColorHex(#333333) thirdSize:13]; + [self.backView addSubview:self.namelabel]; + + + self.statusBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.backView.width - 70, 15, 60, 17)]; + [self.statusBtn setTitle:@"历史咨询" forState:UIControlStateNormal]; + [self.statusBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.statusBtn.layer.cornerRadius = 4.0f; + self.statusBtn.layer.masksToBounds = YES; + self.statusBtn.backgroundColor = RGBA(33, 190, 189, 0.5); + self.statusBtn.titleLabel.font = MEDIUMFONT(10); + [self.backView addSubview:self.statusBtn ]; + + + self.roomLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.doctorImg.right + 8, self.namelabel.bottom + 10 , self.backView.width - self.doctorImg.right -30, 15)]; + self.roomLabel.text = @""; + self.roomLabel.textColor = CFontColor2; + self.roomLabel.font = BOLDSYSTEMFONT(12); + self.roomLabel.textAlignment = NSTextAlignmentLeft; +// self.namelabel.attributedText = [HQCommonUtils firstString:@"张医生 " firstColor:UIColorHex(#333333) firstSize:14 secondString:@" 主任医师" secondColor:UIColorHex(#333333) secondSize:13 thirdString:@" 内科 " thirdColor:UIColorHex(#333333) thirdSize:13]; + [self.backView addSubview:self.roomLabel]; + + + +// 1818954 + + self.lvlabel = [[UILabel alloc] initWithFrame:CGRectMake(self.namelabel.left, self.roomLabel.bottom + 8, 30, 15)]; + + self.lvlabel.textColor = KWhiteColor; + self.lvlabel.backgroundColor = UIColorHex(#21BEBD); + self.lvlabel.layer.cornerRadius = 3.0f; + self.lvlabel.layer.masksToBounds = YES; + self.lvlabel.layer.borderWidth = 1.0f; + self.lvlabel.layer.borderColor = UIColorHex(#21BEBD).CGColor; + self.lvlabel.font = MEDIUMFONT(10); + self.lvlabel.textAlignment = NSTextAlignmentCenter; + [self.backView addSubview:self.lvlabel]; + +// [self.lvlabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.hospationLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.lvlabel.right + 10, self.roomLabel.bottom + 8, self.backView.width - self.lvlabel.right - 15, 13)]; + self.hospationLabel.text = @" 西京医院 "; + self.hospationLabel.textColor = UIColorHex(#666666); + self.hospationLabel.font = MEDIUMFONT(13); + self.hospationLabel.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.hospationLabel]; + + //新增 + + self.introduceLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.doctorImg.right + 8, self.lvlabel.bottom + 12, _backView.width - self.doctorImg.right - 20, 20)]; + self.introduceLabel.text = @"擅长:"; + self.introduceLabel.textColor = UIColorHex(#666666); + self.introduceLabel.font = MEDIUMFONT(13); + self.introduceLabel.textAlignment = NSTextAlignmentLeft; + self.introduceLabel.numberOfLines = 3 ; + [self.backView addSubview:self.introduceLabel]; + + + //新增 + +// UIImageView * hotImage = [[UIImageView alloc] initWithFrame:CGRectMake(self.introduceLabel.left, self.introduceLabel.bottom + 17, 14, 15)]; +// hotImage.image = IMAGE_NAMED(@"doctorHot"); +// self.hotImage = hotImage; +// [self.backView addSubview:hotImage]; + + + self.toolsLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.introduceLabel.left, self.introduceLabel.bottom + 10, self.introduceLabel.width + kRealValue(10), 40)]; + self.toolsLabel.text = @"综合评价:5.0 / 回复率:99% / 咨询量:3323"; + self.toolsLabel.textColor = UIColorHex(#666666); + self.toolsLabel.font = MEDIUMFONT(13); + self.toolsLabel.textAlignment = NSTextAlignmentLeft; + self.toolsLabel.numberOfLines = 2; + [self.backView addSubview:self.toolsLabel]; + + + + UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(15, self.toolsLabel.bottom + 17, _backView.width - 30, 1)]; + linv.backgroundColor = UIColorHex(#E0E0E0); + self.linvView = linv; + [self.backView addSubview:linv]; + + self.pictureButton = [[UIButton alloc] initWithFrame:CGRectMake(15, linv.bottom + 5, linv.width / 2, 40)]; + [self.pictureButton setTitle:@"图文咨询" forState:UIControlStateNormal]; + [self.pictureButton setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.pictureButton.titleLabel.font = MEDIUMFONT(13); + self.pictureButton.backgroundColor = KWhiteColor; + [self.pictureButton addTarget:self action:@selector(pictureQuestionAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.backView addSubview:self.pictureButton ]; + + + self.videoButton = [[UIButton alloc] initWithFrame:CGRectMake(self.pictureButton.right, self.pictureButton.top, self.pictureButton.width, self.pictureButton.height)]; + [self.videoButton setTitle:@"视频咨询" forState:UIControlStateNormal]; + [self.videoButton setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.videoButton.titleLabel.font = MEDIUMFONT(13); + self.videoButton.backgroundColor = KWhiteColor; + [self.videoButton addTarget:self action:@selector(videoQuestionAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.backView addSubview:self.videoButton ]; + + UIView * cowlinv = [[UIView alloc] initWithFrame:CGRectMake( self.pictureButton.right, self.pictureButton.top,1 , 40)]; + cowlinv.backgroundColor = UIColorHex(#E0E0E0); + self.cowlinv = cowlinv; + [self.backView addSubview:cowlinv]; + + [HQCommonUtils addShadowToView:self.backView]; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + } + + +- (void)setDoctorModel:(DoctorListModel *)doctorModel { + + _doctorModel = doctorModel; + + + self.namelabel.text = [NSString stringWithFormat:@"%@",self.doctorModel.doctorName]; + + self.roomLabel.text = [NSString stringWithFormat:@"%@ %@",self.doctorModel.doctorTitle,self.doctorModel.departmentName]; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_doctorModel.photo]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.doctorImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:IMAGE_NAMED(@"doctorNoImage")]; + + self.toolsLabel.text = [NSString stringWithFormat:@" 综合评价:%@ / 回复率:%.1f%% / 咨询量:%@",_doctorModel.overallMerit,[_doctorModel.responseRate floatValue] * 100,_doctorModel.messageNum]; + self.hospationLabel.text = self.doctorModel.resourceName; + + if (ValidStr(_doctorModel.hospitalLevel)) { + + self.lvlabel.hidden = YES; + self.hospationLabel.left = self.namelabel.left; + + }else + { + self.lvlabel.hidden = NO; + + self.lvlabel.text = [NSString stringWithFormat:@" %@ ",_doctorModel.hospitalLevel]; + + + + [UILabel changeWordSpaceForLabel:self.lvlabel WithSpace:2]; + + self.lvlabel.width = [HQCommonUtils getLengthFromText:self.lvlabel.text andFontSize:11] + kRealValue(8); + self.hospationLabel.left = self.lvlabel.right + 10; + + } + //布局 + if (!ValidStr(_doctorModel.goodAt)) { + NSMutableAttributedString * goodatString = [[NSMutableAttributedString alloc] initWithString:_doctorModel.goodAt]; + self.introduceLabel.attributedText = goodatString ; + } + else + { + self.introduceLabel.text = @"擅长:"; + } + int currentLins = 0 ; + + if (!ValidStr(_doctorModel.goodAt)) { + NSMutableAttributedString * goodatString = [[NSMutableAttributedString alloc] initWithString:_doctorModel.goodAt]; + currentLins =[self getNumberOfLinesWithText:goodatString andLabelWidth: kScreenWidth - 127]; + } + if (currentLins < 3) { + self.introduceLabel.height = [HQCommonUtils getSpaceLabelHeight:self.introduceLabel withStr:_doctorModel.goodAt withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth: kScreenWidth - 127 withLineSpacing:5]; + }else + { + self.introduceLabel.height = 60; + } + + + if (ValidStr(_doctorModel.tfShowFire)) { + + }else + { + NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:self.toolsLabel.text]; + [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] range:NSMakeRange(0, [self.toolsLabel.text length])]; + NSTextAttachment *icon = [[NSTextAttachment alloc] init]; + UIImage *iconImage = [UIImage imageNamed:@"doctorHot"]; + [icon setBounds:CGRectMake(0, -3, 15, 15)]; + [icon setImage:iconImage]; + NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:icon]; + [attrStr insertAttributedString:string atIndex:0]; + self.toolsLabel.attributedText = attrStr; + } + self.toolsLabel.top = self.introduceLabel.bottom + 10; + self.linvView.top = self.toolsLabel.bottom + 14; + + self.cowlinv.top = self.linvView.bottom + 5; + self.pictureButton.top = self.linvView.bottom + 5; + self.videoButton.top = self.linvView.bottom + 5; + self.backView.height = self.videoButton.bottom; + self.superBackView.height = self.backView.bottom + kRealValue(10); + self.backView.backgroundColor = KWhiteColor; + self.backView.layer.cornerRadius = 4.0f; + self.backView.layer.masksToBounds = YES; + self.backView.layer.shadowColor = [UIColor grayColor].CGColor; +// self.layer.shadowOffset = CGSizeMake(3, 3);//有偏移量的情况,默认向右向下有阴影 + self.backView.layer.shadowOffset = CGSizeZero; //设置偏移量为0,四周都有阴影 + self.backView.layer.shadowRadius = 1.0f;//阴影半径,默认3 + self.backView.layer.shadowOpacity = 0.3f;//阴影透明度,默认0 + self.backView.layer.masksToBounds = NO; + self.videoButton.userInteractionEnabled = true; + self.pictureButton.userInteractionEnabled = true; + //判断是否开始服务 + if ([_doctorModel.doctorStatus intValue] != 3) { //非停诊 + if ([_doctorModel.audioStatus intValue] == 1) { //开启 + + [self.videoButton setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + self.videoButton.backgroundColor = KWhiteColor; + self.videoButton.userInteractionEnabled = true; + + }else + { + [self.videoButton setTitleColor:UIColor.grayColor forState:UIControlStateNormal]; + self.videoButton.userInteractionEnabled = false; + } + + } + else{ + self.videoButton.userInteractionEnabled = false; + [self.videoButton setTitleColor:UIColor.grayColor forState:UIControlStateNormal]; + [self.pictureButton setTitleColor:UIColor.grayColor forState:UIControlStateNormal]; + + self.pictureButton.userInteractionEnabled = false; + } + + // 设置阴影路径,仅在底部 + // 可选:设置圆角 + +// UILabel * lab = [[UILabel alloc] initWithFrame:CGRectMake(88, 0, kScreenWidth - 127, 10)]; +// CGFloat h = 0; +// if (!ValidStr(self.doctorModel.goodAt) ) { +// h = [HQCommonUtils getSpaceLabelHeight:lab withStr:self.doctorModel.goodAt withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:lab.width withLineSpacing:1]; +// } + if(ValidStr(_doctorModel.type)) { + + self.statusBtn.hidden = true; + }else { + self.statusBtn.hidden = false; + } + self.backView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.backView.bounds cornerRadius:self.backView.layer.cornerRadius].CGPath; + +} + + +- (void)pictureQuestionAction:(UIButton *)picBtn { + + if ([self.zongheZhuangjiaDelegate respondsToSelector:@selector(zongheZhuangjiaPictureAction:)]) { + + [self.zongheZhuangjiaDelegate zongheZhuangjiaPictureAction:self.doctorModel.doctorId]; + } + +} + +- (void)videoQuestionAction:(UIButton *)videoBtn { + + if ([self.zongheZhuangjiaDelegate respondsToSelector:@selector(zongheZhuangjiaVideoAction:)]) { + + [self.zongheZhuangjiaDelegate zongheZhuangjiaVideoAction:self.doctorModel.doctorId]; + } + +} + +//获取文本行数 +- (int)getNumberOfLinesWithText:(NSMutableAttributedString *)text andLabelWidth:(CGFloat)width { + CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)text); + CGMutablePathRef Path = CGPathCreateMutable(); + CGPathAddRect(Path, NULL ,CGRectMake(0 , 0 , width, INT_MAX)); + CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), Path, NULL); + // 得到字串在frame中被自动分成了多少个行。 + CFArrayRef rows = CTFrameGetLines(frame); + // 实际行数 + int numberOfLines = CFArrayGetCount(rows); + CFRelease(frame); + CGPathRelease(Path); + CFRelease(framesetter); + return numberOfLines; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/PopView/PopupView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/PopView/PopupView.h new file mode 100644 index 0000000..7132b78 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/PopView/PopupView.h @@ -0,0 +1,21 @@ +// +// PopupView.h +// QinghaiProject +// +// Created by Apple on 2024/7/6. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void (^PopupViewTapHandler)(void); + +@interface PopupView : UIView + +@property (nonatomic, copy) PopupViewTapHandler tapHandler; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/PopView/PopupView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/PopView/PopupView.m new file mode 100644 index 0000000..b8c7bd5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/PopView/PopupView.m @@ -0,0 +1,131 @@ + +// +// PopupView.h +// QinghaiProject +// +// Created by Apple on 2024/7/6. +// + +#import "PopupView.h" + + +@implementation PopupView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self setupView]; + } + return self; +} + +- (void)setupView { + self.backgroundColor = [UIColor clearColor]; // 设置为透明以显示阴影效果 + + CAShapeLayer *shapeLayer = [CAShapeLayer layer]; + shapeLayer.path = [self createPopupPath].CGPath; + shapeLayer.fillColor = [UIColor whiteColor].CGColor; + + // 设置阴影 + shapeLayer.shadowColor = [UIColor blackColor].CGColor; + shapeLayer.shadowOpacity = 0.3; + shapeLayer.shadowOffset = CGSizeMake(0, 2); + shapeLayer.shadowRadius = 4; + shapeLayer.shadowPath = [self createPopupPath].CGPath; // 使用路径作为阴影路径 + + [self.layer insertSublayer:shapeLayer atIndex:0]; + + // 添加点击手势 + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap)]; + [self addGestureRecognizer:tapGesture]; + + // 添加“更多记录”标签 + UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; + label.text = @"更多记录"; + label.font = SYSTEMFONT(13); + label.textColor = [UIColor blackColor]; + label.textAlignment = NSTextAlignmentCenter; + [self addSubview:label]; + + // 设置标签约束 + label.translatesAutoresizingMaskIntoConstraints = NO; + [NSLayoutConstraint activateConstraints:@[ + [label.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + [label.centerYAnchor constraintEqualToAnchor:self.centerYAnchor] + ]]; +} + +- (UIBezierPath *)createPopupPath { + CGFloat width = self.bounds.size.width; + CGFloat height = self.bounds.size.height; + CGFloat triangleHeight = 10.0; + CGFloat triangleWidth = 20.0; + CGFloat cornerRadius = 10.0; + CGFloat triangleOffset = 10.0; // 箭头距离右边的距离 + + UIBezierPath *path = [UIBezierPath bezierPath]; + + // 从左下角开始 + [path moveToPoint:CGPointMake(0, height - cornerRadius)]; + + // 左下角圆角 + [path addArcWithCenter:CGPointMake(cornerRadius, height - cornerRadius) + radius:cornerRadius + startAngle:M_PI + endAngle:M_PI_2 + clockwise:NO]; + + // 底边 + [path addLineToPoint:CGPointMake(width - cornerRadius, height)]; + + // 右下角圆角 + [path addArcWithCenter:CGPointMake(width - cornerRadius, height - cornerRadius) + radius:cornerRadius + startAngle:M_PI_2 + endAngle:0 + clockwise:NO]; + + // 右边 + [path addLineToPoint:CGPointMake(width, cornerRadius)]; + + // 右上角圆角 + [path addArcWithCenter:CGPointMake(width - cornerRadius, cornerRadius) + radius:cornerRadius + startAngle:0 + endAngle:-M_PI_2 + clockwise:NO]; + + // 顶边,直到箭头左边的位置 + [path addLineToPoint:CGPointMake(width - triangleWidth - triangleOffset, 0)]; + + // 箭头的左边 + [path addLineToPoint:CGPointMake(width - triangleOffset - triangleWidth / 2, -triangleHeight)]; + + // 箭头的右边 + [path addLineToPoint:CGPointMake(width - triangleOffset, 0)]; + + // 顶边剩余的部分 + [path addLineToPoint:CGPointMake(cornerRadius, 0)]; + + // 左上角圆角 + [path addArcWithCenter:CGPointMake(cornerRadius, cornerRadius) + radius:cornerRadius + startAngle:-M_PI_2 + endAngle:M_PI + clockwise:NO]; + + // 左边 + [path addLineToPoint:CGPointMake(0, height - cornerRadius)]; + + [path closePath]; + + return path; +} + +- (void)handleTap { + if (self.tapHandler) { + self.tapHandler(); + } +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionAddPeopleTableCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionAddPeopleTableCell.h new file mode 100644 index 0000000..06348d7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionAddPeopleTableCell.h @@ -0,0 +1,27 @@ +// +// QuestionAddPeopleTableCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/17. +// + +#import +#import "QuestionDiseaseInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol addQuestionDelegate + +- (void)addQuestionPeopleClick:(QuestionDiseaseInfoModel *)model; + +@end + +@interface QuestionAddPeopleTableCell : UITableViewCell + +@property (nonatomic, strong) QuestionDiseaseInfoModel * userModel; + +@property (nonatomic, weak)id addDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionAddPeopleTableCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionAddPeopleTableCell.m new file mode 100644 index 0000000..3c0fb71 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionAddPeopleTableCell.m @@ -0,0 +1,75 @@ +// +// QuestionAddPeopleTableCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/17. +// + +#import "QuestionAddPeopleTableCell.h" + +@implementation QuestionAddPeopleTableCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + UIButton * addBtn = [[UIButton alloc] init]; + + [addBtn setTitle:@" 新增档案" forState:UIControlStateNormal]; + +// [addBtn setImage:[UIImage imageNamed:@"addQuestionPeople"] forState:UIControlStateNormal]; + + [addBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + + [addBtn addTarget:self action:@selector(addQuetsionClick) forControlEvents:UIControlEventTouchUpInside]; + + addBtn.titleLabel.font = MEDIUMFONT(14); + + [self.contentView addSubview:addBtn]; + + [addBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(@0); + make.top.mas_offset(5); + make.height.mas_offset(48); + }]; + + +} + +- (void)setUserModel:(QuestionDiseaseInfoModel *)userModel { + + _userModel = userModel; + + +} + +- (void)addQuetsionClick { + + if ([self.addDelegate respondsToSelector:@selector(addQuestionPeopleClick:)]) { + + [self.addDelegate addQuestionPeopleClick:self.userModel]; + + } + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/AllRoomRecordsCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/AllRoomRecordsCell.h new file mode 100644 index 0000000..47f5255 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/AllRoomRecordsCell.h @@ -0,0 +1,17 @@ +// +// AllRoomRecordsCell.h +// QinghaiProject +// +// Created by Apple on 2024/7/6. +// + +#import +#import "HomeQusetionRecordsModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface AllRoomRecordsCell : UITableViewCell +@property (nonatomic, strong) HomeQusetionRecordsModel * model; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/AllRoomRecordsCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/AllRoomRecordsCell.m new file mode 100644 index 0000000..8dcc1b5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/AllRoomRecordsCell.m @@ -0,0 +1,223 @@ +// +// AllRoomRecordsCell.m +// QinghaiProject +// +// Created by Apple on 2024/7/6. +// + +#import "AllRoomRecordsCell.h" + +@interface AllRoomRecordsCell () + + +@property (nonatomic, strong) UIView * backView; + +@property (nonatomic, strong) UIView * typeView; + +@property (nonatomic, strong) UIImageView * doctorImg; + +@property (nonatomic, strong) UILabel * namelabel; +@property (nonatomic, strong) UILabel * typelabel; + +@property (nonatomic, strong) UILabel * introduceLabel; + +@property (nonatomic, strong) UIImageView * questionTypeImg; + +@property (nonatomic, strong) UILabel * lvlabel; + +@property (nonatomic, strong) UILabel * hospationLabel; + +@property (nonatomic, strong) UILabel * questionName; + +@property (nonatomic, strong) UILabel * questionTime; + +@property (nonatomic, strong) UIButton * questionStatusBtn; + + +@property (nonatomic, strong) UILabel * numlabel; + +@end + +@implementation AllRoomRecordsCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style + reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + + +- (void)createUI { + + self.backView = [[UIView alloc] init]; + self.backView.layer.cornerRadius = 15; + self.backView.layer.masksToBounds = true; + self.backView.backgroundColor = KWhiteColor; + [self.contentView addSubview:self.backView]; +// + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(18); + make.right.mas_offset(-18); + make.top.mas_offset(0); + make.bottom.mas_offset(15); + }]; +// + + self.doctorImg = [[UIImageView alloc] init]; + self.doctorImg.layer.cornerRadius = 30; + self.doctorImg.layer.masksToBounds = true; + [self.backView addSubview:self.doctorImg]; + + [self.doctorImg mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_offset(15); + make.width.height.mas_offset(60); + }]; + + + self.namelabel = [[UILabel alloc] init]; + self.namelabel.textColor = CFontColor1; + self.namelabel.font = BOLDSYSTEMFONT(14); + self.namelabel.text = @"全科医生"; + self.namelabel.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.namelabel]; + + [self.namelabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImg.mas_right).offset(15); + make.top.mas_offset(22); + make.height.mas_offset(15); + }]; + [self.namelabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + + self.questionStatusBtn = [[UIButton alloc] init]; + [self.questionStatusBtn setBackgroundImage:[UIImage imageNamed:@"recordsStatusEnd"] forState:UIControlStateNormal] ; //pictureTypeIcon + self.questionStatusBtn.titleLabel.font = MEDIUMFONT(13); + [self.backView addSubview:self.questionStatusBtn ]; + + [self.questionStatusBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_offset(61); + make.height.mas_offset(26); + make.right.mas_offset(-2); + make.top.mas_offset(2); + }]; + + + + self.questionTime = [[UILabel alloc] init]; + self.questionTime.text = @"xx-xx-xx"; + self.questionTime.textColor = UIColorHex(#96A0A0); + self.questionTime.font = MEDIUMFONT(12); + self.questionTime.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.questionTime]; + + [self.questionTime mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.namelabel); + make.top.mas_equalTo(self.namelabel.mas_bottom).offset(15); + make.height.mas_offset(13); + }]; + + [self.questionTime setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + self.numlabel = [[UILabel alloc] init]; + self.numlabel.textColor = CFontColor1; + self.numlabel.font = SYSTEMFONT(10); + self.numlabel.text = @"1"; + self.numlabel.backgroundColor = UIColorHex(#21BEBD); + self.numlabel.textColor = KWhiteColor; + self.numlabel.textAlignment = NSTextAlignmentCenter; + self.numlabel.layer.cornerRadius = 6; + self.numlabel.layer.masksToBounds = true; + [self.backView addSubview:self.numlabel]; + + + + [self.numlabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(self.backView.mas_right).offset(-15); + make.bottom.mas_equalTo(self.doctorImg.mas_bottom); + make.height.width.mas_offset(12); + }]; + [self.namelabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(18); + make.right.mas_offset(-18); + make.top.mas_offset(15); + make.bottom.mas_equalTo(self.doctorImg.mas_bottom).offset(15); + }]; + + + +} + + +- (void)setModel:(HomeQusetionRecordsModel *)model { + _model = model; + self.numlabel.hidden = true; +// if (_model.totalCount == 0) { +// self.numlabel.hidden = true; +// }else +// { +// self.numlabel.hidden = false; +// self.numlabel.text = [NSString stringWithFormat:@"%ld",model.totalCount]; +// } + + if (ValidStr(_model.toAccountName)) { + + self.namelabel.text = @"全科医生"; + } + else + { + self.namelabel.text =[NSString stringWithFormat:@"%@",_model.toAccountName] ; + } + if ([model.contentStatus integerValue] <= 3) { //小于等于3 进行中 其他的 结束 + + + [self.questionStatusBtn setTitle:@"进行中" forState:UIControlStateNormal]; + [self.questionStatusBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [self.questionStatusBtn setBackgroundImage:[UIImage imageNamed:@"recordStatusIng"] forState:UIControlStateNormal] ; \ + } + if ([model.contentStatus integerValue] > 3) { //小于等于3 进行中 其他的 结束 + + [self.questionStatusBtn setTitle:@"已完成" forState:UIControlStateNormal]; + [self.questionStatusBtn setTitleColor:UIColorHex(#96A0A0) forState:UIControlStateNormal]; + [self.questionStatusBtn setBackgroundImage:[UIImage imageNamed:@"recordsStatusEnd"] forState:UIControlStateNormal] ; \ + } + + self.questionTime.text = [NSString stringWithFormat:@"%@",_model.createTime]; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_model.toAccountHead]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.doctorImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"doctorNoImage"]]; +} + + + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/QustionHomeRecordsCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/QustionHomeRecordsCell.h new file mode 100644 index 0000000..8510995 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/QustionHomeRecordsCell.h @@ -0,0 +1,20 @@ +// +// QustionHomeRecordsCell.h +// QinghaiProject +// +// Created by Apple on 2024/7/5. +// + +#import +#import "HomeQusetionRecordsModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QustionHomeRecordsCell : UITableViewCell + +@property (nonatomic, strong) HomeQusetionRecordsModel * model; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/QustionHomeRecordsCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/QustionHomeRecordsCell.m new file mode 100644 index 0000000..6299f55 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionChange/QustionHomeRecordsCell.m @@ -0,0 +1,331 @@ +// +// QustionHomeRecordsCell.m +// QinghaiProject +// +// Created by Apple on 2024/7/5. +// + +#import "QustionHomeRecordsCell.h" + +@interface QustionHomeRecordsCell () + + +@property (nonatomic, strong) UIView * backView; + +@property (nonatomic, strong) UIView * typeView; + +@property (nonatomic, strong) UIImageView * doctorImg; + +@property (nonatomic, strong) UILabel * namelabel; +@property (nonatomic, strong) UILabel * typelabel; + +@property (nonatomic, strong) UILabel * introduceLabel; + +@property (nonatomic, strong) UIImageView * questionTypeImg; + +@property (nonatomic, strong) UILabel * lvlabel; + +@property (nonatomic, strong) UILabel * hospationLabel; + +@property (nonatomic, strong) UILabel * questionName; + +@property (nonatomic, strong) UILabel * questionTime; + +@property (nonatomic, strong) UIButton * questionStatusBtn; +@end + +@implementation QustionHomeRecordsCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style + reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + + +- (void)createUI { + + self.backView = [[UIView alloc] init]; + self.backView.layer.cornerRadius = 15; + self.backView.layer.masksToBounds = true; + self.backView.backgroundColor = KWhiteColor; + [self.contentView addSubview:self.backView]; +// + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(18); + make.right.mas_offset(-18); + make.top.mas_offset(0); + make.bottom.mas_offset(15); + }]; +// + + self.doctorImg = [[UIImageView alloc] init]; + self.doctorImg.layer.cornerRadius = 30; + self.doctorImg.layer.masksToBounds = true; + [self.backView addSubview:self.doctorImg]; + + [self.doctorImg mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_offset(15); + make.width.height.mas_offset(60); + }]; + + + self.namelabel = [[UILabel alloc] init]; + self.namelabel.textColor = CFontColor1; + self.namelabel.font = BOLDSYSTEMFONT(14); + self.namelabel.text = @"--"; + self.namelabel.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.namelabel]; + + [self.namelabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImg.mas_right).offset(15); + make.top.mas_offset(22); + make.height.mas_offset(15); + }]; + [self.namelabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + //类型判断 + self.typeView = [[UIView alloc] init]; + self.typeView.layer.cornerRadius = 2.5; + self.typeView.layer.masksToBounds = true; + self.typeView.backgroundColor = RGBA(7, 194, 143, 0.5); + [self.backView addSubview:self.typeView]; + + [self.typeView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.namelabel.mas_right).offset(10); + make.top.mas_offset(20); + make.height.mas_offset(18); + make.width.mas_offset(67); + }]; + + + self.questionTypeImg = [[UIImageView alloc] init]; + self.questionTypeImg.image = [UIImage imageNamed:@"videoTypeIcon"]; //pictureTypeIcon + self.questionTypeImg.size = CGSizeMake(18, 18); + self.questionTypeImg.contentMode = UIViewContentModeLeft; + [self.typeView addSubview:self.questionTypeImg ]; + + [self.questionTypeImg mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_offset(18); + make.left.top.mas_offset(0); + }]; + + self.questionStatusBtn = [[UIButton alloc] init]; + [self.questionStatusBtn setBackgroundImage:[UIImage imageNamed:@"recordStatusIng"] forState:UIControlStateNormal] ; //pictureTypeIcon + self.questionStatusBtn.contentMode = UIViewContentModeLeft; + self.questionStatusBtn.titleLabel.font = MEDIUMFONT(13); + [self.backView addSubview:self.questionStatusBtn ]; + + [self.questionStatusBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_offset(61); + make.height.mas_offset(26); + make.right.top.mas_offset(2); + }]; + + + self.typelabel = [[UILabel alloc] init]; + self.typelabel.text = @"图文咨询"; + self.typelabel.textColor =UIColorHex(#07C28F); + self.typelabel.font = MEDIUMFONT(10); + self.typelabel.textAlignment = NSTextAlignmentRight; + [self.typeView addSubview:self.typelabel]; + + [self.typelabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-5); + make.top.bottom.mas_equalTo(@0); + make.right.mas_equalTo(self.questionTypeImg.mas_right); + }]; + + + self.lvlabel = [[UILabel alloc] init]; + self.lvlabel.text = @""; + self.lvlabel.textColor = UIColorHex(#FF972F); + self.lvlabel.backgroundColor = UIColorHex(#FFF8ED); + self.lvlabel.layer.cornerRadius = 3.0f; + self.lvlabel.layer.masksToBounds = YES; + self.lvlabel.font = MEDIUMFONT(12); + self.lvlabel.textAlignment = NSTextAlignmentCenter; + [self.backView addSubview:self.lvlabel]; + + [self.lvlabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.namelabel.mas_left); + make.top.mas_equalTo(self.namelabel.mas_bottom).offset(19); + make.width.mas_offset(60); + make.height.mas_offset(17); + }]; + + self.hospationLabel = [[UILabel alloc] init]; + self.hospationLabel.text = @"--"; + self.hospationLabel.textColor = UIColorHex(#96A0A0); + self.hospationLabel.font = MEDIUMFONT(12); + self.hospationLabel.numberOfLines = 2; + self.hospationLabel.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.hospationLabel]; + + [self.hospationLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.lvlabel.mas_right).offset(10); + make.top.mas_equalTo(self.lvlabel.mas_top).offset(2); + make.right.mas_offset(-15); + }]; + [self.hospationLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + //新增 + + + UIView * linv = [[UIView alloc] init]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [self.backView addSubview:linv]; + + [linv mas_makeConstraints:^(MASConstraintMaker *make) { + + make.left.mas_equalTo(@15); + make.right.mas_offset(-15); + make.height.mas_equalTo(@1); + make.top.mas_equalTo(self.hospationLabel.mas_bottom).offset(23); + }]; + + self.questionName = [[UILabel alloc] init]; + self.questionName.text = @"咨询人:"; + self.questionName.textColor = UIColorHex(#96A0A0); + self.questionName.font = MEDIUMFONT(12); + self.questionName.numberOfLines = 2; + self.questionName.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.questionName]; + + [self.questionName mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(@15); + make.top.mas_equalTo(linv.mas_bottom).offset(15); + make.height.mas_offset(13); + }]; + [self.questionName setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.questionTime = [[UILabel alloc] init]; + self.questionTime.text = @"xx-xx-xx"; + self.questionTime.textColor = UIColorHex(#96A0A0); + self.questionTime.font = MEDIUMFONT(12); + self.questionTime.textAlignment = NSTextAlignmentRight; + [self.backView addSubview:self.questionTime]; + + [self.questionTime mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(@-15); + make.top.mas_equalTo(linv.mas_bottom).offset(15); + make.height.mas_offset(13); + }]; + [self.questionTime setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(18); + make.right.mas_offset(-18); + make.top.mas_offset(15); + make.bottom.mas_equalTo(self.questionTime.mas_bottom).offset(16); + }]; + + [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_offset(0); + make.bottom.mas_equalTo(self.backView.mas_bottom).offset(15); + }]; + +} + +- (void)setModel:(HomeQusetionRecordsModel *)model { + _model = model; + +// + if ([model.contentType integerValue] == 2) { + + self.typelabel.text = @"视频咨询"; + self.typelabel.textColor = UIColorHex(#3365DF); + self.typeView.backgroundColor = RGBA(51, 101, 223, 0.3); + self.questionTypeImg.image = [UIImage imageNamed:@"videoTypeIcon"]; //pictureTypeIcon + } + if ([model.contentType integerValue] == 1) { + + self.typelabel.text = @"图文咨询"; + self.typelabel.textColor =UIColorHex(#07C28F); + self.typeView.backgroundColor = RGBA(7, 194, 143, 0.3); + self.questionTypeImg.image = [UIImage imageNamed:@"pictureTypeIcon"]; // + } + + if ([model.contentStatus integerValue] <= 3) { //小于等于3 进行中 其他的 结束 + + + [self.questionStatusBtn setTitle:@"进行中" forState:UIControlStateNormal]; + [self.questionStatusBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [self.questionStatusBtn setBackgroundImage:[UIImage imageNamed:@"recordStatusIng"] forState:UIControlStateNormal] ; \ + } + if ([model.contentStatus integerValue] > 3) { //小于等于3 进行中 其他的 结束 + + [self.questionStatusBtn setTitle:@"已完成" forState:UIControlStateNormal]; + [self.questionStatusBtn setTitleColor:UIColorHex(#96A0A0) forState:UIControlStateNormal]; + [self.questionStatusBtn setBackgroundImage:[UIImage imageNamed:@"recordsStatusEnd"] forState:UIControlStateNormal] ; \ + } + if(ValidStr(_model.hospitalLevel) ) { + self.lvlabel.hidden = YES; + [self.hospationLabel mas_updateConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.namelabel); + make.top.mas_equalTo(self.namelabel.mas_bottom).offset(19); + make.right.mas_offset(-15); + }]; + [self.hospationLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + + }else + { + self.lvlabel.hidden = false; + self.lvlabel.text = _model.hospitalLevel; + + + [self.lvlabel mas_updateConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.namelabel.mas_left); + make.top.mas_equalTo(self.namelabel.mas_bottom).offset(19); + make.width.mas_offset(60); + make.height.mas_offset(17); + }]; + + [self.hospationLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.lvlabel.mas_right).offset(10); + make.top.mas_equalTo(self.lvlabel.mas_top).offset(2); + make.right.mas_offset(-15); + }]; + [self.hospationLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + } + + self.namelabel.text = [NSString stringWithFormat:@" %@ ",_model.toAccountName]; + + self.hospationLabel.text = [NSString stringWithFormat:@" %@ ",_model.resourceName]; + + self.questionName.text = [NSString stringWithFormat:@"咨询人:%@ ",_model.memberName]; + + self.questionTime.text = [NSString stringWithFormat:@" %@ ",_model.createTime]; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_model.toAccountHead]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.doctorImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"doctorNoImage"]]; +} + + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableView.h new file mode 100644 index 0000000..2f2aec3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableView.h @@ -0,0 +1,31 @@ +// +// QuestionDiseaseTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import +#import "QuestionDiseaseInfoModel.h" +#import "QuestionDiseaseTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol questionDiseaseDelegate + +- (void)diseaseSelectedAction:(QuestionDiseaseInfoModel *)model; + +@end + +@interface QuestionDiseaseTableView : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, strong) QuestionDiseaseInfoModel * subModel; + +@property (nonatomic, weak)id diseaseDelegate; +@property (nonatomic, weak) id peopleDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableView.m new file mode 100644 index 0000000..6d4ef29 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableView.m @@ -0,0 +1,160 @@ +// +// QuestionDiseaseTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "QuestionDiseaseTableView.h" + + +@interface QuestionDiseaseTableView () + + +@end + +@implementation QuestionDiseaseTableView + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.scrollEnabled = false; + self.rowHeight = UITableViewAutomaticDimension; +} + + +- (void)setPeopleDelegate:(id)peopleDelegate { + _peopleDelegate = peopleDelegate; + +} + + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + +- (void)setSubModel:(QuestionDiseaseInfoModel *)subModel { + + _subModel = subModel; + + [self reloadData]; + +} + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return 1; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + static NSString * cellID = @"cellID"; + + QuestionDiseaseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[QuestionDiseaseTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.model = self.dataArray[indexPath.section]; + cell.infoModel = self.subModel; + cell.peopleDelegate = self.peopleDelegate; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + + diseaseModel * model = self.dataArray[indexPath.section]; + + for (diseaseModel * subModel in self.dataArray) { + + if (subModel == model) { + subModel.isSelected = !subModel.isSelected; + } + else + { + subModel.isSelected = false; + } + + } + + if ([self.diseaseDelegate respondsToSelector:@selector(diseaseSelectedAction:)]) { + + + [self.diseaseDelegate diseaseSelectedAction:self.subModel]; + + } + [self reloadData]; + + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + + return kRealValue(10); + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} +// +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + return 85; +} + + + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableViewCell.h new file mode 100644 index 0000000..67b02dd --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableViewCell.h @@ -0,0 +1,28 @@ +// +// QuestionDiseaseTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import +#import "QuestionDiseaseInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol questionPeoplelistDelegate + +- (void)modficalFileAction:(diseaseModel *)model withQustionModel:(QuestionDiseaseInfoModel *)infoModel; + +@end + +@interface QuestionDiseaseTableViewCell : UITableViewCell + +@property (nonatomic, strong) diseaseModel * model; +@property (nonatomic, strong) QuestionDiseaseInfoModel * infoModel; +@property (nonatomic, assign) id peopleDelegate; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableViewCell.m new file mode 100644 index 0000000..b768a25 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionDiseaseTableViewCell.m @@ -0,0 +1,149 @@ +// +// QuestionDiseaseTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "QuestionDiseaseTableViewCell.h" + +@interface QuestionDiseaseTableViewCell () + +@property (nonatomic, strong) UIButton * chooseBtn ; + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) UILabel * desLabel; + +@property (nonatomic, strong) UIView * backView; + +@property (nonatomic, strong) UIButton * modficalBtn ; + +@end + +@implementation QuestionDiseaseTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; + +} + +- (void)createUI { + + self.backView = [[UIView alloc] init]; + self.backView.backgroundColor = UIColorHex(#F4F4F4); + self.backView.layer.cornerRadius = 5.0f; + self.backView.layer.masksToBounds = true; + [self.contentView addSubview:self.backView]; + + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(10); + make.right.mas_offset(-10); + make.height.mas_offset(85); + make.top.mas_offset(0); + }]; + + + self.chooseBtn = [[UIButton alloc] init]; + [self.chooseBtn setImage:[UIImage imageNamed:@"choose_nomal"] forState:UIControlStateNormal]; + [self.chooseBtn setImage:[UIImage imageNamed:@"choose_Selected"] forState:UIControlStateSelected]; + self.chooseBtn.userInteractionEnabled = NO; + [self.backView addSubview:self.chooseBtn]; + + [self.chooseBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(10); + make.top.mas_offset(28); + make.width.height.mas_offset(14); + }]; + + self.nameLabel = [[UILabel alloc] init]; + self.nameLabel.text = @"感冒"; + self.nameLabel.font = BOLDSYSTEMFONT(14); + self.nameLabel.textColor = CFontColor1; + self.nameLabel.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.nameLabel]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.chooseBtn.mas_right).offset(17); + make.top.mas_offset(15); + make.height.mas_offset(14); + make.right.mas_offset(-20); + }]; + + self.desLabel = [[UILabel alloc] init]; + self.desLabel.text = @"最近总是肚子不舒服,总是半夜肚子疼。感觉肚子有些凉,最近没有去过医院"; + self.desLabel.font = MEDIUMFONT(13); + self.desLabel.textColor = UIColorHex(#999999); + self.desLabel.textAlignment = NSTextAlignmentLeft; + self.desLabel.numberOfLines = 2; + [self.backView addSubview:self.desLabel]; + + [self.desLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.nameLabel); + make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(8); + make.right.mas_offset(-20); + make.bottom.mas_offset(-13); + }]; + + [self.desLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.modficalBtn = [[UIButton alloc] init]; +// [self.modficalBtn setTitle:@"修改/查看" forState:UIControlStateNormal]; + self.modficalBtn.backgroundColor = KClearColor; + [self.modficalBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + [self.modficalBtn addTarget:self action:@selector(modficalAction) forControlEvents:UIControlEventTouchUpInside]; + self.modficalBtn.titleLabel.font = SYSTEMFONT(14); + [self.backView addSubview:self.modficalBtn]; + + [self.modficalBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(-20); + make.top.mas_offset(0); + make.bottom.mas_offset(0); + make.left.mas_offset(50); + }]; + +} + +- (void)setModel:(diseaseModel *)model { + + _model = model; + + self.nameLabel.text = model.medicalDescribe; + + self.desLabel.text = model.recordsName; + + self.chooseBtn.selected = model.isSelected; + +} + +- (void)setInfoModel:(QuestionDiseaseInfoModel *)infoModel { + + _infoModel = infoModel; + +} + +- (void)modficalAction { + + if ([self.peopleDelegate respondsToSelector:@selector(modficalFileAction:withQustionModel:)]) { + self.model.isSelected = true; + [self.peopleDelegate modficalFileAction:self.model withQustionModel:self.infoModel]; + } +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTable.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTable.h new file mode 100644 index 0000000..a30b39d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTable.h @@ -0,0 +1,18 @@ +// +// QuestionPeopleManagerTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import +#import "QuestionPeopleManagerTableCell.h" +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionPeopleManagerTable : UITableView + +@property (nonatomic, strong) NSArray * dataArray; +@property (nonatomic, copy) peopleModeficBlock xiugaiBlcok; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTable.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTable.m new file mode 100644 index 0000000..56ff8b9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTable.m @@ -0,0 +1,121 @@ +// +// QuestionPeopleManagerTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "QuestionPeopleManagerTable.h" +#import "QuestionPeopleManagerTableCell.h" +#import "QuestionPeopleModel.h" + +@interface QuestionPeopleManagerTable () + + +@end + +@implementation QuestionPeopleManagerTable + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; + +} + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return self.dataArray.count; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + QuestionPeopleModel * model = self.dataArray[indexPath.row]; + + static NSString * cellID = @"cellID"; + + QuestionPeopleManagerTableCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[QuestionPeopleManagerTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.backgroundColor = KWhiteColor; + cell.model = model; + cell.xiugaiBlock = self.xiugaiBlcok; + return cell; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + + QuestionPeopleModel * model = self.dataArray[indexPath.row]; + model.isSelected = !model.isSelected; +// for (QuestionPeopleModel * subModel in self.dataArray) { +// +// if (subModel == model) { +// subModel.isSelected = true; +// }else +// { +// subModel.isSelected = false; +// } +// +// } + [self reloadData]; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + + + + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTableCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTableCell.h new file mode 100644 index 0000000..edaa9d6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTableCell.h @@ -0,0 +1,22 @@ +// +// QuestionPeopleManagerTableCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import +#import "QuestionPeopleModel.h" + +typedef void(^peopleModeficBlock)(QuestionPeopleModel * _Nullable model ); + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionPeopleManagerTableCell : UITableViewCell + +@property (nonatomic, strong) QuestionPeopleModel * model; + +@property (nonatomic, copy) peopleModeficBlock xiugaiBlock; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTableCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTableCell.m new file mode 100644 index 0000000..f044f32 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionPeopleManagerTableCell.m @@ -0,0 +1,138 @@ +// +// QuestionPeopleManagerTableCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "QuestionPeopleManagerTableCell.h" + + +@interface QuestionPeopleManagerTableCell () + +@property (nonatomic, strong) UIButton * chooseBtn; + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) UILabel * infoLabel; + +@property (nonatomic, strong) UIButton * xiugaiBtn; + +@end + +@implementation QuestionPeopleManagerTableCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.chooseBtn = [[UIButton alloc] init]; + [self.chooseBtn setImage:[UIImage imageNamed:@"choose_nomal"] forState:UIControlStateNormal]; + [self.chooseBtn setImage:[UIImage imageNamed:@"choose_Selected"] forState:UIControlStateSelected]; + self.chooseBtn.userInteractionEnabled = NO; + [self.contentView addSubview:self.chooseBtn]; + + [self.chooseBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(30); + make.top.mas_offset(28); + make.width.height.mas_offset(14); + }]; + + self.nameLabel = [[UILabel alloc] init]; + self.nameLabel.text = @"--"; + self.nameLabel.font = BOLDSYSTEMFONT(14); + self.nameLabel.textColor = CFontColor1; + self.nameLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.nameLabel]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.chooseBtn.mas_right).offset(17); + make.top.mas_offset(15); + make.height.mas_offset(14); + make.right.mas_offset(-20); + }]; + + self.infoLabel = [[UILabel alloc] init]; + self.infoLabel.text = @"--"; + self.infoLabel.font = MEDIUMFONT(14); + self.infoLabel.textColor = UIColorHex(#999999); + self.infoLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.infoLabel]; + + [self.infoLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.nameLabel); + make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(15); + make.height.mas_offset(14); + make.right.mas_offset(-20); + }]; + + UIView * linv = [[UIView alloc] init]; + linv.backgroundColor = UIColorHex(#EEEEEE); + [self.contentView addSubview:linv]; + + [linv mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(@15); + make.top.mas_equalTo(self.infoLabel.mas_bottom).offset(24); + make.height.mas_offset(1); + make.right.mas_offset(-15); + make.bottom.mas_offset(1); + }]; + + self.xiugaiBtn = [[UIButton alloc] init]; + [self.xiugaiBtn setImage:[UIImage imageNamed:@"peoplexiugai"] forState:UIControlStateNormal]; + [self.xiugaiBtn addTarget:self action:@selector(xiugaiAction) forControlEvents:UIControlEventTouchUpInside]; + [self.contentView addSubview:self.xiugaiBtn]; + + [self.xiugaiBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(@26); + make.width.height.mas_offset(22); + make.right.mas_offset(-30); + }]; + +} + +- (void)setModel:(QuestionPeopleModel *)model { + + _model = model; + + self.nameLabel.text = _model.name; + + NSString * sex = [_model.gender integerValue] == 1 ? @"女":@"男"; + + NSString * birthday = @""; + if (!ValidStr(_model.birthday)) { + + birthday = [_model.birthday substringToIndex:10]; + } + self.infoLabel.text = [NSString stringWithFormat:@"%@/%@岁  %@",sex,_model.age,birthday]; + + self.chooseBtn.selected = _model.isSelected; + +} + +- (void)xiugaiAction { + + if (self.xiugaiBlock) { + self.xiugaiBlock(_model); + } +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecordTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecordTableViewCell.h new file mode 100644 index 0000000..359c912 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecordTableViewCell.h @@ -0,0 +1,19 @@ +// +// QuestionRecordTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import +#import "RecordIMListDateModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface QuestionRecordTableViewCell : UITableViewCell + +@property (nonatomic, strong) RecordIMListDateModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecordTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecordTableViewCell.m new file mode 100644 index 0000000..fbd47f7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecordTableViewCell.m @@ -0,0 +1,288 @@ +// +// QuestionRecordTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "QuestionRecordTableViewCell.h" + +@interface QuestionRecordTableViewCell () + +@property (nonatomic, strong) UIImageView * doctorImage; + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) UILabel * lvLabel; + +@property (nonatomic, strong) UILabel * hospitalLabel; + +@property (nonatomic, strong) UILabel * typeLabel; + +@property (nonatomic, strong) UILabel * peopleLabel; + +@property (nonatomic, strong) UILabel * statusLabel; + +@property (nonatomic, strong) UILabel * timeLabel; + +@end + +@implementation QuestionRecordTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + + } + + return self; + +} + +- (void)createUI { + + UIView * backView = [[UIView alloc] init]; + backView.backgroundColor = KWhiteColor; + backView.layer.cornerRadius = 10.0; + backView.layer.masksToBounds = true; + [self.contentView addSubview:backView]; + [backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_offset(0); + make.right.mas_offset(-15); + make.bottom.mas_offset(-14); + }]; + + self.doctorImage = [[UIImageView alloc] init]; + self.doctorImage.layer.cornerRadius = 25.0f; + self.doctorImage.layer.masksToBounds = YES; + [backView addSubview:self.doctorImage]; + + [self.doctorImage mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(11); + make.top.mas_offset(15); + make.height.width.mas_offset(50); + }]; + + self.nameLabel = [[UILabel alloc] init]; + self.nameLabel.text = @"张大夫"; + self.nameLabel.font = SYSTEMFONT(14); + self.nameLabel.textAlignment = NSTextAlignmentLeft; + [backView addSubview:self.nameLabel]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.doctorImage.mas_right).offset(9); + make.top.mas_offset(15); + make.height.mas_offset(14); + }]; + [self.nameLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.statusLabel = [[UILabel alloc] init]; + self.statusLabel.text = @""; + self.statusLabel.font = MEDIUMFONT(14); + self.statusLabel.textColor = UIColorHex(#16C716); + self.statusLabel.textAlignment = NSTextAlignmentRight; + [backView addSubview:self.statusLabel]; + + [self.statusLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_offset(37); + make.right.mas_offset(-14); + make.height.mas_offset(14); + make.width.mas_offset(70); + }]; + + self.lvLabel = [[UILabel alloc] init]; + self.lvLabel.text = @"三甲"; + self.lvLabel.font = SYSTEMFONT(10); + self.lvLabel.textColor = KWhiteColor; + self.lvLabel.backgroundColor = UIColorHex(#21BEBD); + self.lvLabel.textAlignment = NSTextAlignmentCenter; + self.lvLabel.layer.cornerRadius = 3.0f; + self.lvLabel.layer.masksToBounds = YES; + [backView addSubview:self.lvLabel]; + + [self.lvLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(10); + make.left.mas_equalTo(self.nameLabel.mas_left); + make.height.mas_offset(13); + }]; + [self.lvLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + self.hospitalLabel = [[UILabel alloc] init]; + self.hospitalLabel.font = MEDIUMFONT(13); + self.hospitalLabel.textColor =UIColorHex(#333333); + self.hospitalLabel.textAlignment = NSTextAlignmentCenter; + [backView addSubview:self.hospitalLabel]; + + [self.hospitalLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(10); + make.left.mas_equalTo(self.lvLabel.mas_right).offset(5); + make.height.mas_offset(13); + }]; + [self.hospitalLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + UIView * linv = [[UIView alloc] init]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [backView addSubview:linv]; + + [linv mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.doctorImage.mas_bottom).offset(16); + make.left.right.mas_equalTo(@0); + make.height.mas_offset(1); + }]; + + self.typeLabel = [[UILabel alloc] init]; + self.typeLabel.font = MEDIUMFONT(11); +// self.typeLabel.textColor =UIColorHex(#21BEBD); +// self.typeLabel.layer.cornerRadius = 5.0f; +// self.typeLabel.layer.masksToBounds = YES; +// self.typeLabel.layer.borderWidth = 1.0f; + self.typeLabel.layer.borderColor = UIColorHex(#21BEBD).CGColor; + self.typeLabel.textAlignment = NSTextAlignmentCenter; + self.typeLabel.text = @""; + [backView addSubview:self.typeLabel]; + + [self.typeLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(linv.mas_bottom).offset(18); + make.right.mas_equalTo(@-11); + make.height.mas_offset(21); + make.width.mas_offset(85); + }]; + + self.peopleLabel = [[UILabel alloc] init]; + self.peopleLabel.font = MEDIUMFONT(13); + self.peopleLabel.numberOfLines = 0; + self.peopleLabel.textColor = UIColorHex(#333333); + self.peopleLabel.textAlignment = NSTextAlignmentLeft; + [backView addSubview:self.peopleLabel]; + + [self.peopleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(linv.mas_bottom).offset(16); + make.left.mas_equalTo(@15); + make.right.mas_equalTo(self.typeLabel.mas_left).offset(8); + make.height.mas_offset(12); + }]; + + self.timeLabel = [[UILabel alloc] init]; + self.timeLabel.font = MEDIUMFONT(13); + self.timeLabel.numberOfLines = 0; + self.timeLabel.textColor = UIColorHex(#333333); + self.timeLabel.textAlignment = NSTextAlignmentLeft; + [backView addSubview:self.timeLabel]; + + [self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.peopleLabel.mas_bottom).offset(10); + make.left.mas_equalTo(@15); + make.right.mas_equalTo(self.typeLabel.mas_left).offset(8); + make.height.mas_offset(12); + }]; + + + [backView mas_updateConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_offset(0); + make.right.mas_offset(-15); + make.bottom.mas_equalTo(self.timeLabel.mas_bottom).offset(14); + }]; + + + +} + +- (void)setModel:(RecordIMListDateModel *)model { + + _model = model; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_model.toAccountHead]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.doctorImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:IMAGE_NAMED(@"doctorNoImage")]; + + self.nameLabel.attributedText = [HQCommonUtils firstString:_model.toAccountName firstColor:UIColorHex(#333333) firstSize:14 secondString:[NSString stringWithFormat:@" %@",_model.toAccountTitle] secondColor:UIColorHex(#333333) secondSize:13 thirdString:[NSString stringWithFormat:@" %@",_model.departmentName] thirdColor:UIColorHex(#333333) thirdSize:13]; + + if(ValidStr(_model.hospitalLevel) ) { + self.lvLabel.hidden = YES; + + }else + { + self.lvLabel.hidden = false; + self.lvLabel.text = [NSString stringWithFormat:@" %@ ", _model.hospitalLevel] ; + } + self.hospitalLabel.text = [NSString stringWithFormat:@" %@ ", _model.resourceName] ; + if (ValidStr(_model.departmentName)) { + + _model.departmentName = @""; + + } + self.peopleLabel.text = [NSString stringWithFormat:@"就诊人:%@",_model.memberName]; + self.timeLabel.text = [NSString stringWithFormat:@"%@",_model.createTime]; +// if ([_model.contentType integerValue] == 1) { +// self.typeLabel.text = @"图文咨询"; +// } +// if ([_model.contentType integerValue] == 2) { +// self.typeLabel.text = @"音视频咨询"; +// } + + if ([_model.contentType integerValue] == 1) + { + if ([_model.contentStatus integerValue] == 3 && _model.unredCount > 0) + { + self.statusLabel.text = @"待回复"; + }else + { + self.statusLabel.text = @""; + } + }else + { + if ([_model.contentStatus integerValue] == 1) { + self.statusLabel.text = @"待确认"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.contentStatus integerValue] == 2) { + self.statusLabel.text = @"待开始"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.contentStatus integerValue] == 3) { + self.statusLabel.text = @"已开始"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.contentStatus integerValue] == 4) { + self.statusLabel.text = @"待评价"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.contentStatus integerValue] == 5) { + self.statusLabel.text = @"已完成"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.contentStatus integerValue] == 6) { + self.statusLabel.text = @"拒绝"; + self.statusLabel.textColor = UIColorHex(#16C716); + } + if ([_model.contentStatus integerValue] == 7) { + self.statusLabel.text = @"取消"; + self.statusLabel.textColor = CFontColor2; + } + } + + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecoredTable.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecoredTable.h new file mode 100644 index 0000000..0e33b9c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecoredTable.h @@ -0,0 +1,25 @@ +// +// QuestionRecoredTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import +#import "RecordIMListDateModel.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^lookDetailBlock)(NSString * recordID,NSString * imID,NSString * memberId, RecordIMListDateModel * model); + +@interface QuestionRecoredTable : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, copy) lookDetailBlock detailBlock; + +@property (nonatomic, assign) NSInteger totalCount; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecoredTable.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecoredTable.m new file mode 100644 index 0000000..22fe184 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/QuestionRecordView(咨询view)/QuestionRecoredTable.m @@ -0,0 +1,134 @@ +// +// QuestionRecoredTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/28. +// + +#import "QuestionRecoredTable.h" +#import "QuestionRecordTableViewCell.h" + +@interface QuestionRecoredTable () + + +@end + + +@implementation QuestionRecoredTable + + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { + + if (self = [super initWithFrame:frame style:style]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + if ([[UIDevice currentDevice].systemVersion floatValue] >= 11) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.backgroundColor = UIColor.clearColor; + self.showsVerticalScrollIndicator = false; + self.showsHorizontalScrollIndicator = false; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; + +} + +- (void)setDataArray:(NSArray *)dataArray { + + _dataArray = dataArray; + + [self reloadData]; +} + +#pragma mark - tableview的代理方法 +//组数 +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; +} +//每组多少行 +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return 1; +} +//注册cell +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + QuestionRecordTableViewCell * cell = [self dequeueReusableCellWithIdentifier:@"STATUSCELL"]; + if (!cell) { + + cell = [[QuestionRecordTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"STATUSCELL"]; + } + cell.model= self.dataArray[indexPath.section]; + cell.backgroundColor = KClearColor; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + + + +} +//每行高度 +//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +//{ +// return kRealValue(77); +//} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + + return kRealValue(5); +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { + + return CGFLOAT_MIN; +} + +//组头 --- 组尾 + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + + return [UIView new]; + +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + + + UIView * footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(10))]; + + + return footerView; + +} +////cell点击事件 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + RecordIMListDateModel * model= self.dataArray[indexPath.section]; + + if (self.detailBlock) { + self.detailBlock(model.Record_id,model.imId,model.memberId,model); + } +} + + +@end + + + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionFirstTableCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionFirstTableCell.h new file mode 100644 index 0000000..fd2a2a3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionFirstTableCell.h @@ -0,0 +1,18 @@ +// +// SelectedQuestionFirstTableCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import +#import "QuestionDiseaseInfoModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface SelectedQuestionFirstTableCell : UITableViewCell + +@property (nonatomic, strong) QuestionDiseaseInfoModel * userModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionFirstTableCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionFirstTableCell.m new file mode 100644 index 0000000..4c0475f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionFirstTableCell.m @@ -0,0 +1,140 @@ +// +// SelectedQuestionFirstTableCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "SelectedQuestionFirstTableCell.h" + +@interface SelectedQuestionFirstTableCell () + +@property (nonatomic, strong) UILabel * nameLabel; + +@property (nonatomic, strong) UILabel * ageLabel; + +@property (nonatomic, strong) UIImageView * sexImage; + +@property (nonatomic, strong) UILabel * infoLabel; + +@end + +@implementation SelectedQuestionFirstTableCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; + +} + +- (void)createUI { + + self.nameLabel = [[UILabel alloc] init]; + self.nameLabel.font = BOLDSYSTEMFONT(14); + self.nameLabel.text = @"--"; + self.nameLabel.textColor = CFontColor1; + self.nameLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.nameLabel]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(15); + make.top.mas_offset(21); + make.height.mas_offset(13); + + }]; + [self.nameLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + self.ageLabel = [[UILabel alloc] init]; + self.ageLabel.font = MEDIUMFONT(14); + self.ageLabel.text = @"-- 岁"; + self.ageLabel.textColor = UIColorHex(#999999); + self.ageLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.ageLabel]; + + [self.ageLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.nameLabel.mas_right).offset(9); + make.top.mas_offset(22); + make.height.mas_offset(13); + + }]; + [self.ageLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + self.sexImage = [[UIImageView alloc] init]; + self.sexImage.image = [UIImage imageNamed:@"MasculineMark"]; + self.sexImage.contentMode = UIViewContentModeScaleAspectFit; + [self.contentView addSubview:self.sexImage]; + + [self.sexImage mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.ageLabel.mas_right).offset(9); + make.top.mas_offset(22); + make.width.mas_offset(14); + make.height.mas_offset(16); + + }]; + + self.infoLabel = [[UILabel alloc] init]; + self.infoLabel.font = MEDIUMFONT(14); + self.infoLabel.text = @"172cm / 80kg"; + self.infoLabel.textColor = UIColorHex(#999999); + self.infoLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.infoLabel]; + + [self.infoLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(@-17); + make.top.mas_offset(19); + make.height.mas_offset(16); + + }]; + + [self.infoLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + UIView * linv = [[UIView alloc] init]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [self.contentView addSubview:linv]; + + [linv mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.left.mas_equalTo(@0); + make.top.mas_equalTo(self.nameLabel.mas_bottom).offset(16); + make.height.mas_offset(1); + }]; + +} + +- (void)setUserModel:(QuestionDiseaseInfoModel *)userModel { + + _userModel = userModel; + + self.nameLabel.text = userModel.name; + + self.ageLabel.text = [NSString stringWithFormat:@"%@岁",userModel.age]; + + if ([userModel.gender integerValue] == 2) { + self.sexImage.image = [UIImage imageNamed:@"MasculineMark"]; + } + if ([userModel.gender integerValue] == 1) { + self.sexImage.image = [UIImage imageNamed:@"FeminineSymbol"]; + } + + self.infoLabel.text = [NSString stringWithFormat:@"%@cm/%@kg",userModel.height,userModel.weight]; + + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTableView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTableView.h new file mode 100644 index 0000000..df84af3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTableView.h @@ -0,0 +1,24 @@ +// +// SelectedQuestionTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import +#import "QuestionAddPeopleTableCell.h" +#import "SelectedQuestionTypeTableCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SelectedQuestionTableView : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, weak)id addDelegate; +@property (nonatomic, weak)id diseaseDelegate; +@property (nonatomic, weak) id peopleDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTableView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTableView.m new file mode 100644 index 0000000..da433e1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTableView.m @@ -0,0 +1,270 @@ +// +// SelectedQuestionTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "SelectedQuestionTableView.h" +#import "SelectedQuestionFirstTableCell.h" +#import "SelectedQuestionTypeTableCell.h" +#import "QuestionDiseaseInfoModel.h" + + +@interface SelectedQuestionTableView () + + +@end + +@implementation SelectedQuestionTableView + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; +} + + + + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + +- (void)setAddDelegate:(id)addDelegate { + + _addDelegate = addDelegate; + +} + +- (void)setDiseaseDelegate:(id)diseaseDelegate { + _diseaseDelegate = diseaseDelegate; + +} + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return 3; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + QuestionDiseaseInfoModel * model = self.dataArray[indexPath.section]; + + if (indexPath.row == 0) { + return 50; + } + if (indexPath.row == 1) { + + return model.rowHeight; + } + if (indexPath.row == 2) { + return 48; + } + return 50; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + static NSString * cellID = @"cellID"; + + if (indexPath.row == 0 ) { + + SelectedQuestionFirstTableCell * cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[SelectedQuestionFirstTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + + cell.userModel = self.dataArray[indexPath.section]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + } + + if (indexPath.row == 1 ) { + + SelectedQuestionTypeTableCell * typeCell = [tableView dequeueReusableCellWithIdentifier:@"DISID"]; + + if (!typeCell) { + + typeCell = [[SelectedQuestionTypeTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"DISID"]; + } + typeCell.dataArray = [self.dataArray[indexPath.section] list]; + typeCell.subModel = self.dataArray[indexPath.section]; + typeCell.selectionStyle = UITableViewCellSelectionStyleNone; + typeCell.diseaseDelegate = self.diseaseDelegate; + typeCell.peopleDelegate = self.peopleDelegate; + return typeCell; + } + + + if (indexPath.row == 2 ) { + + QuestionAddPeopleTableCell * cell = [tableView dequeueReusableCellWithIdentifier:@"ADDCELLID"]; + + if (!cell) { + + cell = [[QuestionAddPeopleTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ADDCELLID"]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.userModel = self.dataArray[indexPath.section]; + cell.addDelegate = self.addDelegate; + return cell; + } + return nil; +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return kRealValue(10); +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * sectionHeardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(10))]; + sectionHeardView.backgroundColor = UIColorHex(#F4F4F4); + return sectionHeardView; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + +- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath + +{ + + if([cell respondsToSelector:@selector(tintColor)]) { + + if(tableView ==self) { + + CGFloat cornerRadius =5.f; + + cell.backgroundColor=UIColor.clearColor; + + CAShapeLayer * layer = [[CAShapeLayer alloc]init]; + + CGMutablePathRef pathRef = CGPathCreateMutable(); + + CGRect bounds = CGRectInset(cell.bounds,0,0); + + BOOL addLine =NO; + + if(indexPath.row==0&& indexPath.row== [tableView numberOfRowsInSection:indexPath.section]-1) { + + CGPathAddRoundedRect(pathRef,nil, bounds, cornerRadius, cornerRadius); + + }else if(indexPath.row==0) { + + CGPathMoveToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMaxY(bounds)); + + CGPathAddArcToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMinY(bounds),CGRectGetMidX(bounds),CGRectGetMinY(bounds), cornerRadius); + + CGPathAddArcToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMinY(bounds),CGRectGetMaxX(bounds),CGRectGetMidY(bounds), cornerRadius); + + CGPathAddLineToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMaxY(bounds)); + + addLine =YES; + + }else if(indexPath.row== [tableView numberOfRowsInSection:indexPath.section]-1) { + + CGPathMoveToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMinY(bounds)); + + CGPathAddArcToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMaxY(bounds),CGRectGetMidX(bounds),CGRectGetMaxY(bounds), cornerRadius); + + CGPathAddArcToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMaxY(bounds),CGRectGetMaxX(bounds),CGRectGetMidY(bounds), cornerRadius); + + CGPathAddLineToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMinY(bounds)); + + }else{ + + CGPathAddRect(pathRef,nil, bounds); + + addLine =YES; + + } + + layer.path= pathRef; + + CFRelease(pathRef); + + layer.fillColor= [UIColor colorWithWhite:1.f alpha:0.8f].CGColor; + + if(addLine ==YES) { + + CALayer* lineLayer = [[CALayer alloc]init]; + + CGFloat lineHeight = (1.f/ [UIScreen mainScreen].scale); + + lineLayer.frame=CGRectMake(CGRectGetMinX(bounds)+10, bounds.size.height-lineHeight, bounds.size.width-10, lineHeight); + + lineLayer.backgroundColor= tableView.separatorColor.CGColor; + + [layer addSublayer:lineLayer]; + + } + + UIView*testView = [[UIView alloc]initWithFrame:bounds]; + + [testView.layer insertSublayer:layer atIndex:0]; + + testView.backgroundColor=UIColor.clearColor; + + cell.backgroundView= testView; + + } + + } + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTypeTableCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTypeTableCell.h new file mode 100644 index 0000000..781b531 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTypeTableCell.h @@ -0,0 +1,23 @@ +// +// SelectedQuestionTypeTableCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import +#import "QuestionDiseaseTableView.h" +#import "QuestionDiseaseInfoModel.h" +#import "QuestionDiseaseTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SelectedQuestionTypeTableCell : UITableViewCell +@property (nonatomic, strong) QuestionDiseaseInfoModel * subModel; +@property (nonatomic, strong) NSArray * dataArray; +@property (nonatomic, weak)id diseaseDelegate; +@property (nonatomic, weak) id peopleDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTypeTableCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTypeTableCell.m new file mode 100644 index 0000000..d23b9e1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/SelectedQuestionTypeTableCell.m @@ -0,0 +1,79 @@ +// +// SelectedQuestionTypeTableCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/14. +// + +#import "SelectedQuestionTypeTableCell.h" + +@interface SelectedQuestionTypeTableCell () + +@property (nonatomic, strong) QuestionDiseaseTableView * tableView; + +@end + +@implementation SelectedQuestionTypeTableCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; + +} + +- (void)createUI { + + self.tableView = [[QuestionDiseaseTableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + self.tableView.backgroundColor = [UIColor whiteColor]; + [self.contentView addSubview:self.tableView]; + + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_offset(0); + make.right.mas_offset(0); + make.top.mas_offset(0); + make.bottom.mas_offset(5); + }]; +} + +- (void)setDataArray:(NSArray *)dataArray { + + _dataArray = dataArray; + + self.tableView.dataArray = _dataArray; +} + +- (void)setDiseaseDelegate:(id)diseaseDelegate { + _diseaseDelegate = diseaseDelegate; + + self.tableView.diseaseDelegate = _diseaseDelegate; +} + +- (void)setPeopleDelegate:(id)peopleDelegate { + _peopleDelegate = peopleDelegate; + self.tableView.peopleDelegate = _peopleDelegate; +} + +- (void)setSubModel:(QuestionDiseaseInfoModel *)subModel { + _subModel = subModel; + self.tableView.subModel = _subModel; + +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/UserInfoHealthPopView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/UserInfoHealthPopView.h new file mode 100644 index 0000000..b6d6874 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/UserInfoHealthPopView.h @@ -0,0 +1,28 @@ +// +// UserInfoHealthPopView.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/21. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + + +@protocol userInfoPopDelegate + +- (void)jumpOnclick; + +- (void)wanshanOnclick; + +@end + +@interface UserInfoHealthPopView : UIView + +@property (nonatomic, weak)id popDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/UserInfoHealthPopView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/UserInfoHealthPopView.m new file mode 100644 index 0000000..a3ab04e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/UserInfoHealthPopView.m @@ -0,0 +1,88 @@ +// +// UserInfoHealthPopView.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/21. +// + +#import "UserInfoHealthPopView.h" + +@implementation UserInfoHealthPopView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.backgroundColor = RGBA(0, 0, 0, 0.5); + + UIView * cenetrView = [[UIView alloc] initWithFrame:CGRectMake(kRealValue(57), kRealValue(230), kScreenWidth - kRealValue(114), kRealValue(140))]; + cenetrView.backgroundColor = KWhiteColor; + cenetrView.layer.cornerRadius = 10; + cenetrView.layer.masksToBounds = YES; + [self addSubview:cenetrView]; + + UILabel * popLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, kRealValue(40), cenetrView.width, 14)]; + popLabel.text = @"是否继续完善个人基本健康信息?"; + popLabel.font = BOLDSYSTEMFONT(14); + popLabel.textColor = UIColorHex(#333333); + popLabel.textAlignment = NSTextAlignmentCenter; + [cenetrView addSubview:popLabel]; + + UIButton * jumpBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, cenetrView.height - 48 , cenetrView.width/2, 48)]; + [jumpBtn setTitle:@"跳过" forState:UIControlStateNormal]; + [jumpBtn setTitleColor:UIColorHex(#666666) forState:UIControlStateNormal]; + [jumpBtn addTarget:self action:@selector(jumpAction) forControlEvents:UIControlEventTouchUpInside]; + jumpBtn.titleLabel.font = MEDIUMFONT(13); + [cenetrView addSubview:jumpBtn]; + + UIButton * wanshanBtn = [[UIButton alloc] initWithFrame:CGRectMake(cenetrView.width/2, cenetrView.height - 48 , cenetrView.width/2, 48)]; + [wanshanBtn setTitle:@"去完善" forState:UIControlStateNormal]; + [wanshanBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + wanshanBtn.titleLabel.font = BOLDSYSTEMFONT(13); + [wanshanBtn addTarget:self action:@selector(wanshanAction) forControlEvents:UIControlEventTouchUpInside]; + [cenetrView addSubview:wanshanBtn]; + + UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(0, jumpBtn.top, cenetrView.width, 1)]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [cenetrView addSubview:linv]; + + UIView * cowLinv = [[UIView alloc] initWithFrame:CGRectMake(cenetrView.width/2, jumpBtn.top, 1, 48)]; + cowLinv.backgroundColor = UIColorHex(#E0E0E0); + [cenetrView addSubview:cowLinv]; + +} + +- (void)jumpAction { + + if ([self.popDelegate respondsToSelector:@selector(jumpOnclick)]) { + + [self.popDelegate jumpOnclick]; + } + +} + +- (void)wanshanAction { + + if ([self.popDelegate respondsToSelector:@selector(wanshanOnclick)]) { + + [self.popDelegate wanshanOnclick]; + } + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/evaluationPopView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/evaluationPopView.h new file mode 100644 index 0000000..b5501d4 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/evaluationPopView.h @@ -0,0 +1,21 @@ +// +// evaluationPopView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^evaluationPop)(CGFloat starNumber, BOOL isSecrect, NSString * evaluationString); + +@interface evaluationPopView : UIView + +@property (nonatomic, copy) evaluationPop popBlock; +@property (nonatomic, strong) UIView * evaluationView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/evaluationPopView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/evaluationPopView.m new file mode 100644 index 0000000..ec7feb1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/evaluationPopView.m @@ -0,0 +1,147 @@ +// +// evaluationPopView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/20. +// + +#import "evaluationPopView.h" +#import "FSXBStarRateView.h" +#import "UIPlaceHolderTextView.h" + +@interface evaluationPopView () + +@property (nonatomic,strong)UIPlaceHolderTextView * evaluationTextView; + +@property (nonatomic, assign) BOOL isSercet; + +@property (nonatomic, copy) NSString * evaluationString; + +@property (nonatomic, assign) CGFloat starNumber; + + +@end + +@implementation evaluationPopView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + UIView * backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]; + + backView.backgroundColor = RGBA(0, 0, 0, 0.5); + + [self addSubview:backView]; + + UIView * tapView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - kRealValue(327))]; + [tapView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]]; + [backView addSubview:tapView]; + + UIView * evalView = [[UIView alloc] init]; + evalView.frame = CGRectMake(0, kScreenHeight - kRealValue(327), kScreenWidth, kRealValue(327)); + evalView.backgroundColor = KWhiteColor; + evalView.transform = CGAffineTransformMakeTranslation(0, kRealValue(327)); + self.evaluationView = evalView; + [evalView clipCornerWithView:evalView andTopLeft:YES andTopRight:YES andBottomLeft:NO andBottomRight:NO]; + [backView addSubview:evalView]; + + //让view从上往下消失 + [UIView animateWithDuration:0.5 animations:^{ + evalView.transform = CGAffineTransformMakeTranslation(0,0); + } completion:^(BOOL finished) { + }]; + + UILabel * evTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, kRealValue(21), evalView.width, kRealValue(14))]; + evTitleLabel.text = @"综合评分"; + evTitleLabel.font = SYSTEMFONT(14); + evTitleLabel.textAlignment = NSTextAlignmentCenter; + [evalView addSubview:evTitleLabel]; + + FSXBStarRateView * starView = [[FSXBStarRateView alloc] initWithFrame:CGRectMake(kRealValue(80), evTitleLabel.bottom + kRealValue(24), kScreenWidth - kRealValue(160), kRealValue(25)) numberOfStars:5 rateStyle:HalfStar isAnination:YES finish:^(CGFloat currentScore) { + NSLog(@"%.2f",currentScore); + self.starNumber = currentScore; + }]; + + starView.enable = YES; + [evalView addSubview:starView]; + + self.evaluationTextView = [[UIPlaceHolderTextView alloc] initWithFrame:CGRectMake(kRealValue(15), starView.bottom + kRealValue(20), kScreenWidth - kRealValue(30), kRealValue(120))]; + self.evaluationTextView.placeholder = @"请对本次的服务进行评价,用一段话来说下感受。您的评价可以给更多的人参考"; + self.evaluationTextView.backgroundColor = RGBA(243, 243, 245, 1); + self.evaluationTextView.delegate = self; + self.evaluationTextView.layer.cornerRadius = 10.0f; + self.evaluationTextView.font = SYSTEMFONT(13); + [evalView addSubview:self.evaluationTextView]; + + UIButton * chooseBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(15), self.evaluationTextView.bottom + kRealValue(10), 80, 13)]; + [chooseBtn setImage:[UIImage imageNamed:@"popChoose_normal"] forState:UIControlStateNormal]; + [chooseBtn setImage:[UIImage imageNamed:@"popChoose_selected"] forState:UIControlStateSelected]; + [chooseBtn setTitle:@" 匿名评价" forState:UIControlStateNormal]; + [chooseBtn setTitleColor:CFontColor1 forState:UIControlStateNormal]; + [chooseBtn addTarget:self action:@selector(secretEvaluation:) forControlEvents:UIControlEventTouchUpInside]; + chooseBtn.titleLabel.font = SYSTEMFONT(12); + [evalView addSubview:chooseBtn]; + + UIButton * submitBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(47), evalView.height - kRealValue(60) , kScreenWidth - kRealValue(94), kRealValue(40))]; + submitBtn.backgroundColor = RGBA(33, 190, 189, 1); + submitBtn.layer.cornerRadius = 20; + submitBtn.layer.masksToBounds = true; + [submitBtn setTitle:@"提交" forState:UIControlStateNormal]; + [submitBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + submitBtn.titleLabel.font = MEDIUMFONT(14); + [submitBtn addTarget:self action:@selector(submitAction) forControlEvents:UIControlEventTouchUpInside]; + [evalView addSubview:submitBtn]; + +} + +- (void)secretEvaluation:(UIButton *)secretBtn { + + secretBtn.selected = !secretBtn.selected; + + self.isSercet = secretBtn.selected; + +} + +- (void)submitAction { + + if (self.starNumber <= 0) { + + [EasyTextView showText:@"请打分后提交"]; + return; + } + self.evaluationString = self.evaluationTextView.text; + if (ValidStr(self.evaluationString)) { + [EasyTextView showText:@"请输入您的评语后提交"]; + return; + } + self.popBlock(self.starNumber, self.isSercet, self.evaluationString); + +} + +- (void)tap:(UITapGestureRecognizer *)recognizer +{ + + [self removeFromSuperview]; +} + +- (void)textViewDidChange:(UITextView *)textView { + + + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/BasicHealthTable.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/BasicHealthTable.h new file mode 100644 index 0000000..b614386 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/BasicHealthTable.h @@ -0,0 +1,19 @@ +// +// BasicHealthTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/25. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^footSaveActionBlcok)(NSArray * array); + +@interface BasicHealthTable : UITableView +@property (nonatomic, strong) NSArray * dataArray; +@property (nonatomic, copy) footSaveActionBlcok saveBlock; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/BasicHealthTable.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/BasicHealthTable.m new file mode 100644 index 0000000..0be9f27 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/BasicHealthTable.m @@ -0,0 +1,237 @@ +// +// BasicHealthTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/25. +// + +#import "BasicHealthTable.h" +#import "HealthTypeOneTableViewCell.h" +#import "HealthTypeTwoTableViewCell.h" +#import "QuestionOptionModel.h" +@interface BasicHealthTable () + + +@end + +@implementation BasicHealthTable + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if ([[UIDevice currentDevice].systemVersion floatValue] >= 11) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; + self.tableFooterView = [self createFootView]; +} + + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + QuestionOptionModel * model = self.dataArray[section]; + + return model.childList.count; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + QuestionOptionModel * model = self.dataArray[indexPath.section]; + + QuestionOptionChildListModel * childModel = model.childList[indexPath.row]; + + if ([childModel.itemType isEqualToString:@"1"] || [childModel.itemType isEqualToString:@"2"] ) { + + HealthTypeOneTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"HEALTHONE"] ; + + if (!cell) { + + cell = [[HealthTypeOneTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"HEALTHONE"]; + } + cell.model = childModel; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + } + + if ([childModel.itemType isEqualToString:@"4"]) { +// QuestionOptionModel * model = self.dataArray[section]; + +// return model.childList.count; + HealthTypeTwoTableViewCell * oneCell = [tableView dequeueReusableCellWithIdentifier:@"HEALTHTWO"] ; + + if (!oneCell) { + + oneCell = [[HealthTypeTwoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"HEALTHTWO"]; + } + oneCell.selectionStyle = UITableViewCellSelectionStyleNone; + oneCell.model = childModel; + oneCell.changeBlock = ^(QuestionOptionChildListModel * _Nonnull model) { + [self beginUpdates]; + [self endUpdates]; + + }; + + if (indexPath.row == model.childList.count -1) { + oneCell.isHideLine = true; + }else + { + oneCell.isHideLine = false; + } + + return oneCell; + } + + + return UITableViewCell.new; + +} + + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + QuestionOptionModel * model = self.dataArray[indexPath.section]; + + QuestionOptionChildListModel * childModel = model.childList[indexPath.row]; + + NSArray * array = [childModel.itemOptions componentsSeparatedByString:@","]; + + if ([childModel.itemType isEqualToString:@"4"]) { + + if (childModel.cellHeight <= 0) { + return array.count * (32 + kRealValue(15)) + childModel.cellHeight + kRealValue(15); + }else + { + return childModel.cellHeight; + } + + + }else{ + + if (array.count%2 == 0) + { + + return kRealValue(10) + array.count/2 * 35 + kRealValue(15) ; + + }else + { + return kRealValue(10) + (array.count/2 + 1) * 35 + kRealValue(15) ; + } + } + + + return kRealValue(100); +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + +} + +-(CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return kRealValue(45); +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +// +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * hearView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kRealValue(45))]; + + hearView.backgroundColor = UIColorHex(#EFEFEF); + + QuestionOptionModel * model = self.dataArray[section]; + + UILabel * labe = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16), 0, 200, kRealValue(45))]; + labe.text = model.text; + labe.textColor = UIColorHex(#333333); + labe.font = BOLDSYSTEMFONT(16); + labe.textAlignment = NSTextAlignmentLeft; + [hearView addSubview:labe]; + + return hearView; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + +- (UIView *)createFootView { + + UIView * footView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 200)]; + + UILabel * tishiLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(15), kRealValue(20) , kScreenWidth - kRealValue(30), 30)]; + + + tishiLabel.text = @"温馨提示:咨询人姓名、证件信息用于平台审核,不会外传。请输入正确的咨询人姓名和证件号码。"; + tishiLabel.numberOfLines = 0; + tishiLabel.font = SYSTEMFONT(12); + tishiLabel.textColor = UIColorHex(#999999); + CGFloat h = [HQCommonUtils getSpaceLabelHeight:tishiLabel withStr:tishiLabel.text withFont: SYSTEMFONT(12) withWidth:kScreenWidth withLineSpacing:2]; + tishiLabel.height = h ; + [footView addSubview:tishiLabel]; + //保存按钮 + + UIButton * saveBtn = [[UIButton alloc] initWithFrame:CGRectMake(kRealValue(48), tishiLabel.bottom + 60 , kScreenWidth - kRealValue(96), 40)]; + [saveBtn setTitle:@"保存" forState:UIControlStateNormal]; + saveBtn.titleLabel.font = SYSTEMFONT(14); + saveBtn.layer.cornerRadius = 20.0f; + saveBtn.layer.masksToBounds = true; + saveBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + saveBtn.layer.borderWidth = 1.0f; + saveBtn.backgroundColor = KWhiteColor; + [saveBtn addTarget:self action:@selector(saveInfo) forControlEvents:UIControlEventTouchUpInside]; + [saveBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + [footView addSubview:saveBtn]; + return footView; +} + +- (void)saveInfo { + + if (self.saveBlock) { + self.saveBlock(self.dataArray); + } + +} + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeOneTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeOneTableViewCell.h new file mode 100644 index 0000000..883898f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeOneTableViewCell.h @@ -0,0 +1,19 @@ +// +// HealthTypeOneTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/25. +// + +#import +#import "QuestionOptionModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HealthTypeOneTableViewCell : UITableViewCell + +@property (nonatomic, strong) QuestionOptionChildListModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeOneTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeOneTableViewCell.m new file mode 100644 index 0000000..bac8e7c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeOneTableViewCell.m @@ -0,0 +1,188 @@ +// +// HealthTypeOneTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/25. +// + +#import "HealthTypeOneTableViewCell.h" + +@interface HealthTypeOneTableViewCell () + +@property (nonatomic, strong) UILabel * leftLabel; +@property (nonatomic, strong) NSMutableArray * optionLabelArray; +@property (nonatomic, strong) NSMutableArray * lineArray; +@property (nonatomic, strong) UIButton * lastButton; + +@end + + + + +@implementation HealthTypeOneTableViewCell + +- (NSMutableArray *)lineArray { + + if (!_lineArray ) { + + _lineArray = [[NSMutableArray alloc] init]; + } + return _lineArray; + +} + +- (NSMutableArray *)optionLabelArray { + + if (!_optionLabelArray) { + + _optionLabelArray = [[NSMutableArray alloc] init]; + } + return _optionLabelArray; + +} + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + self.leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16), kRealValue(16), kRealValue(135), 13)]; + self.leftLabel.text = @"身高"; + self.leftLabel.textAlignment = NSTextAlignmentLeft; + self.leftLabel.font = SYSTEMFONT(13); + self.leftLabel.textColor = UIColorHex(#666666); + [self.contentView addSubview:self.leftLabel]; + + + +} + +- (void)setModel:(QuestionOptionChildListModel *)model { + + _model = model; + + self.leftLabel.text = _model.itemProblem; + + + + + for (UIButton * btn in self.optionLabelArray) { + + [btn removeFromSuperview]; + } + [self.optionLabelArray removeAllObjects]; + + + // 创建排序描述符 + NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"loctaionThin" ascending:YES]; + + // 对模型数组进行排序 + NSArray *sortedArray = [ _model.answerList sortedArrayUsingDescriptors:@[sortDescriptor]]; + + // 输出排序后的模型数组 + for (QuestionOptionCustomModel * customModel in _model.answerList) { + NSLog(@"Value: %ld", customModel.loctaionThin); + + } + + for (int i = 0; i < sortedArray.count; i ++) { + + QuestionOptionCustomModel * customModel = sortedArray[i]; + + CGFloat cow = i/2; + + CGFloat lin = i%2; + + CGFloat Hspace = kRealValue(16); + + CGFloat labW = (kScreenWidth - kRealValue(135))/2; + + UIButton * subBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.leftLabel.right + lin * labW, kRealValue(10) + cow * (30 + Hspace), labW, 35)]; + [subBtn setTitle:customModel.radioText forState:UIControlStateNormal]; + [subBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + subBtn.titleLabel.font = SYSTEMFONT(13); + subBtn.selected = customModel.checked; + [subBtn setImage:[UIImage imageNamed:@"physcialType_nomal"] forState:UIControlStateNormal]; + [subBtn setImage:[UIImage imageNamed:@"physcialType_selected"] forState:UIControlStateSelected]; + subBtn.titleEdgeInsets = UIEdgeInsetsMake(0, subBtn.imageView.width + 10, 0, 0); + subBtn.imageEdgeInsets = UIEdgeInsetsMake(0, kRealValue(10), 0, 0); + if ([customModel.value integerValue] != 0) { + subBtn.selected = true; + }else + { + subBtn.selected = false; + } + [subBtn addTarget:self action:@selector(optionAction:) forControlEvents:UIControlEventTouchUpInside]; + subBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + if (i == model.answerList.count - 1) { + self.lastButton = subBtn; + UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(0,subBtn.bottom + kRealValue(5),kScreenWidth, 1)]; + linv.backgroundColor = UIColorHex(#E0E0E0); + [self.contentView addSubview:linv]; + [self.lineArray addObject:linv]; + } + [self.contentView addSubview:subBtn]; + [self.optionLabelArray addObject:subBtn]; + } + + +} + + +- (void)optionAction:(UIButton *)btn { + + self.model.isAppment = true; + + if ([_model.itemType integerValue] == 1)//型[1单选,2多选,3文本,4单选加文本] + { + int i = 0; + for (UIButton * subBtn in self.optionLabelArray) { + QuestionOptionCustomModel * custommodel = self.model.answerList[i]; + if (subBtn == btn) { + subBtn.selected = YES; + custommodel.checked = true; + custommodel.value = @"1"; + self.model.answerContent = custommodel.radioText; + }else + { + custommodel.value = @"0"; + custommodel.checked = false; + subBtn.selected = NO; + } + i++; + } + } + if ([_model.itemType integerValue] == 2)//型[1单选,2多选,3文本,4单选加文本] + { + int i = 0; + for (UIButton * subBtn in self.optionLabelArray) { + + if (subBtn == btn) { + subBtn.selected = !btn.selected; + QuestionOptionCustomModel * custommodel = self.model.answerList[i]; + custommodel.checked = true; + } + i++; + } + } + self.model.isAppment = true; + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeTwoTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeTwoTableViewCell.h new file mode 100644 index 0000000..9218099 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeTwoTableViewCell.h @@ -0,0 +1,22 @@ +// +// HealthTypeTwoTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/25. +// + +#import +#import "QuestionOptionModel.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^changeTextBlock)(QuestionOptionChildListModel * model); + +@interface HealthTypeTwoTableViewCell : UITableViewCell +@property (nonatomic, strong) QuestionOptionChildListModel * model; +@property (nonatomic, strong) UITextView * optionField; +@property (nonatomic, copy) changeTextBlock changeBlock; +@property (nonatomic, assign) BOOL isHideLine; + +@end +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeTwoTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeTwoTableViewCell.m new file mode 100644 index 0000000..a93127f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/healethOptionsView(健康选项)/HealthTypeTwoTableViewCell.m @@ -0,0 +1,341 @@ +// +// HealthTypeTwoTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/25. +// + +#import "HealthTypeTwoTableViewCell.h" + + +@interface HealthTypeTwoTableViewCell () + +@property (nonatomic, strong) UILabel * leftLabel; +@property (nonatomic, strong) NSMutableArray * buttonArray; +@property (nonatomic, strong) NSMutableArray * lineArray; +@property (nonatomic, strong) NSMutableArray * fileArray; +@property (nonatomic, strong) UIView * linv; +@property (nonatomic, strong) UIButton * oneBtn; +@property (nonatomic, strong) UIButton * twoBtn; + +@end + + + +@implementation HealthTypeTwoTableViewCell + +- (NSMutableArray *)fileArray { + + if (!_fileArray) { + _fileArray = [[NSMutableArray alloc] init]; + } + return _fileArray; + +} +- (NSMutableArray *)buttonArray { + + if (!_buttonArray) { + _buttonArray = [[NSMutableArray alloc] init]; + } + return _buttonArray; +} + +- (UITextView *)optionField { + + if (!_optionField) { + _optionField = [[UITextView alloc] init]; + } + return _optionField; +} + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(kRealValue(16), kRealValue(16), kRealValue(135), 13)]; + self.leftLabel.text = @"过敏史"; + self.leftLabel.textAlignment = NSTextAlignmentLeft; + self.leftLabel.font = SYSTEMFONT(13); + self.leftLabel.textColor = UIColorHex(#666666); + [self.contentView addSubview:self.leftLabel]; + +// UIButton * subBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.leftLabel.right , kRealValue(10), 100, 35)]; +// [subBtn setTitle:@"无" forState:UIControlStateNormal]; +// [subBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; +// subBtn.titleLabel.font = SYSTEMFONT(13); +// [subBtn setImage:[UIImage imageNamed:@"physcialType_nomal"] forState:UIControlStateNormal]; +// [subBtn setImage:[UIImage imageNamed:@"physcialType_selected"] forState:UIControlStateSelected]; +// subBtn.titleEdgeInsets = UIEdgeInsetsMake(0, subBtn.imageView.width + 10, 0, 0); +// subBtn.imageEdgeInsets = UIEdgeInsetsMake(0, kRealValue(10), 0, 0); +// self.oneBtn = subBtn; +// subBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; +// +// [subBtn addTarget:self action:@selector(optionOnesAction:) forControlEvents:UIControlEventTouchUpInside]; +// [self.contentView addSubview:subBtn]; +// +// UIButton * haveBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.leftLabel.right , subBtn.bottom + kRealValue(15), 70, 35)]; +// [haveBtn setTitle:@"有" forState:UIControlStateNormal]; +// [haveBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; +// haveBtn.titleLabel.font = SYSTEMFONT(13); +// [haveBtn setImage:[UIImage imageNamed:@"physcialType_nomal"] forState:UIControlStateNormal]; +// [haveBtn setImage:[UIImage imageNamed:@"physcialType_selected"] forState:UIControlStateSelected]; +// haveBtn.titleEdgeInsets = UIEdgeInsetsMake(0, haveBtn.imageView.width + 10, 0, 0); +// haveBtn.imageEdgeInsets = UIEdgeInsetsMake(0, kRealValue(10), 0, 0); +// haveBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; +// [haveBtn addTarget:self action:@selector(optionTwoesAction:) forControlEvents:UIControlEventTouchUpInside]; +// self.twoBtn = haveBtn; +// [self.contentView addSubview:haveBtn]; +// +// self.optionField = [[UITextField alloc] initWithFrame:CGRectMake(haveBtn.right + kRealValue(10), subBtn.bottom + kRealValue(20), kScreenWidth - haveBtn.right - kRealValue(20), 30)]; +// self.optionField.placeholder = @"请输入详细信息"; +// self.optionField.font = SYSTEMFONT(13); +// self.optionField.layer.cornerRadius = 5; +// self.optionField.layer.masksToBounds = YES; +// self.optionField.layer.borderWidth = 1.0; +// self.optionField.layer.borderColor = UIColorHex(#CCCCCC).CGColor; +// [self.contentView addSubview:self.optionField]; +// +// UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(0,self.optionField.bottom + kRealValue(7),kScreenWidth, 1)]; +// linv.backgroundColor = UIColorHex(#E0E0E0); +// [self.contentView addSubview:linv]; +} + +- (void)setModel:(QuestionOptionChildListModel *)model { + + _model = model; + self.leftLabel.text = _model.itemProblem; + +// NSData *jsonData = [_model.itemOptions dataUsingEncoding:NSUTF8StringEncoding]; +// +// NSDictionary * dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil]; +// +// NSMutableArray * dicArray = [[NSMutableArray alloc] init]; +// +// [dictionary enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) { +// +// [dicArray addObject:[NSString stringWithFormat:@"%@:%@",key,obj]]; +// +// }]; + + UIButton * lastBtn; + + for (UIButton * btn in self.buttonArray) { + [btn removeFromSuperview]; + } + [self.buttonArray removeAllObjects]; + QuestionOptionCustomModel * customModel; + for (int i = 0 ; i < model.answerList.count; i ++) { + + QuestionOptionCustomModel * subModel = model.answerList[i]; + + UIButton * subBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.leftLabel.right , kRealValue(10) + (35 + kRealValue(15))* i , 70, 35)]; +// NSString * matString =subModel.radioText; +// NSArray * matArray = [matString componentsSeparatedByString:@":"]; + [subBtn setTitle:subModel.radioText forState:UIControlStateNormal]; + [subBtn setTitleColor:UIColorHex(#333333) forState:UIControlStateNormal]; + subBtn.titleLabel.font = SYSTEMFONT(13); + [subBtn setImage:[UIImage imageNamed:@"physcialType_nomal"] forState:UIControlStateNormal]; + [subBtn setImage:[UIImage imageNamed:@"physcialType_selected"] forState:UIControlStateSelected]; + subBtn.titleEdgeInsets = UIEdgeInsetsMake(0, subBtn.imageView.width + 10, 0, 0); + subBtn.imageEdgeInsets = UIEdgeInsetsMake(0, kRealValue(10), 0, 0); + subBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + [subBtn addTarget:self action:@selector(optionOnesAction:) forControlEvents:UIControlEventTouchUpInside]; + subBtn.selected = subModel.checked; + subBtn.tag = 100 + i; + [self.contentView addSubview:subBtn]; + if ([subModel.value intValue] != 0) { + subBtn.selected = true; + }else + { + subBtn.selected = false; + } + [self.buttonArray addObject:subBtn]; + + if (i == model.answerList.count - 1) { + + lastBtn = subBtn; + customModel = model.answerList[i]; + } + + + + } + self.optionField.frame = CGRectMake(lastBtn.right + kRealValue(5), lastBtn.top, kScreenWidth - lastBtn.right - kRealValue(20), kRealValue(30)); + self.optionField.font = SYSTEMFONT(13); + self.optionField.layer.cornerRadius = 5; + self.optionField.layer.masksToBounds = YES; + self.optionField.layer.borderWidth = 1.0; + self.optionField.layer.borderColor = UIColorHex(#CCCCCC).CGColor; + self.optionField.delegate = self; + + [self.contentView addSubview:self.optionField]; + + UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(0,self.optionField.bottom + kRealValue(7),kScreenWidth, 1)]; + linv.backgroundColor = UIColorHex(#E0E0E0); + self.linv = linv; + [self.contentView addSubview:linv]; + + if (!ValidStr(_model.answerContent)) { + self.optionField.text = _model.answerContent; + NSString *text = self.optionField.text; + UIFont *font = [UIFont systemFontOfSize:13.0]; // 或者你可以使用你想要的字体 + + CGSize constraintSize = CGSizeMake(self.optionField.width, MAXFLOAT); // 宽度可以是你的标签的宽度,高度设置为一个足够大的值 + + NSDictionary *attributes = @{NSFontAttributeName: font}; + CGRect textRect = [text boundingRectWithSize:constraintSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil]; + + CGFloat textHeight = CGRectGetHeight(textRect); + NSLog(@"Text Height: %f", textHeight); + if (textHeight < kRealValue(30)) { + + self.optionField.height = kRealValue(30); + _model.cellHeight = self.linv.bottom + kRealValue(10); + + }else + { + self.optionField.height = textHeight; + _model.cellHeight = self.linv.bottom + kRealValue(10); + } + self.linv.top = self.optionField.bottom + kRealValue(7); + } + + + +} + +- (void)optionOnesAction:(UIButton *)onesBtn { + self.model.isAppment = true; + if ([_model.itemType integerValue] == 1 || [_model.itemType integerValue] == 4)//型[1单选,2多选,3文本,4单选加文本] + { + int i = 0; + for (UIButton * subBtn in self.buttonArray) { + + if (subBtn == onesBtn) { + subBtn.selected = YES; + QuestionOptionCustomModel * custommodel = self.model.answerList[i]; + custommodel.checked = true; + custommodel.value = @"1"; + if ([[subBtn currentTitle] isEqualToString:@"无"]) + { + if ([_model.itemType integerValue] == 4) { + // + + + } + } + else + { + self.model.answerContent = self.optionField.text; + + } + + }else + { + QuestionOptionCustomModel * custommodel = self.model.answerList[i]; + custommodel.checked = false; + custommodel.value = @"0"; + self.model.answerContent = @""; + subBtn.selected = NO; + } + i++; + } + } + if ([_model.itemType integerValue] == 2)//型[1单选,2多选,3文本,4单选加文本] + { + int i = 0; + for (UIButton * subBtn in self.buttonArray) { + + if (subBtn == onesBtn) { + QuestionOptionCustomModel * custommodel = self.model.answerList[i]; + custommodel.checked = true; + subBtn.selected = !onesBtn.selected; + } + i++; + } + } + + +} + +- (void)textViewDidChange:(UITextView *)textView { + + UIButton * lastBtn = [self viewWithTag:100 + self.model.answerList.count - 1 ]; + + for (UIButton * subBtn in self.buttonArray) { + + if (subBtn == lastBtn) { + subBtn.selected = true; + + }else + { + subBtn.selected = false; + } + } + QuestionOptionCustomModel * custommodel = self.model.answerList[lastBtn.tag - 100]; + + for (QuestionOptionCustomModel * subModel in self.model.answerList) { + + if (custommodel == subModel) { + subModel.value = @"1"; + }else + { + subModel.value = @"0"; + } + + } + self.model.answerContent = self.optionField.text; + NSString *text = self.optionField.text; + UIFont *font = [UIFont systemFontOfSize:13.0]; // + + CGSize constraintSize = CGSizeMake(self.optionField.width, MAXFLOAT); // 宽度可以是你的标签的宽度,高度设置为一个足够大的值 + + NSDictionary *attributes = @{NSFontAttributeName: font}; + CGRect textRect = [text boundingRectWithSize:constraintSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil]; + + CGFloat textHeight = CGRectGetHeight(textRect) + kRealValue(8); + NSLog(@"Text Height: %f", textHeight); + if (textHeight <= kRealValue(30)) { + + self.optionField.height = kRealValue(30); + self.model.cellHeight = self.linv.bottom + kRealValue(10); + + }else + { + self.optionField.height = textHeight; + self.model.cellHeight = self.linv.bottom + kRealValue(10); + } + self.linv.top = self.optionField.bottom + kRealValue(7); + + if (self.changeBlock) { + self.changeBlock(self.model); + } +} +- (void)setIsHideLine:(BOOL)isHideLine { + + _isHideLine = isHideLine; + + self.linv.hidden = _isHideLine; + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/hospitalListTableView.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/hospitalListTableView.h new file mode 100644 index 0000000..c86beaa --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/hospitalListTableView.h @@ -0,0 +1,22 @@ +// +// hospitalListTableView.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^hospatilListAction)(NSString * hopsitalID,NSString * hopatialName); + +@interface hospitalListTableView : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, copy) hospatilListAction hospatalBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/hospitalListTableView.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/hospitalListTableView.m new file mode 100644 index 0000000..8741172 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/hospitalListTableView.m @@ -0,0 +1,129 @@ +// +// hospitalListTableView.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/18. +// + +#import "hospitalListTableView.h" +#import "HospitalListTableCell.h" + +@interface hospitalListTableView () + + +@end + +@implementation hospitalListTableView + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style +{ + if (self = [super initWithFrame:frame style:style]) + { + [self createUI]; + } + return self; +} + + +- (void)createUI +{ + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.separatorStyle = UITableViewCellSeparatorStyleNone; + self.showsVerticalScrollIndicator = NO; + self.backgroundColor = KWhiteColor; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; +} + + + + +- (void)setDataArray:(NSArray *)dataArray +{ + _dataArray = dataArray; + [self reloadData]; +} + + + +#pragma mark - DataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + + return 1; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; + +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + + + static NSString * cellID = @"cellID"; + + + HospitalListTableCell * cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + + if (!cell) { + + cell = [[HospitalListTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + + cell.model = self.dataArray[indexPath.section]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + +} + + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + HospitalInfoModel * model = self.dataArray[indexPath.section]; + if (self.hospatalBlock) { + + self.hospatalBlock(model.hositalId,model.resourceName); + } + +} + +- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +// +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + UIView * hearView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 0)]; + + hearView.backgroundColor = KRedColor; + + return hearView; + +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + return [[UIView alloc] init]; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/searchHospatilCellTableViewCell.h b/XinjiangProject/XinjiangProject/Project/Qusetion/View/searchHospatilCellTableViewCell.h new file mode 100644 index 0000000..d6f162a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/searchHospatilCellTableViewCell.h @@ -0,0 +1,19 @@ +// +// searchHospatilCellTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/20. +// + +#import +#import "HospitalInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface searchHospatilCellTableViewCell : UITableViewCell + +@property (nonatomic , strong) HospitalInfoModel * model; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/Qusetion/View/searchHospatilCellTableViewCell.m b/XinjiangProject/XinjiangProject/Project/Qusetion/View/searchHospatilCellTableViewCell.m new file mode 100644 index 0000000..7cd8a92 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/Qusetion/View/searchHospatilCellTableViewCell.m @@ -0,0 +1,257 @@ +// +// searchHospatilCellTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/20. +// + +#import "searchHospatilCellTableViewCell.h" + +#import "UILabel+ChangeLineSpaceAndWordSpace.h" +#import "TYMapNavSheet.h" + + +@interface searchHospatilCellTableViewCell () +{ + TYMapNavSheet * TYNavSheet; +} + +@property (nonatomic, strong) UIView * backView; + +@property (nonatomic, strong) UIImageView * hospitalImage; + +@property (nonatomic, strong) UILabel * lvLabel; + +@property (nonatomic, strong) UILabel * hospitalName; + +@property (nonatomic, strong) UILabel * addressLabel; + +@property (nonatomic, strong) UILabel * roomLabel; + +@property (nonatomic, strong) UILabel * discanceLabel; + +@property (nonatomic, strong) UIButton * mapNavButton; + +@property (nonatomic, strong) UIImageView * locatImg; + +@end + +@implementation searchHospatilCellTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; + +} + + +- (void)createUI { + + self.backView = [[UIView alloc] initWithFrame:CGRectMake(15, 5, kScreenWidth - 60, 110)]; + self.backView.backgroundColor = KWhiteColor; + [self.contentView addSubview:self.backView]; + + self.hospitalImage = [[UIImageView alloc] initWithFrame:CGRectMake(10, 15, 63, 63)]; + self.hospitalImage.layer.cornerRadius = 10.0f; + self.hospitalImage.layer.masksToBounds = true; + self.hospitalImage.contentMode = UIViewContentModeScaleAspectFill; + [self.backView addSubview:self.hospitalImage]; + + + + self.lvLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.hospitalImage.right + 10, 20, 20, 15)]; + self.lvLabel.layer.cornerRadius = 3.0f; + self.lvLabel.layer.masksToBounds = true; + self.lvLabel.text = @"二甲"; + self.lvLabel.textColor = KWhiteColor; + self.lvLabel.backgroundColor = UIColorHex(#21BEBD); + self.lvLabel.textAlignment = NSTextAlignmentCenter; + self.lvLabel.font = MEDIUMFONT(9); + [UILabel changeWordSpaceForLabel:self.lvLabel WithSpace:2]; + [self.backView addSubview:self.lvLabel]; + + + + self.hospitalName = [[UILabel alloc] initWithFrame:CGRectMake(self.lvLabel.right, 20, self.backView.width - self.lvLabel.right - 10 , 15)]; + self.hospitalName.text = @"生命科学专科医院"; + self.hospitalName.font = BOLDSYSTEMFONT(14); + self.hospitalName.textAlignment = NSTextAlignmentLeft; + [self.backView addSubview:self.hospitalName]; + + + + + self.roomLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.hospitalImage.right + 10, self.hospitalName.bottom + 10, self.backView.width - 63 - 30 , 15)]; + self.roomLabel.text = @"重点科室:眼科、病理科"; + self.roomLabel.font = MEDIUMFONT(13); + self.roomLabel.textAlignment = NSTextAlignmentLeft; + self.roomLabel.textColor = CFontColor1; + [self.backView addSubview:self.roomLabel]; + + + + UIImageView * locatImg = [[UIImageView alloc] initWithFrame:CGRectMake(self.hospitalImage.right + 10, self.hospitalImage.bottom - 18, 10, 12)]; + locatImg.image = [UIImage imageNamed:@"hospatilAddress"]; + self.locatImg = locatImg; + [self.backView addSubview:locatImg]; + + + self.discanceLabel = [[UILabel alloc] initWithFrame:CGRectMake(locatImg.right + 10, locatImg.top - 1, 60, 15)]; + self.discanceLabel.text = @"km"; + self.discanceLabel.font = MEDIUMFONT(13); + self.discanceLabel.textAlignment = NSTextAlignmentLeft; + self.discanceLabel.textColor = CFontColor1; + [self.backView addSubview:self.discanceLabel]; + + + + self.mapNavButton = [[UIButton alloc] initWithFrame:CGRectMake(self.discanceLabel.right + 8, locatImg.top - 3, 60, 20)]; + [self.mapNavButton setTitle:@"导航" forState:UIControlStateNormal]; + [self.mapNavButton setTitleColor:UIColorHex(#3390FF) forState:UIControlStateNormal]; + self.mapNavButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + self.mapNavButton.titleLabel.font = SYSTEMFONT(12); + [self.mapNavButton addTarget:self action:@selector(mapNavLocationAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.backView addSubview:self.mapNavButton]; + + self.addressLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.hospitalImage.right + 10 , self.hospitalImage.bottom + 7 , self.backView.width - self.hospitalImage.right - 25, 15)]; + self.addressLabel.font = MEDIUMFONT(13); + self.addressLabel.textColor = UIColorHex(#999999); + self.addressLabel.numberOfLines = 2 ; + [self.backView addSubview:self.addressLabel]; + + + +} + + +- (void)setModel:(HospitalInfoModel *)model { + + _model = model; + + self.hospitalName.text = _model.resourceName; + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,_model.img]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + [self.hospitalImage sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:IMAGE_NAMED(@"hospitalNoimage")]; + + if (ValidStr(_model.level)) { + self.lvLabel.hidden = YES; + self.hospitalName.left = self.hospitalImage.right + 10; + + + }else + { + self.lvLabel.hidden = NO; + self.lvLabel.text = [NSString stringWithFormat:@" %@ ",_model.level]; + self.lvLabel.width = [HQCommonUtils getLengthFromText:self.lvLabel.text andFontSize:12]; + self.hospitalName.left = self.lvLabel.right + 10; + + + } + + if (ValidStr(_model.keyDepartments)) { + + self.roomLabel.hidden = true; + self.locatImg.top = self.hospitalName.bottom + 10; + self.discanceLabel.top = self.locatImg.top; + self.mapNavButton.top = self.locatImg.top; + self.addressLabel.top = self.locatImg.bottom + 7; + + }else + { + self.roomLabel.hidden = false; + self.roomLabel.text = _model.keyDepartments; + self.locatImg.top = self.roomLabel.bottom + 10; + self.discanceLabel.top = self.locatImg.top; + self.mapNavButton.top = self.locatImg.top; + self.addressLabel.top = self.locatImg.bottom + 7; + } + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + + NSLog(@"经度:%f 纬度:%f", longitude, latitude); + //1.将两个经纬度点转成投影点 + MAMapPoint point1 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(_model.latitude,_model.longitude)); + MAMapPoint point2 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(latitude,longitude)); + //2.计算距离 + CLLocationDistance distance = MAMetersBetweenMapPoints(point1,point2); + NSLog(@"距离:%f", distance); + self.discanceLabel.text = [NSString stringWithFormat:@"%.2fkm",distance/1000]; + + + self.discanceLabel.width = [HQCommonUtils getLengthFromText:self.discanceLabel.text andFontSize:13] + 10; + self.mapNavButton.left = self.discanceLabel.right + 2; + + self.addressLabel.text = [NSString stringWithFormat:@"%@",_model.address]; + CGFloat labH = [HQCommonUtils getSpaceLabelHeight: self.addressLabel withStr:self.addressLabel.text withFont:[UIFont systemFontOfSize:13 weight:UIFontWeightMedium] withWidth:self.addressLabel.width withLineSpacing:5]; + self.addressLabel.height = labH; + self.backView.top = 5; + self.backView.height = self.addressLabel.bottom + 7; + + +} + +- (void)mapNavLocationAction:(UIButton *)navBtn { + + TYNavSheet = [[TYMapNavSheet alloc]init]; + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + +// NSLog(@"经度:%f 纬度:%f", longitude, latitude); +// //1.将两个经纬度点转成投影点 +// MAMapPoint point1 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(model.latitude,model.longitude)); +// MAMapPoint point2 = MAMapPointForCoordinate(CLLocationCoordinate2DMake(latitude,longitude)); +// //2.计算距离 +// CLLocationDistance distance = MAMetersBetweenMapPoints(point1,point2); + NSMutableDictionary * Dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"我的位置",@"startName",self.model.address,@"endName", nil]; + [TYNavSheet ShowMapNavSheetSuperView:[HQCommonUtils getCurrentVC] withLocationDic:Dic withstartCoor:CLLocationCoordinate2DMake(latitude, longitude) withendCoor:CLLocationCoordinate2DMake(self.model.latitude, self.model.longitude)]; + +} + +-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + [TYNavSheet actionSheetBtnClick:buttonIndex]; +} + + + + +- (void)layoutIfNeeded { + [super layoutIfNeeded]; + + self.backView.layer.cornerRadius = 4.0f; + self.backView.layer.masksToBounds = YES; + self.backView.layer.shadowColor = [UIColor grayColor].CGColor; +// self.layer.shadowOffset = CGSizeMake(3, 3);//有偏移量的情况,默认向右向下有阴影 + self.backView.layer.shadowOffset = CGSizeZero; //设置偏移量为0,四周都有阴影 + self.backView.layer.shadowRadius = 3.0f;//阴影半径,默认3 + self.backView.layer.shadowOpacity = 0.3f;//阴影透明度,默认0 + self.backView.layer.masksToBounds = NO; + self.backView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.backView.bounds cornerRadius:self.backView.layer.cornerRadius].CGPath; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Controller/SosCenterViewController.h b/XinjiangProject/XinjiangProject/Project/SOS/Controller/SosCenterViewController.h new file mode 100644 index 0000000..513cd46 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Controller/SosCenterViewController.h @@ -0,0 +1,16 @@ +// +// SosCenterViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/4/13. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SosCenterViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Controller/SosCenterViewController.m b/XinjiangProject/XinjiangProject/Project/SOS/Controller/SosCenterViewController.m new file mode 100644 index 0000000..674a336 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Controller/SosCenterViewController.m @@ -0,0 +1,996 @@ +// +// SosCenterViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/4/13. +// + +#import "SosCenterViewController.h" +#import "POIAnnotation.h" +#import "CustomAnnotationView.h" +#import "XMButton.h" +#import +#import "LXSegmentTitleView.h" +#import "SOSCenterModel.h" +#import +#import +#import +#import "SOSAddressView.h" +#import "SOSGroupIMModel.h" +#import "TYMapNavSheet.h" +#import "HealthInterveneHomeModel.h" +#import "AEDNetWrokModel.h" + +@interface SosCenterViewController () +{ + TYMapNavSheet * TYNavSheet; + +} +@property (nonatomic, strong) MAMapView * mapView ; + +@property (nonatomic, strong) UIView * grapView ; + +@property (nonatomic, strong) AMapSearchAPI *search; +@property (nonatomic, strong) AMapLocationManager *locationManager; +@property (nonatomic, copy) AMapLocatingCompletionBlock completionBlock; + + +@property (nonatomic, strong) LXSegmentTitleView *titleView; + +@property(strong, nonatomic) NSArray *titles; + +@property(strong, nonatomic) NSMutableArray * titlesArray; +@property(strong, nonatomic) NSMutableArray * ponisArray; +@property (strong, nonatomic) SOSCenterModel * model; +//经纬度 +@property (assign, nonatomic) CGFloat Longitude; +@property (assign, nonatomic) CGFloat latitude; +@property (copy, nonatomic) NSString * type; +// +@property (nonatomic, strong) SOSAddressView * addressView; + +@property (nonatomic, strong) SOSResourcesModel * resourceModel; + +@property (assign, nonatomic) NSInteger selecetIndex; + +@property (strong, nonatomic) NSMutableArray * hospitalArray; + +@property (strong, nonatomic) NSMutableArray * AedArray; + +@property (strong, nonatomic) NSMutableArray * carArray; + +@end + +@implementation SosCenterViewController + +- (NSMutableArray *)carArray { + + if (!_carArray) { + + _carArray = [[NSMutableArray alloc] init]; + } + return _carArray; +} + +- (NSMutableArray *)hospitalArray { + + if (!_hospitalArray) { + + _hospitalArray = [[NSMutableArray alloc] init]; + } + return _hospitalArray; +} + +- (NSMutableArray *)AedArray { + + if (!_AedArray) { + + _AedArray = [[NSMutableArray alloc] init]; + } + return _AedArray; + + +} + +- (NSMutableArray *)titlesArray { + + if (!_titlesArray) { + + _titlesArray = [[NSMutableArray alloc] init]; + } + return _titlesArray; +} + +- (NSMutableArray *)ponisArray { + + if (!_ponisArray) { + + _ponisArray = [[NSMutableArray alloc] init]; + } + return _ponisArray; +} + +- (SOSAddressView *)addressView { + + if (!_addressView) { + + _addressView = [[SOSAddressView alloc] initWithFrame:CGRectMake(kRealValue(15), kScreenHeight - kTopHeight - kRealValue(130), kScreenWidth - kRealValue(30), kRealValue(110))]; + _addressView.addressDelegate = self; + _addressView.backgroundColor = KWhiteColor; + + } + return _addressView; +} + +- (void)showBottomBtn { + + self.grapView.hidden = false; + +} +- (void)configLocationManager +{ + self.locationManager = [[AMapLocationManager alloc] init]; + + [self.locationManager setDelegate:self]; + + //设置期望定位精度 + [self.locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters]; + + //设置不允许系统暂停定位 + [self.locationManager setPausesLocationUpdatesAutomatically:NO]; + + //设置允许在后台定位 + [self.locationManager setAllowsBackgroundLocationUpdates:NO]; + + //设置定位超时时间 + [self.locationManager setLocationTimeout:10]; + + //设置逆地理超时时间 + [self.locationManager setReGeocodeTimeout:3]; + + //设置开启虚拟定位风险监测,可以根据需要开启 + [self.locationManager setDetectRiskOfFakeLocation:NO]; +} + +- (void)cleanUpAction +{ + //停止定位 + [self.locationManager stopUpdatingLocation]; + + [self.locationManager setDelegate:nil]; + +} + +- (void)reGeocodeAction +{ + [self.mapView removeAnnotations:self.mapView.annotations]; + + //进行单次带逆地理定位请求 + [self.locationManager requestLocationWithReGeocode:YES completionBlock:self.completionBlock]; +} + +- (void)initCompleteBlock +{ + __weak SosCenterViewController *weakSelf = self; + self.completionBlock = ^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) + { + if (error != nil && error.code == AMapLocationErrorLocateFailed) + { + //定位错误:此时location和regeocode没有返回值,不进行annotation的添加 + return; + } + else if (error != nil + && (error.code == AMapLocationErrorReGeocodeFailed + || error.code == AMapLocationErrorTimeOut + || error.code == AMapLocationErrorCannotFindHost + || error.code == AMapLocationErrorBadURL + || error.code == AMapLocationErrorNotConnectedToInternet + || error.code == AMapLocationErrorCannotConnectToHost)) + { + //逆地理错误:在带逆地理的单次定位中,逆地理过程可能发生错误,此时location有返回值,regeocode无返回值,进行annotation的添加 + } + else if (error != nil && error.code == AMapLocationErrorRiskOfFakeLocation) + { + //存在虚拟定位的风险:此时location和regeocode没有返回值,不进行annotation的添加 + + //存在虚拟定位的风险的定位结果 + __unused CLLocation *riskyLocateResult = [error.userInfo objectForKey:@"AMapLocationRiskyLocateResult"]; + //存在外接的辅助定位设备 + __unused NSDictionary *externalAccressory = [error.userInfo objectForKey:@"AMapLocationAccessoryInfo"]; + + return; + } + else + { + //没有错误:location有返回值,regeocode是否有返回值取决于是否进行逆地理操作,进行annotation的添加 + } + + //根据定位信息,添加annotation + MAPointAnnotation *annotation = [[MAPointAnnotation alloc] init]; + [annotation setCoordinate:location.coordinate]; + + //有无逆地理信息,annotationView的标题显示的字段不一样 + if (regeocode) + { + [annotation setTitle:[NSString stringWithFormat:@"%@", regeocode.formattedAddress]]; + [annotation setSubtitle:[NSString stringWithFormat:@"%@-%@-%.2fm", regeocode.citycode, regeocode.adcode, location.horizontalAccuracy]]; + } + else + { + [annotation setTitle:[NSString stringWithFormat:@"lat:%f;lon:%f;", location.coordinate.latitude, location.coordinate.longitude]]; + [annotation setSubtitle:[NSString stringWithFormat:@"accuracy:%.2fm", location.horizontalAccuracy]]; + } + self.Longitude = location.coordinate.longitude; + self.latitude = location.coordinate.latitude; + [self getResourceDataWithType:@"1" Longitude:self.Longitude withLatitude:self.latitude]; + + SosCenterViewController *strongSelf = weakSelf; + [strongSelf addAnnotationToMapView:annotation]; + }; +} + +- (void)addAnnotationToMapView:(id)annotation +{ + [self.mapView addAnnotation:annotation]; + [self.mapView showAnnotations:self.mapView.annotations edgePadding:UIEdgeInsetsMake(100, 100, 100, 100) animated:YES]; + [self.mapView setCenterCoordinate:annotation.coordinate animated:YES]; +} + + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + self.type = @"0"; + self.selecetIndex = 0; + self.navigationItem.title = @"应急就医"; + self.view.backgroundColor = KWhiteColor; + TYNavSheet = [[TYMapNavSheet alloc]init]; + [self initMapView]; +// [self initCompleteBlock]; +// [self configLocationManager]; +// [self reGeocodeAction]; + + self.titleView = [[LXSegmentTitleView alloc] initWithFrame:CGRectMake(0 , 0 , kScreenWidth , kRealValue(35))]; + self.titleView.itemMinMargin = 15.f; + self.titleView.delegate = self; + self.titleView.titleNormalColor = CFontColor1; + self.titleView.titleSelectedColor = KWhiteColor; + self.titleView.btnNormalColor = KClearColor; + self.titleView.btnSelectedColor = UIColorHex(#21BEBD); + self.titleView.backgroundColor = KWhiteColor; + self.titleView.indicatorColor = KWhiteColor; + [self.view addSubview:self.titleView]; + + UIView * grapView = [[UIView alloc] initWithFrame:CGRectMake(0, kScreenHeight - kTopHeight - kRealValue(170), kScreenWidth,kRealValue(170))]; + grapView.backgroundColor = RGBA(0, 0, 0, 0.1); + self.grapView = grapView; + self.grapView.hidden = false; + [self.view addSubview:grapView]; + + + + + XMButton * callBtn = [[XMButton alloc] initWithFrame:CGRectMake(kScreenWidth/2 - 70 - kRealValue(33), grapView.height - StatusBar_Height - kRealValue(80) , kRealValue(70), kRealValue(70))]; + callBtn.style = SDButtonStyleTop; + callBtn.backgroundColor = KWhiteColor; + callBtn.layer.cornerRadius = 35.0f; + callBtn.layer.masksToBounds = true; + [callBtn setTitle:@"120" forState:UIControlStateNormal]; + callBtn.titleLabel.font = SYSTEMFONT(12); + [callBtn setTitleColor:UIColorHex(#FF422F) forState:UIControlStateNormal]; + [callBtn setImage:[UIImage imageNamed:@"callHospation"] forState:UIControlStateNormal]; + [callBtn addTarget:self action:@selector(callHospationAction) forControlEvents:UIControlEventTouchUpInside]; + callBtn.imageW = 22; + callBtn.imageH = 20; + callBtn.imageY = 19; + callBtn.imageX = 24; + callBtn.interval = 5; + [grapView addSubview:callBtn]; + + XMButton * sosBtn = [[XMButton alloc] initWithFrame:CGRectMake(kScreenWidth/2 + kRealValue(33), callBtn.top , kRealValue(70), kRealValue(70))]; + sosBtn.style = SDButtonStyleTop; + sosBtn.backgroundColor = KWhiteColor; + sosBtn.layer.cornerRadius = 35.0f; + sosBtn.layer.masksToBounds = true; + [sosBtn setTitle:@"应急就医" forState:UIControlStateNormal]; + sosBtn.titleLabel.font = SYSTEMFONT(11); + [sosBtn setTitleColor:UIColorHex(#FF422F) forState:UIControlStateNormal]; + [sosBtn setImage:[UIImage imageNamed:@"callSoSIcon"] forState:UIControlStateNormal]; + [sosBtn addTarget:self action:@selector(callSoSAction) forControlEvents:UIControlEventTouchUpInside]; + sosBtn.imageW = 22; + sosBtn.imageH = 21; + sosBtn.imageY = 19; + sosBtn.imageX = 24; + sosBtn.interval = 5; + [grapView addSubview:sosBtn]; + + self.titles = @[@"油田医院",@"合作医院",@"医疗点",@"AED",@"救护车"]; + self.titleView.segmentTitles = self.titles; + [self.titleView reloadData]; +} + +- (void)initMapView { + if (self.mapView == nil) { + [AMapServices sharedServices].enableHTTPS = YES; + // ///初始化地图 + self.mapView = [[MAMapView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]; + self.mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + self.mapView.showsCompass = YES; //设置成NO表示关闭指南针;YES表示显示指南针 + self.mapView.compassOrigin = CGPointMake(self.mapView.compassOrigin.x, 222); + self.mapView.showsScale = YES; //设置成NO表示不显示比例尺;YES表示显示比例尺 + self.mapView.delegate = self; + ///如果您需要进入地图就显示定位小蓝点,则需要下面两行代码 + _mapView.scaleOrigin= CGPointMake(_mapView.scaleOrigin.x, kRealValue(45)); //设置比例尺位置 + + + [self.view addSubview:self.mapView]; + + + self.mapView.showsUserLocation = YES; + self.mapView.userTrackingMode = MAUserTrackingModeFollow; + + //1.2、新增点A + +// //将目标经纬度设置为地图中心店 + MAUserLocationRepresentation *r = [[MAUserLocationRepresentation alloc] init]; + r.showsAccuracyRing = YES;///精度圈是否显示,默认YES + r.showsHeadingIndicator = YES;///是否显示方向指示(MAUserTrackingModeFollowWithHeading模式开启)。默认为YES + r.enablePulseAnnimation = YES;///内部蓝色圆点是否使用律动效果, 默认YES + r.image = [UIImage imageNamed:@"myLocationIcon"]; ///定位图标, 与蓝色原点互斥 + [self.mapView updateUserLocationRepresentation:r]; + + } + +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + [self getResourceDataWithType:@"1" Longitude:longitude withLatitude:latitude]; +} + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + // 开启定位 + self.mapView.showsUserLocation = YES; + self.mapView.userTrackingMode = MAUserTrackingModeFollow; +} + +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; +} + +#pragma mark: 拨打120 + +- (void)callHospationAction { + + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(longitude) forKey:@"longitude"]; + [parmDic setObject:@(latitude) forKey:@"latitude"]; + [parmDic setObject:@"0" forKey:@"callType"]; + [parmDic setObject:self.type forKey:@"resourceId"]; + + + JKCQAPI * sosApi = [[JKCQAPI alloc] init:self tag:@"CALLAPI" NeedToken:@""]; + [sosApi PostSoSPhoneEmergency:parmDic]; + + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://120"] options:nil completionHandler:^(BOOL success) { + + }]; +} + +#pragma mark:应急点击 +- (void)callSoSAction { + + [self showMBProgressHUDWithString:@"应急发起中,请稍候..." autoHidden:false]; + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(longitude) forKey:@"longitude"]; + [parmDic setObject:@(latitude) forKey:@"latitude"]; + [parmDic setObject:@"0" forKey:@"name"]; + + + JKCQAPI * sosApi = [[JKCQAPI alloc] init:self tag:@"GroupAPI" NeedToken:@""]; + [sosApi getSoSCreateGroupChat:parmDic]; + +} + +#pragma mark - AMapLocationManager Delegate + +- (void)amapLocationManager:(AMapLocationManager *)manager doRequireLocationAuth:(CLLocationManager *)locationManager +{ + [locationManager requestAlwaysAuthorization]; +} + + +#pragma mark - MAMapViewDelegate + +- (void)mapViewRequireLocationAuth:(CLLocationManager *)locationManager +{ + [locationManager requestAlwaysAuthorization]; +} + + +- (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated +{ +} + +#pragma mark:定位失败 +- (void)mapView:(MAMapView *)mapView didFailToLocateUserWithError:(NSError *)error { + +} + + +#pragma mark:更新位置 +- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation +{ + if (updatingLocation) + { + DLog(@"userlocation :%f", userLocation.location.coordinate.latitude); + self.Longitude = userLocation.location.coordinate.longitude; + self.latitude = userLocation.location.coordinate.latitude; + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; +// [self.mapView setCenterCoordinate: userLocation.location.coordinate animated:YES]; + + [user setObject:@(userLocation.location.coordinate.longitude) forKey:USERDEFAULLONG]; + [user setObject:@(userLocation.location.coordinate.latitude) forKey:USERDEFAULLATITUDE]; + [user synchronize]; +// [self getResourceDataWithType:@"0" Longitude:self.Longitude withLatitude:self.latitude]; + +// [self getResourceDataWithType:self.type Longitude:self.Longitude withLatitude:self.latitude]; + } +} + +#pragma mark - LXSegmentTitleViewDataSource + +- (NSArray *)segmentTitlesOfSegmentTitleView:(LXSegmentTitleView *)segmentView { + + return self.titles; +} + +- (void)segmentTitleView:(LXSegmentTitleView *)segmentView selectedIndex:(NSInteger)selectedIndex lastSelectedIndex:(NSInteger)lastSelectedIndex { + + self.mapView.showsUserLocation = YES; + self.mapView.userTrackingMode = MAUserTrackingModeFollow; + self.selecetIndex = selectedIndex + 1; + if (self.selecetIndex == 1 || self.selecetIndex == 2) + { + [self getResourceDataWithType:[NSString stringWithFormat:@"%ld",self.selecetIndex] Longitude:self.Longitude withLatitude:self.latitude]; + [self.addressView removeFromSuperview]; + } + if (self.selecetIndex ==3) { + [self.hospitalArray removeAllObjects]; + [self NearbyHospitalData]; + [self.addressView removeFromSuperview]; + } + if (self.selecetIndex ==4) { + [self.AedArray removeAllObjects]; + [self NearbyAEDEquipmentData]; + [self.addressView removeFromSuperview]; + } + + if (self.selecetIndex ==5) { + [self.AedArray removeAllObjects]; + [self NearbySoSCarInf0Data]; + [self.addressView removeFromSuperview]; + } + + +} + + +#pragma mark:请求医疗点数据 +- (void)NearbyHospitalData { + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:[NSString stringWithFormat:@"%f",longitude] forKey:@"longitude"]; + [parmDic setObject:[NSString stringWithFormat:@"%f",latitude] forKey:@"latitude"]; + [parmDic setObject:[NSString stringWithFormat:@"%d",100000] forKey:@"radiusRange"]; + [parmDic setObject:@"" forKey:@"name"]; + [parmDic setObject:@(5) forKey:@"resourceNum"]; + + JKCQAPI * sosApi = [[JKCQAPI alloc] init:self tag:@"HOSPITALAPI" NeedToken:@""]; + [sosApi getNearbyHomePageHospitalPoint:parmDic]; + +} +#pragma mark:请求医疗点数据 +- (void)NearbyAEDEquipmentData { + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:[NSString stringWithFormat:@"%f",longitude] forKey:@"longitude"]; + [parmDic setObject:[NSString stringWithFormat:@"%f",latitude] forKey:@"latitude"]; + [parmDic setObject:[NSString stringWithFormat:@"%d",100000] forKey:@"radiusRange"]; + [parmDic setObject:@"" forKey:@"aedNum"]; + + JKCQAPI * sosApi = [[JKCQAPI alloc] init:self tag:@"AEDEQAPI" NeedToken:@""]; + [sosApi getNearbyAEDEquipmentqNumber:parmDic]; + +} + +#pragma mark:请求救护车数据 +- (void)NearbySoSCarInf0Data { + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:[NSString stringWithFormat:@"%f",longitude] forKey:@"longitude"]; + [parmDic setObject:[NSString stringWithFormat:@"%f",latitude] forKey:@"latitude"]; + [parmDic setObject:[NSString stringWithFormat:@"%d",100000] forKey:@"radiusRange"]; + + JKCQAPI * sosApi = [[JKCQAPI alloc] init:self tag:@"SOSCARAPI" NeedToken:@""]; + [sosApi getSoSCarInfoLocationHome:parmDic]; + +} + + +- (void)getResourceDataWithType:(NSString *)type + Longitude:(CGFloat)longitude + withLatitude:(CGFloat)latitude{ + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:type forKey:@"type"]; + + [parmDic setObject:@(longitude) forKey:@"longitude"]; + + [parmDic setObject:@(latitude) forKey:@"latitude"]; + + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"RESOURCES" NeedToken:@""]; + [api GetSoSHomePageResources:parmDic]; + +} + +#pragma mark:网络请求 +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [EasyTextView showErrorText:message]; + [self hiddenAllMBProgressHUD]; + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"RESOURCES"]) + { + NSDictionary * parmDic = response; + + SOSCenterModel * model = [SOSCenterModel modelWithDictionary:parmDic]; + self.model = model; + + NSMutableArray * poiAnnotations = [[NSMutableArray alloc] init]; + [self.mapView removeAnnotations:self.mapView.annotations]; + [self.ponisArray removeAllObjects]; + // 获取用户位置 + MAUserLocation *userLocation = self.mapView.userLocation; + if (userLocation) { + [self.ponisArray addObject:userLocation]; + } + for (SOSResourcesModel * resourceModel in model.resources) { + + MAPointAnnotation *pointAnnotation = [[MAPointAnnotation alloc] init]; + pointAnnotation.coordinate = CLLocationCoordinate2DMake(resourceModel.latitude, resourceModel.longitude); + pointAnnotation.title = resourceModel.name; + pointAnnotation.subtitle = resourceModel.address; + [poiAnnotations addObject:pointAnnotation]; + [self addAnnotationToMapView:pointAnnotation]; + [self.ponisArray addObject:pointAnnotation]; + } + } + if ([tag isEqualToString:@"CALLAPI"]) { + NSDictionary * dic = response; + + + } + if ([tag isEqualToString:@"GroupAPI"]) { + NSDictionary * dic = response; + + if ([ESCTUIManager TUIUserStatus] == false) { + + + [self loginImAccount]; + return; + } + + + SOSGroupIMModel * model = [SOSGroupIMModel modelWithDictionary:dic]; + ChatViewController * chatVC = [[ChatViewController alloc] init]; + chatVC.isGroupID = YES; + chatVC.isVideo = YES; + chatVC.eableSendReport = true; + chatVC.eablehaveHelathData = true ; + chatVC.chatID = model.groupId; + chatVC.tfNew = model.tfNew; + chatVC.member = model.member; + chatVC.sosEnd_id = model.sosEnd_id; + chatVC.navTitle = @"应急中心"; + chatVC.questionType = 1; + [self.navigationController pushViewController:chatVC animated:YES]; + [self hiddenAllMBProgressHUD]; + + } + if ([tag isEqualToString:@"loginIMAPI"]) { + + NSDictionary * pamrDic = response; + + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + [ESCTUIManager loginInitTUISDKAppidWith:[model.sdkAppId intValue] UserID:model.userId userSig:model.userSig]; + [self callSoSAction]; + } + + if([tag isEqualToString:@"HOSPITALAPI"]) { + + NSArray * responseArray = response; + + NSMutableArray * poiAnnotations = [[NSMutableArray alloc] init]; + [self.mapView removeAnnotations:self.mapView.annotations]; + [self.ponisArray removeAllObjects]; + // 获取用户位置 + MAUserLocation *userLocation = self.mapView.userLocation; + if (userLocation) { + [self.ponisArray addObject:userLocation]; + } + for (NSDictionary * dic in responseArray) { + + HealthInterveneHomeModel * hospitalModel = [HealthInterveneHomeModel modelWithDictionary:dic]; + [self.hospitalArray addObject:hospitalModel]; + + MAPointAnnotation *pointAnnotation = [[MAPointAnnotation alloc] init]; + pointAnnotation.coordinate = CLLocationCoordinate2DMake(hospitalModel.latitude, hospitalModel.longitude); + pointAnnotation.title = hospitalModel.name; + pointAnnotation.subtitle = hospitalModel.address; + [poiAnnotations addObject:pointAnnotation]; + [self addAnnotationToMapView:pointAnnotation]; + [self.ponisArray addObject:pointAnnotation]; + } + + + } + if ([tag isEqualToString:@"AEDEQAPI"]) { + + NSArray * responseArray = response; + + NSMutableArray * poiAnnotations = [[NSMutableArray alloc] init]; + [self.mapView removeAnnotations:self.mapView.annotations]; + [self.ponisArray removeAllObjects]; + // 获取用户位置 + MAUserLocation *userLocation = self.mapView.userLocation; + if (userLocation) { + [self.ponisArray addObject:userLocation]; + } + + for (NSDictionary * dic in responseArray) { + + AEDNetWrokModel * aedModel = [AEDNetWrokModel modelWithDictionary:dic]; + [self.AedArray addObject:aedModel]; + + MAPointAnnotation *pointAnnotation = [[MAPointAnnotation alloc] init]; + pointAnnotation.coordinate = CLLocationCoordinate2DMake(aedModel.latitude, aedModel.longitude); + pointAnnotation.title = aedModel.name; + pointAnnotation.subtitle = aedModel.installAddress; + [poiAnnotations addObject:pointAnnotation]; + [self addAnnotationToMapView:pointAnnotation]; + [self.ponisArray addObject:pointAnnotation]; + } + + } + if ([tag isEqualToString:@"SOSCARAPI"]) { + + NSArray * responseArray = response; + + NSMutableArray * poiAnnotations = [[NSMutableArray alloc] init]; + [self.mapView removeAnnotations:self.mapView.annotations]; + [self.ponisArray removeAllObjects]; + // 获取用户位置 + MAUserLocation *userLocation = self.mapView.userLocation; + if (userLocation) { + [self.ponisArray addObject:userLocation]; + } + + for (NSDictionary * dic in responseArray) { + + SOSResourcesModel * aedModel = [SOSResourcesModel modelWithDictionary:dic]; + [self.carArray addObject:aedModel]; + + MAPointAnnotation *pointAnnotation = [[MAPointAnnotation alloc] init]; + pointAnnotation.coordinate = CLLocationCoordinate2DMake(aedModel.latitude, aedModel.longitude); + pointAnnotation.title = aedModel.departCode; + pointAnnotation.subtitle = aedModel.licensePlateNumber; + [poiAnnotations addObject:pointAnnotation]; + [self addAnnotationToMapView:pointAnnotation]; + [self.ponisArray addObject:pointAnnotation]; + } + + + } + + + +} + +- (void)loginImAccount { + + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"loginIMAPI" NeedToken:nil]; + [proctocolApi GetIMLoginAccount:nil]; + +} + +- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id)annotation +{ + [self.mapView showAnnotations:self.ponisArray edgePadding:UIEdgeInsetsMake(100, 100, 100, 100) animated:YES]; + //用户当前位置大头针 + if ([annotation isKindOfClass:[MAUserLocation class]]) + { + static NSString *userLocationStyleReuseIndetifier = @"userLocationStyleReuseIndetifier"; + + MAAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:userLocationStyleReuseIndetifier]; + + if (annotationView == nil) + { + annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:userLocationStyleReuseIndetifier]; + } + + annotationView.canShowCallout = true; + annotationView.image = [UIImage imageNamed:@"myLocationIcon"]; + annotationView.frame = CGRectMake(0, 0, 50, 50); + + return annotationView; + } + + if ([annotation isKindOfClass:[MAPointAnnotation class]]) + { + static NSString *reuseIndetifier = @"annotationReuseIndetifier"; + MAAnnotationView *annotationView = (MAAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIndetifier]; + if (annotationView == nil) + { + annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation + reuseIdentifier:reuseIndetifier]; + } + if (self.selecetIndex == 3) { + + for (HealthInterveneHomeModel * hospitalModel in self.hospitalArray) { + + if (annotation.coordinate.longitude == hospitalModel.longitude && annotation.coordinate.latitude == hospitalModel.latitude) { + annotationView.image = [UIImage imageNamed:@"medicalAnnitation"]; + } + } + + // 使用动画效果将点显示在屏幕内 + [annotationView setSelected:false animated:YES]; + //设置中心点偏移,使得标注底部中间点成为经纬度对应点 + annotationView.centerOffset = CGPointMake(0, -18); + return annotationView; + } + if (self.selecetIndex == 4) { + + for (AEDNetWrokModel * aedModel in self.AedArray) { + + if (annotation.coordinate.longitude == aedModel.longitude && annotation.coordinate.latitude == aedModel.latitude) { + annotationView.image = [UIImage imageNamed:@"AEDIcon"]; + } + } + // 使用动画效果将点显示在屏幕内 + [annotationView setSelected:false animated:YES]; + //设置中心点偏移,使得标注底部中间点成为经纬度对应点 + annotationView.centerOffset = CGPointMake(0, -18); + return annotationView; + + } + //救护车 + if (self.selecetIndex == 5) { + + for (SOSResourcesModel * aedModel in self.carArray) { + + if (annotation.coordinate.longitude == aedModel.longitude && annotation.coordinate.latitude == aedModel.latitude) { + annotationView.image = [UIImage imageNamed:@"sosCard"]; + } + } + // 使用动画效果将点显示在屏幕内 + [annotationView setSelected:false animated:YES]; + //设置中心点偏移,使得标注底部中间点成为经纬度对应点 + annotationView.centerOffset = CGPointMake(0, -18); + return annotationView; + + } + else + { + for (SOSResourcesModel * resourceModel in self.model.resources) { + + if (annotation.coordinate.longitude == resourceModel.longitude && annotation.coordinate.latitude == resourceModel.latitude) { + if ([resourceModel.type integerValue]== 1) { + annotationView.image = [UIImage imageNamed:@"youtianHosoital"]; + } + if ([resourceModel.type integerValue]== 2) { + annotationView.image = [UIImage imageNamed:@"hezuoHospital"]; + } + if ([resourceModel.type integerValue]== 3) { + annotationView.image = [UIImage imageNamed:@"medicalAnnitation"]; + } + if ([resourceModel.type integerValue]== 4) { + annotationView.image = [UIImage imageNamed:@"AEDIcon"]; + } + if ([resourceModel.type integerValue]== 5) { + annotationView.image = [UIImage imageNamed:@"sosCard"]; + } + if ([resourceModel.type integerValue]== 6) { + annotationView.image = [UIImage imageNamed:@"sosPeople"]; + } + + } + } + // 使用动画效果将点显示在屏幕内 + [annotationView setSelected:false animated:YES]; + //设置中心点偏移,使得标注底部中间点成为经纬度对应点 + annotationView.centerOffset = CGPointMake(0, -18); + + return annotationView; + } + + + } + return nil; +} + +- (void)mapView:(MAMapView *)mapView didSelectAnnotationView:(MAAnnotationView *)view +{ + + self.grapView.hidden = true; + + + if (self.selecetIndex == 3) { //医疗点 + + for (HealthInterveneHomeModel * hospitalModel in self.hospitalArray) { + + if (view.annotation.coordinate.longitude == hospitalModel.longitude && view.annotation.coordinate.latitude == hospitalModel.latitude) { + + SOSResourcesModel * resourceModel = [[SOSResourcesModel alloc] init]; + + resourceModel.address = hospitalModel.address; + resourceModel.name = hospitalModel.name; + resourceModel.mobile = hospitalModel.mobile; + resourceModel.latitude = hospitalModel.latitude; + resourceModel.longitude = hospitalModel.longitude; + + self.addressView.resourceModel = resourceModel; + self.resourceModel = resourceModel; + [self.mapView addSubview:self.addressView]; + } + } + return; + + } + if (self.selecetIndex == 4) { //aed + + for (AEDNetWrokModel * aedModel in self.AedArray) { + + if (view.annotation.coordinate.longitude == aedModel.longitude && view.annotation.coordinate.latitude == aedModel.latitude) { + + HealthInterveneAEDModel * subAedModel = [[HealthInterveneAEDModel alloc] init]; + + subAedModel.resourceAddress = aedModel.installAddress; + subAedModel.resourceName = aedModel.name; + subAedModel.principalPhone = aedModel.chargeFirstMobile; + self.addressView.aedModel = subAedModel; + + SOSResourcesModel * resourceModel = [[SOSResourcesModel alloc] init]; + resourceModel.address = aedModel.installAddress; + resourceModel.name = aedModel.name; + resourceModel.mobile = aedModel.chargeFirstMobile; + resourceModel.latitude = aedModel.latitude; + resourceModel.longitude = aedModel.longitude; + self.resourceModel = resourceModel; + [self.mapView addSubview:self.addressView]; + } + } + return; + + } + if (self.selecetIndex == 5) { + + for (SOSResourcesModel * aedModel in self.carArray) { + + if (view.annotation.coordinate.longitude == aedModel.longitude && view.annotation.coordinate.latitude == aedModel.latitude) { + + SOSResourcesModel * resourceModel = [[SOSResourcesModel alloc] init]; + resourceModel.address = aedModel.licensePlateNumber; + resourceModel.name = aedModel.departCode; + resourceModel.latitude = aedModel.latitude; + resourceModel.longitude = aedModel.longitude; + self.resourceModel = resourceModel; + self.addressView.resourceModel = resourceModel; + [self.mapView addSubview:self.addressView]; + } + } + return; + + } + for (SOSResourcesModel * resourceModel in self.model.resources) { + + + if (view.annotation.coordinate.longitude == resourceModel.longitude && view.annotation.coordinate.latitude == resourceModel.latitude) { + + self.addressView.resourceModel = resourceModel; + self.resourceModel = resourceModel; + [self.mapView addSubview:self.addressView]; + } + + } + +// } +} + +- (void)addressNavLocataion { + + NSUserDefaults * user = [NSUserDefaults standardUserDefaults]; + CGFloat longitude = [[user objectForKey:USERDEFAULLONG] floatValue]; + CGFloat latitude = [[user objectForKey:USERDEFAULLATITUDE] floatValue]; + + + + NSMutableDictionary * Dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"我的位置",@"startName",self.resourceModel.address,@"endName", nil]; + [TYNavSheet ShowMapNavSheetSuperView:self withLocationDic:Dic withstartCoor:CLLocationCoordinate2DMake(latitude, longitude) withendCoor:CLLocationCoordinate2DMake(self.resourceModel.latitude, self.resourceModel.longitude)]; + +} + +-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + [TYNavSheet actionSheetBtnClick:buttonIndex]; +} + +- (void)resourcePhoneOnclick:(NSString *)phoneNumber { + + + [[UIApplication sharedApplication] openURL:[NSURL URLWithString: [NSString stringWithFormat:@"tel://%@",phoneNumber]] options:nil completionHandler:^(BOOL success) { + + }]; +} +//在线时票据过期:此时您需要生成新的 userSig,并再次重新调用初始化。 +- (void)onKickedOffline { + + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + [ESCTUIManager outLoginTUISDK]; + KPostNotification(KNotificationLoginStateChange, @NO); + +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Model/AEDNetWrokModel.h b/XinjiangProject/XinjiangProject/Project/SOS/Model/AEDNetWrokModel.h new file mode 100644 index 0000000..a0bde6e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Model/AEDNetWrokModel.h @@ -0,0 +1,75 @@ +// +// AEDNetWrokModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface AEDNetWrokModel : NSObject + +@property (nonatomic, copy) NSString * aed_id; +@property (nonatomic, copy) NSString * routerStatus_dictText; +@property (nonatomic, copy) NSString * installAddressImg; +@property (nonatomic, copy) NSString * manageDepartName; +@property (nonatomic, copy) NSString * installAddress; +@property (nonatomic, copy) NSString * batteryStatus; + +@property (nonatomic, copy) NSString * handleExplain; +@property (nonatomic, copy) NSString * videoHandle; +@property (nonatomic, copy) NSString * aedAnnexStatus; +@property (nonatomic, copy) NSString * chargeFirstMobile; +@property (nonatomic, copy) NSString * manageUserName; +@property (nonatomic, copy) NSString * routerSerialNum; + +@property (nonatomic, copy) NSString * manageUserId; +@property (nonatomic, copy) NSString * secondDepartName; +@property (nonatomic, copy) NSString * hostModel; +@property (nonatomic, copy) NSString * hostSerialNum; +@property (nonatomic, copy) NSString * delFlag; +@property (nonatomic, copy) NSString * annex; + + +@property (nonatomic, copy) NSString * batteryModel; +@property (nonatomic, copy) NSString * updateBy; +@property (nonatomic, copy) NSString * checkStatus_dictText; +@property (nonatomic, copy) NSString * routerModel; +@property (nonatomic, copy) NSString * name; +@property (nonatomic, copy) NSString * updateTime; + +@property (nonatomic, copy) NSString * electrodeSheetValidTime; +@property (nonatomic, copy) NSString * createBy; +@property (nonatomic, copy) NSString * departName; +@property (nonatomic, copy) NSString * manageDepartCode; +@property (nonatomic, assign) long distance; +@property (nonatomic, copy) NSString * aedImg; + +@property (nonatomic, assign) double longitude; +@property (nonatomic, copy) NSString * manageUserMobile; +@property (nonatomic, assign) double latitude; +@property (nonatomic, copy) NSString * departCode; + +@property (nonatomic, copy) NSString * electrodeSheetStatus; +@property (nonatomic, copy) NSString * batteryStatus_dictText; +@property (nonatomic, assign) NSInteger coverUserNum; + +@property (nonatomic, copy) NSString * chargeSecond; +@property (nonatomic, copy) NSString * chargeSecondMobile; + +@property (nonatomic, copy) NSString * checkStatus; +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * mfrsName; +@property (nonatomic, copy) NSString * warrantyEndDate; +@property (nonatomic, copy) NSString * warrantyStartDate; +@property (nonatomic, copy) NSString * chargeFirst; +@property (nonatomic, copy) NSString * routerStatus; +@property (nonatomic, copy) NSString * electrodeSheetStatus_dictText; +@property (nonatomic, copy) NSString * mfrsMobile; +@property (nonatomic, copy) NSString * memo; +@property (nonatomic, assign) NSInteger batteryVoltage; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Model/AEDNetWrokModel.m b/XinjiangProject/XinjiangProject/Project/SOS/Model/AEDNetWrokModel.m new file mode 100644 index 0000000..c336526 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Model/AEDNetWrokModel.m @@ -0,0 +1,19 @@ +// +// AEDNetWrokModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/19. +// + +#import "AEDNetWrokModel.h" + +@implementation AEDNetWrokModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"aed_id" :@"id"}; + return dic; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneAEDModel.h b/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneAEDModel.h new file mode 100644 index 0000000..61566c7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneAEDModel.h @@ -0,0 +1,36 @@ +// +// HealthInterveneAEDModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/12/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HealthInterveneAEDModel : NSObject + +@property (nonatomic, copy) NSString * aed_id; +@property (nonatomic, copy) NSString * resourceAddress; +@property (nonatomic, copy) NSString * principalName; +@property (nonatomic, copy) NSString * principalPhone; +@property (nonatomic, copy) NSString * updateBy; +@property (nonatomic, copy) NSString * resourceDesc; + +@property (nonatomic, copy) NSString * resourceType; +@property (nonatomic, assign) double longitude; +@property (nonatomic, copy) NSString * delFlag; +@property (nonatomic, assign) double latitude; +@property (nonatomic, copy) NSString * resourceName; + +@property (nonatomic, copy) NSString * resourceImg; +@property (nonatomic, copy) NSString * resourceNo; +@property (nonatomic, assign) long distance; + +@property (nonatomic, strong) NSArray * assoSymtomIds; +@property (nonatomic, copy) NSString * status; +@property (nonatomic, copy) NSString * createBy; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneAEDModel.m b/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneAEDModel.m new file mode 100644 index 0000000..95b0558 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneAEDModel.m @@ -0,0 +1,19 @@ +// +// HealthInterveneAEDModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/12/19. +// + +#import "HealthInterveneAEDModel.h" + +@implementation HealthInterveneAEDModel + + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"aed_id" :@"id"}; + return dic; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneHomeModel.h b/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneHomeModel.h new file mode 100644 index 0000000..b8138aa --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneHomeModel.h @@ -0,0 +1,56 @@ +// +// HealthInterveneHomeModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/9/12. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface HealthInterveneHomeModel : NSObject + +@property (nonatomic, copy) NSString * tit; +@property (nonatomic, copy) NSString * healthImg; +@property (nonatomic, copy) NSString * des; +@property (nonatomic, copy) NSString * currentData; +@property (nonatomic, copy) NSString * backImg; +@property (nonatomic, copy) NSString * type; + +//医院 +@property (nonatomic, copy) NSString * status; +@property (nonatomic, copy) NSString * status_dictText; +@property (nonatomic, copy) NSString * delFlag; +@property (nonatomic, copy) NSString * createBy; +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * updateBy; +@property (nonatomic, copy) NSString * updateTime; +@property (nonatomic, copy) NSString * memo; +@property (nonatomic, copy) NSString * detail_id; +@property (nonatomic, copy) NSString * name; +@property (nonatomic, copy) NSString * address; +@property (nonatomic, copy) NSString * mobile; +@property (nonatomic, assign) double longitude; +@property (nonatomic, assign) double latitude; +@property (nonatomic, copy) NSString * aidrange; +@property (nonatomic, copy) NSString * gdId; +@property (nonatomic, copy) NSString * url; +@property (nonatomic, copy) NSString * level; +@property (nonatomic, copy) NSString * img; +@property (nonatomic, copy) NSString * hospitalId; +@property (nonatomic, copy) NSString * hospitalName; +@property (nonatomic, copy) NSString * departCode; +@property (nonatomic, copy) NSString * departName; +@property (nonatomic, copy) NSString * adminUser; +@property (nonatomic, copy) NSString * setUpTime; +@property (nonatomic, copy) NSString * medicalStaffNum; +@property (nonatomic, copy) NSString * radiationNum; +@property (nonatomic, copy) NSString * ambulanceNum; +@property (nonatomic, copy) NSString * radiationDepart; +@property (nonatomic, strong) NSArray * radiationDepartList; +@property (nonatomic, copy) NSString * distance; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneHomeModel.m b/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneHomeModel.m new file mode 100644 index 0000000..c2c12f7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Model/HealthInterveneHomeModel.m @@ -0,0 +1,18 @@ +// +// HealthInterveneHomeModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/9/12. +// + +#import "HealthInterveneHomeModel.h" + +@implementation HealthInterveneHomeModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"detail_id" :@"id"}; + return dic; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Model/SOSCenterModel.h b/XinjiangProject/XinjiangProject/Project/SOS/Model/SOSCenterModel.h new file mode 100644 index 0000000..a487965 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Model/SOSCenterModel.h @@ -0,0 +1,54 @@ +// +// SOSCenterModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/5/13. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SOSTitleModel : NSObject + +@property (nonatomic, copy) NSString * title; + +@property (nonatomic, copy) NSString * value; + + +@end + +@interface SOSResourcesModel : NSObject + +@property (nonatomic, copy) NSString * province; +@property (nonatomic, copy) NSString * gdId; +@property (nonatomic, assign) double latitude; +@property (nonatomic, copy) NSString * city; +@property (nonatomic, copy) NSString * name; +@property (nonatomic, copy) NSString * type; +@property (nonatomic, copy) NSString * level; +@property (nonatomic, assign) double longitude; +@property (nonatomic, copy) NSString * distance; +@property (nonatomic, copy) NSString * reaourceID; +@property (nonatomic, copy) NSString * address; +@property (nonatomic, copy) NSString * img; +@property (nonatomic, copy) NSString * mobile; +@property (nonatomic, copy) NSString * licensePlateNumber; + +@property (nonatomic, copy) NSString * departCode; + + +@property (nonatomic, copy) NSString * driverName; + + +@end + + +@interface SOSCenterModel : NSObject + +@property (nonatomic, strong) NSArray * resources; +@property (nonatomic, strong) NSArray * dicts; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/SOS/Model/SOSCenterModel.m b/XinjiangProject/XinjiangProject/Project/SOS/Model/SOSCenterModel.m new file mode 100644 index 0000000..e878ed9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/Model/SOSCenterModel.m @@ -0,0 +1,36 @@ +// +// SOSCenterModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/5/13. +// + +#import "SOSCenterModel.h" + +@implementation SOSTitleModel + + +@end + +@implementation SOSResourcesModel + ++ (NSDictionary *)modelCustomPropertyMapper +{ + NSDictionary * dic =@{@"reaourceID" :@"id"}; + return dic; +} + +@end + +@implementation SOSCenterModel + ++ (NSDictionary *)modelContainerPropertyGenericClass +{ + + + return @{@"resources":[SOSResourcesModel class], + @"dicts":[SOSTitleModel class] + }; + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/SOS/View/SOSAddressView.h b/XinjiangProject/XinjiangProject/Project/SOS/View/SOSAddressView.h new file mode 100644 index 0000000..645d28b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/View/SOSAddressView.h @@ -0,0 +1,34 @@ +// +// SOSAddressView.h +// EscortProject +// +// Created by 仁康信息 on 2023/6/2. +// + +#import +#import "SOSCenterModel.h" +#import "HealthInterveneAEDModel.h" +NS_ASSUME_NONNULL_BEGIN + +@protocol SoSBottomProtocol + +- (void)addressNavLocataion; + +- (void)resourcePhoneOnclick:(NSString *)phoneNumber; + +- (void)showBottomBtn; + +@end + +@interface SOSAddressView : UIView + +@property (nonatomic, strong) SOSResourcesModel * resourceModel; + +@property (nonatomic, strong) HealthInterveneAEDModel * aedModel; + + +@property (nonatomic, weak)id addressDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/SOS/View/SOSAddressView.m b/XinjiangProject/XinjiangProject/Project/SOS/View/SOSAddressView.m new file mode 100644 index 0000000..b62db61 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/SOS/View/SOSAddressView.m @@ -0,0 +1,224 @@ +// +// SOSAddressView.m +// EscortProject +// +// Created by 仁康信息 on 2023/6/2. +// + +#import "SOSAddressView.h" + + +@interface SOSAddressView () + +@property (nonatomic, strong) UILabel * lvLabel; +@property (nonatomic, strong) UILabel * hospitalName; +@property (nonatomic, strong) UILabel * phoneLabel; +@property (nonatomic, strong) UILabel * addressLabel; + + +@end + + +@implementation SOSAddressView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + + self.layer.cornerRadius = 10; + self.layer.masksToBounds = true; + self.lvLabel = [[UILabel alloc] init]; + self.lvLabel.layer.cornerRadius = 3.0f; + self.lvLabel.layer.masksToBounds = true; + self.lvLabel.text = @"--"; + self.lvLabel.textColor = KWhiteColor; + self.lvLabel.backgroundColor = UIColorHex(#21BEBD); + self.lvLabel.textAlignment = NSTextAlignmentCenter; + self.lvLabel.font = MEDIUMFONT(9); + self.lvLabel.hidden = true; + [self addSubview:self.lvLabel]; + + [self.lvLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(kRealValue(18)); + make.width.mas_offset(60); + make.top.mas_offset(20); + make.height.mas_offset(16); + + }]; + + self.hospitalName = [[UILabel alloc] init]; + self.hospitalName.text = @"--"; + self.hospitalName.font = BOLDSYSTEMFONT(14); + self.hospitalName.textColor = UIColorHex(#333333); + self.hospitalName.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.hospitalName]; + + [self.hospitalName mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.lvLabel.mas_right).offset(10); + make.right.mas_offset(-30); + make.top.mas_offset(20); + make.height.mas_offset(15); + + }]; + + self.phoneLabel = [[UILabel alloc] init]; + self.phoneLabel.text = @"--"; + self.phoneLabel.font = MEDIUMFONT(13); + self.phoneLabel.textColor = UIColorHex(#999999); + self.phoneLabel.textAlignment = NSTextAlignmentLeft; + [self addSubview:self.phoneLabel]; + + [self.phoneLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(kRealValue(15)); + make.right.mas_offset(-30); + make.top.mas_equalTo(self.lvLabel.mas_bottom).offset(12); + make.height.mas_offset(15); + + }]; + + + self.addressLabel = [[UILabel alloc] init]; + self.addressLabel.text = @"--km | ---"; + self.addressLabel.font = MEDIUMFONT(13); + self.addressLabel.textColor = UIColorHex(#999999); + [self addSubview:self.addressLabel]; + + [self.addressLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(kRealValue(18)); + make.right.mas_offset(kRealValue(-15)); + make.top.mas_equalTo(self.phoneLabel.mas_bottom).offset(10); + make.bottom.mas_offset(-10); + }]; + + [self.addressLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + + + UIButton * closeBtn = [[UIButton alloc] init]; + [closeBtn setImage:IMAGE_NAMED(@"close_icon") forState:UIControlStateNormal]; + [closeBtn addTarget:self action:@selector(closePopView) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:closeBtn]; + + [closeBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(kRealValue(-15)); + make.top.mas_equalTo(@10); + make.width.height.mas_offset(20); + }]; + + UIButton * navBtn = [[UIButton alloc] init]; + [navBtn setImage:IMAGE_NAMED(@"address_NavLoctaion") forState:UIControlStateNormal]; + [navBtn addTarget:self action:@selector(navLocationView) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:navBtn]; + + [navBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_offset(kRealValue(-21)); + make.top.mas_equalTo(self.hospitalName.mas_bottom).offset(4); + make.width.height.mas_offset(26); + }]; + + UIButton * samllPhoneBtn = [[UIButton alloc] init]; + [samllPhoneBtn setImage:IMAGE_NAMED(@"address_phone") forState:UIControlStateNormal]; + [samllPhoneBtn addTarget:self action:@selector(LocationPhoneView) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:samllPhoneBtn]; + + [samllPhoneBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(navBtn.mas_left).offset(-14); + make.top.mas_equalTo(self.hospitalName.mas_bottom).offset(4); + make.width.height.mas_offset(26); + }]; +} + +- (void)setResourceModel:(SOSResourcesModel *)resourceModel { + _resourceModel = resourceModel; + if ( !ValidStr(_resourceModel.level) ) { + self.lvLabel.hidden = false; + self.lvLabel.text = _resourceModel.level; + [self.hospitalName mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.lvLabel.mas_right).offset(10); + make.right.mas_offset(-30); + make.top.mas_offset(20); + make.height.mas_offset(15); + + }]; + }else + { + [self.hospitalName mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(kRealValue(18)); + make.right.mas_offset(-30); + make.top.mas_offset(20); + make.height.mas_offset(15); + + }]; + } + self.addressLabel.text = _resourceModel.address; + self.hospitalName.text = _resourceModel.name; + self.phoneLabel.text = _resourceModel.mobile; +} +- (void)setAedModel:(HealthInterveneAEDModel *)aedModel { + + _aedModel = aedModel; + [self.hospitalName mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(kRealValue(18)); + make.right.mas_offset(-30); + make.top.mas_offset(20); + make.height.mas_offset(15); + + }]; + self.addressLabel.text = [NSString stringWithFormat:@"%.2f | %@",_aedModel.distance / 1000.0, _aedModel.resourceAddress] ; + self.hospitalName.text = _aedModel.resourceName; + self.phoneLabel.text = _aedModel.principalPhone; + +} + +- (void)navLocationView { + + if ([self.addressDelegate respondsToSelector:@selector(addressNavLocataion)]) { + + [self.addressDelegate addressNavLocataion]; + } + +} + +- (void)LocationPhoneView { + + if ([self.addressDelegate respondsToSelector:@selector(resourcePhoneOnclick:)]) { + + if (self.resourceModel) { + [self.addressDelegate resourcePhoneOnclick:self.resourceModel.mobile]; + + } + if (self.aedModel ) { + [self.addressDelegate resourcePhoneOnclick:self.aedModel.principalPhone]; + + } + } + + +} + + +- (void)closePopView { + + if ([self.addressDelegate respondsToSelector:@selector(showBottomBtn)]) { + + [self.addressDelegate showBottomBtn]; + } + + [self removeFromSuperview]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/ChatDoctorInfoModel.h b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatDoctorInfoModel.h new file mode 100644 index 0000000..db9c7ae --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatDoctorInfoModel.h @@ -0,0 +1,19 @@ +// +// ChatDoctorInfoModel.h +// QinghaiProject +// +// Created by Apple on 2024/8/22. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ChatDoctorInfoModel : NSObject +@property (nonatomic, copy) NSString * memo; +@property (nonatomic, copy) NSString * faceUrl; +@property (nonatomic, copy) NSString * userId; +@property (nonatomic, copy) NSString * userName; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/ChatDoctorInfoModel.m b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatDoctorInfoModel.m new file mode 100644 index 0000000..0b7da27 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatDoctorInfoModel.m @@ -0,0 +1,12 @@ +// +// ChatDoctorInfoModel.m +// QinghaiProject +// +// Created by Apple on 2024/8/22. +// + +#import "ChatDoctorInfoModel.h" + +@implementation ChatDoctorInfoModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/ChatList/ChatListViewController.h b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatList/ChatListViewController.h new file mode 100644 index 0000000..ff38eef --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatList/ChatListViewController.h @@ -0,0 +1,16 @@ +// +// ChatListViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ChatListViewController : HQBaseViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/ChatList/ChatListViewController.m b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatList/ChatListViewController.m new file mode 100644 index 0000000..9826250 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatList/ChatListViewController.m @@ -0,0 +1,65 @@ +// +// ChatListViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "ChatListViewController.h" +#import "TUIConversationListController.h" +#import "TUIC2CChatViewController.h" +#import "TUIConversationCell.h" +#import "ChatViewController.h" + +@interface ChatListViewController () + +@end + +@implementation ChatListViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.isHidenNaviBar = false; + TUIConversationListController *vc = [[TUIConversationListController alloc] init]; + vc.delegate = self; + // 把 TUIConversationListController 添加到自己的 ViewController + [self addChildViewController:vc]; + [self.view addSubview:vc.view]; + +} + +//会话列表代理 + +- (void)conversationListController:(TUIConversationListController *)conversationController + didSelectConversation:(TUIConversationCell *)conversation +{ + + // 会话列表点击事件,通常是打开聊天界面 + TUIConversationCellData * data11 = conversation; +// // 创建会话信息 + + ChatViewController * chatVC = [[ChatViewController alloc] init]; + if (!ValidStr(data11.userID)) { + chatVC.chatID = data11.userID; + chatVC.isGroupID = false; + + }else + { + chatVC.chatID = data11.groupID; + chatVC.isGroupID = YES; + } + chatVC.navTitle = data11.title; + [self.navigationController pushViewController:chatVC animated:true]; +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/ChatViewController.h b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatViewController.h new file mode 100644 index 0000000..8f4a7c1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatViewController.h @@ -0,0 +1,68 @@ +// +// ChatViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "HQBaseViewController.h" +#import "QuestionDiseaseInfoModel.h" + +//#import "TUIBaseChatViewController.h" +NS_ASSUME_NONNULL_BEGIN + +@interface ChatViewController : HQBaseViewController + +@property (nonatomic, strong) NSString * chatID; + +@property (nonatomic, assign) BOOL isGroupID; + +@property (nonatomic, copy) NSString * navTitle; + +@property (nonatomic, copy) NSString * tfNew;//当前应急单是否新的 1新的发起视频 0旧的不变 + +@property (nonatomic, strong) NSArray * member; + +@property (nonatomic, assign) BOOL isVideo;; + +//应急单 +@property (nonatomic, copy) NSString * sosEnd_id;//当前应急单是否新的 1新的发起视频 0旧的不变 +//咨询健康档案模型 +@property (nonatomic, strong) QuestionDiseaseInfoModel * disModel; +//档案ID +@property (nonatomic, strong) NSString * dangan_id; +//个人信息模型 + +//1 应急 2 图文咨询 3 音视频咨询 + +@property (nonatomic, assign) NSInteger questionType; +@property (nonatomic, copy) NSString * pictureEnd_id; +@property (nonatomic, copy) NSString * smallHelp_id; + +@property (nonatomic, assign) NSInteger JumpType; + +//是否有发送报告 +@property (nonatomic, assign) BOOL eableSendReport; +//是否有地图 +@property (nonatomic, assign) BOOL eableMapTools; +//是否有健康档案 +@property (nonatomic, assign) BOOL eablehaveHelathData; + + +//从哪来去哪里 +@property (nonatomic, assign) NSInteger PopType; + +//是否是结束入口进入 +@property (nonatomic, assign) NSInteger endRecordType; + +@property (nonatomic, copy) NSString * kuaisuzixun; + +// +@property (nonatomic, copy) NSString * medicalRecordsId; + +////是否评价过 +@property (nonatomic, assign) BOOL isEveal; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/ChatViewController.m b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatViewController.m new file mode 100644 index 0000000..08e8ae7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/ChatViewController.m @@ -0,0 +1,948 @@ +// +// ChatViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "ChatViewController.h" +#import "TUIC2CChatViewController.h" +#import "TUIMessageDataProvider.h" +#import "TUIChatDataProvider.h" +#import "ChatMapViewController.h" +#import +#import "evaluationPopView.h" +#import "EndSystemSoSCell.h" +#import "DoctorIDCardMessageCell.h" +#import "healthDataCustomCell.h" +#import "ExpertMainViewController.h" +#import "SendHealthDataViewController.h" +#import "CurrentLocationViewController.h" +#import "TUITextMessageCellData.h" +#import "QuestionViewController.h" +#import "SendReportModel.h" +#import "QuesstionDetailLookFileViewController.h" +#import "TUIGroupChatViewController.h" +#import "UIImage+RoundedCorner.h" +#import +#import "LookFileDataModel.h" +#import "PopupView.h" +#import "CustomTUIBaseMessageController.h" +#import "DoctorHomePageDetailVC.h" + + +//自定义map +#define BussinessID_CustomMap @"TIMLocationElem" +//自定义评论 +#define BussinessID_CustomReview @"CustomReview" +//自定义档案 +#define BussinessID_CustomHealthData @"archives" +//自定义医生名片 +#define BussinessID_CustomDoctorCard @"business_card" + + +@class TUIChatDataProvider; + +@interface ChatViewController () + +@property (nonatomic, strong) TUIC2CChatViewController *vc; +@property (nonatomic, strong) TUIGroupChatViewController * groupvc; + +@property (nonatomic, strong) evaluationPopView * popView; + +@property (nonatomic, assign) CGFloat starNumber; +@property (nonatomic, strong) NSString * evlationConnte; +@property (nonatomic, strong) PopupView *popupView; +@property (nonatomic, strong) UIView *backgroundView; +@property (nonatomic, strong) NSString * userID; + +//定位相关 +@property (nonatomic, strong) CLLocationManager *locationManager; + +@property (nonatomic, copy) NSString * doctorCardID; + +@end + +@implementation ChatViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.title = self.navTitle; + // self 为 id + self.view.backgroundColor = CViewBgColor; + + [self addNavigationItemWithImageNames:@[@"sangedian"] isLeft:false target:self action:@selector(foundMoreHistory) tags:@[@"1000"]]; + // 启用侧滑返回手势 +// self.navigationController.interactivePopGestureRecognizer.delegate = self; +// self.navigationController.interactivePopGestureRecognizer.enabled = YES; +// +// // 创建自定义手势识别器 +// UIScreenEdgePanGestureRecognizer *panGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; +// panGesture.edges = UIRectEdgeLeft; +// [self.view addGestureRecognizer:panGesture]; + + [[V2TIMManager sharedInstance] addSimpleMsgListener:self]; + [[TUICallEngine createInstance] addObserver:self]; + [[V2TIMManager sharedInstance] addConversationListener:self]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowAction:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideAction:) name:UIKeyboardWillHideNotification object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendReportMessage:) name:@"sendReport" object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendHealthMessage:) name:@"sendHealth" object:nil]; + + [self addNavigationItemWithImageNames:@[@"whiteBack_icon"] isLeft:YES target:self action:@selector(backUp) tags:@[@200]]; + + TUIChatConversationModel *data = [[TUIChatConversationModel alloc] init]; + HQUserInfo * user = [HQCommonUtils keyedUnarchiverWithKey:LoginUserInfo]; + + + // TUIC2CChatViewController + TUIC2CChatViewController *vc = [[TUIC2CChatViewController alloc] init]; + //发送 + self.vc = vc; + vc.messageController.delegate = self; + [vc setConversationData:data]; + // 显示翻译按钮 +// TUIChatConfig.defaultConfig.enableTextTranslation = YES; + //不显示视频和语音 + [TUIChatConfig defaultConfig].enableVideoCall = self.isVideo; // YES:开启,NO:关闭 + [TUIChatConfig defaultConfig].enableAudioCall = self.isVideo; // YES:开启,NO:关闭 + [TUIChatConfig defaultConfig].backgroudColor = CViewBgColor; + + //是否显示发送报告 + [TUIChatConfig defaultConfig].enableSendReportCall = true; + [TUIChatConfig defaultConfig].enableSendHealthDataCall = self.eablehaveHelathData; + [TUIChatConfig defaultConfig].enableMapCall = self.eableMapTools; + [TUIChatConfig defaultConfig].isEvealCell = self.isEveal; // YES:开启,NO:关闭 + + + TUIConfig *config = [TUIConfig defaultConfig]; + config.avatarType = TAvatarTypeRounded; + // 修改默认头像 + if ([user.sex integerValue] == 1) { //女[] + config.defaultAvatarImage = [UIImage imageNamed:@"heard_woman"]; + }else + { + config.defaultAvatarImage = [UIImage imageNamed:@"heard_man"]; + } + + // 修改默认群组头像 + // 禁用群组九宫格头像 + config.enableGroupGridAvatar = NO; + + // 设置发送文字消息的字体和颜色 +// [TUITextMessageCellData setOutgoingTextFont:[UIFont systemFontOfSize:15]]; +// [TUITextMessageCellData setOutgoingTextColor:[UIColor blackColor]]; +// // 设置接收文字消息的字体和颜色 +// [TUITextMessageCellData setIncommingTextFont:[UIFont systemFontOfSize:15]]; +// [TUITextMessageCellData setIncommingTextColor:[UIColor blueColor]]; + UIImage *defaultImage = [[TUIImageCache sharedInstance] getResourceFromCache:TUIChatImagePath(@"SenderTextNodeBkgHL")]; + UIImage * gOutgoingHighlightedBubble = + [TUIChatDynamicImage(@"chat_bubble_send_img", defaultImage) resizableImageWithCapInsets:UIEdgeInsetsFromString(@"{12,12,12,12}") + resizingMode:UIImageResizingModeStretch]; + UIImage *whiteImage = [[TUIImageCache sharedInstance] getResourceFromCache:TUIChatImagePath(@"SenderTextNodeBkgHL")]; + + + UIImage * whiteimg = [[UIImage imageWithColor:KWhiteColor] resizableImageWithCapInsets:UIEdgeInsetsFromString(@"{12,12,12,12}") resizingMode:UIImageResizingModeStretch]; + UIImage *roundedImage = [whiteimg roundCornersWithRadius:20.0f]; + + // 设置发送气泡,包括普通状态和选中状态 + [TUIBubbleMessageCellData setOutgoingBubble:roundedImage]; + [TUIBubbleMessageCellData setOutgoingHighlightedBubble:roundedImage]; + + // 设置接收气泡,包括普通状态和选中状态 + [TUIBubbleMessageCellData setIncommingBubble:gOutgoingHighlightedBubble]; + [TUIBubbleMessageCellData setIncommingHighlightedBubble:gOutgoingHighlightedBubble]; + + // 把 TUIC2CChatViewController 添加到自己的 ViewController + + if( self.isGroupID == false) { + data.userID = self.chatID; + TUIC2CChatViewController *vc = [[TUIC2CChatViewController alloc] init]; + self.vc = vc; + vc.messageController.delegate = self; + [vc setConversationData:data]; + [self addChildViewController:vc]; + self.view.backgroundColor = UIColorHex(#EEEEEE); + [self.view addSubview:vc.view]; + vc.needScrollToBottom = true; + vc.customDelegate = self; + } + else + { + data.groupID = self.chatID; + TUIGroupChatViewController * vc = [[TUIGroupChatViewController alloc] init]; + self.groupvc = vc; + vc.messageController.delegate = self; + [vc setConversationData:data]; + [self addChildViewController:vc]; + self.view.backgroundColor = UIColorHex(#EEEEEE); + [self.view addSubview:vc.view]; + vc.needScrollToBottom = true; + vc.customDelegate = self; + + } +// self.view.backgroundColor = UIColorHex(#EEEEEE); + if ([self.tfNew integerValue] == 1) { + + [ESCTUIManager sendGroupVideo:self.chatID withUserIdList:self.member]; + } + //主动发送一条消息 + //如果点击跳过进入 不操作 非跳过 发送健康档案 2=非跳过 + if (self.JumpType == 2 && self.questionType == 2) { + + [self sendQuestionInfoMessage]; + } + + if (self.endRecordType == 100) { + if( self.isGroupID == false) { + self.vc.inputController.view.hidden = YES; + }else + { + self.groupvc.inputController.view.hidden = YES; + } + + } +// [self ChatsendReview]; + +} + + +- (void)foundMoreHistory { + + + [EasyTextView showInfoText:@"功能待完善"]; + +// if (!self.popupView) { +// CGFloat popupWidth = 80.0; +// CGFloat popupHeight = 40.0; +// CGRect popupFrame = CGRectMake((self.view.bounds.size.width - popupWidth) - kRealValue(15), 10, popupWidth, popupHeight); +// +// // 创建透明背景视图 +// self.backgroundView = [[UIView alloc] initWithFrame:self.view.bounds]; +// self.backgroundView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5]; +// [self.view addSubview:self.backgroundView]; +// +// // 添加点击手势以隐藏弹窗 +// UITapGestureRecognizer *backgroundTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hidePopup)]; +// [self.backgroundView addGestureRecognizer:backgroundTapGesture]; +// +// self.popupView = [[PopupView alloc] initWithFrame:popupFrame]; +// __weak typeof(self) weakSelf = self; +// self.popupView.tapHandler = ^{ +// [weakSelf handlePopupTap]; +// }; +// +// [self.view addSubview:self.popupView]; +// } else { +// self.popupView.hidden = NO; +// self.backgroundView.hidden = NO; +// } +} +#pragma mark:医生详情 +- (void)chatSelectedHeardImg:(TUIMessageCell *)cell { + if (!cell.messageData.innerMessage.isSelf) + { + NSString * userID = cell.messageData.innerMessage.sender; + self.userID = userID; + [self getIsSmallHelp:userID]; + + } + +} + +- (void)getIsSmallHelp:(NSString *)userid { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:userid forKey:@"helpId"]; + JKCQAPI * smallApi = [[JKCQAPI alloc] init:self tag:@"smallAPI" NeedToken:@""]; + [smallApi GetisSmallHelp:parmDic]; + +} + +- (void)hidePopup { + self.popupView.hidden = YES; + self.backgroundView.hidden = YES; +} + +- (void)handlePopupTap { + NSLog(@"PopupView tapped"); + [self hidePopup]; + CustomTUIBaseMessageController * customVC = [[CustomTUIBaseMessageController alloc] init]; + customVC.groupID = self.chatID; + [self.navigationController pushViewController:customVC animated:YES]; +} + + +-(void)backUp { + + [self.navigationController popViewControllerAnimated:YES]; +} + +#pragma mark:跳转到地图选择页 +- (void)jumpChatMapView { + + self.locationManager = [[CLLocationManager alloc] init]; + self.locationManager.delegate = self; + + +} + +#pragma mark:结束咨询 + +- (void)sendChatEndQuestionAction { + + ////1 应急 2 图文咨询 3 音视频咨询 小助手 + if (self.questionType == 1) { + + } + if (self.questionType == 2) { + [self showMBProgressHUDWithString:@"正在结束本次会话" autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:self.pictureEnd_id forKey:@"id"]; + JKCQAPI * endApi = [[JKCQAPI alloc] init:self tag:@"ENDPICTUREAPI" NeedToken:@""]; + [endApi GetEndPictureEndIMQuestion:parmDic]; + } + if (!ValidStr(self.smallHelp_id)) { + [self showMBProgressHUDWithString:@"正在结束本次会话" autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:self.smallHelp_id forKey:@"id"]; + JKCQAPI * endApi = [[JKCQAPI alloc] init:self tag:@"ENDPICTUREAPI" NeedToken:@""]; + [endApi GetEndPictureEndIMQuestion:parmDic]; + } +} + +#pragma mark:发送健康档案 + +//主动发一条消息:健康档案 带联系人数据 +- (void)sendQuestionInfoMessage { + //直接请求档案详情 + [self getFileDetail]; + +} + +- (void)getFileDetail { + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + if (!ValidStr(self.dangan_id) ) { + [parmDic setObject:self.dangan_id forKey:@"id"]; + } + + JKCQAPI * upApi = [[JKCQAPI alloc] init:self tag:@"FILEDATA" NeedToken:@""]; + + [upApi GetLookModficalMemberShipFileData:parmDic]; + +} + +- (void)questionChatSendHealthData { + SendHealthDataViewController * senVC = [[SendHealthDataViewController alloc] init]; + if ([self.kuaisuzixun intValue] == 1) { + senVC.memberId_id = @""; + }else + { + senVC.memberId_id = self.disModel.memberId_id; + } + if (!ValidStr(self.medicalRecordsId)) //我的咨询跳转来的 + { + senVC.memberId_id = self.medicalRecordsId; + } + + [self.navigationController pushViewController:senVC animated:YES]; + + +} +- (void)lookLocationDetail:(TUIMessageCell *)cel { + +// DLog(@"%@",cel.messageData.innerMessage.locationElem.longitude); + + CurrentLocationViewController * currVC = [[CurrentLocationViewController alloc] init]; + currVC.longitude = cel.messageData.innerMessage.locationElem.longitude; + currVC.latitude = cel.messageData.innerMessage.locationElem.latitude; + [self.navigationController pushViewController:currVC animated:YES]; + +} +#pragma mark:发送个人名片 +- (void)ChatsendDoctorIDCard { + NSDictionary * parmdic = @{BussinessID:BussinessID_CustomDoctorCard}; + NSData * messagedata = [NSJSONSerialization dataWithJSONObject:parmdic options:0 error:nil]; + V2TIMMessage * message = [[V2TIMManager sharedInstance] createCustomMessage:messagedata]; + if( self.isGroupID == false) { + [self.vc sendMessage:message]; + }else + { + [self.groupvc sendMessage:message]; + } +} + + +#pragma mark:发送体检报告 +- (void)ChatsendReview { + + +} + + +- (void)onRecvC2CCustomMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info customData:(NSData *)data +{ + id myResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; + + + +} + +- (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData *)data { + + id myResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; + + + if ([myResult isKindOfClass:[NSDictionary class]]) { + + NSDictionary *response = (NSDictionary *)myResult; + SendReportModel * model = [SendReportModel modelWithDictionary:response]; + + if ([model.businessID isEqualToString:@"system"]) { + if( self.isGroupID == false) { + self.vc.inputController.view.hidden = YES; + }else + { + self.groupvc.inputController.view.hidden = YES; + } + } + } + + + +} +/// 收到 C2C 文本消息 +- (void)onRecvC2CTextMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info text:(NSString *)text{ + + + +} +#pragma mark:发起评价 +- (void)chatevlationDoctorStarView:(TUIMessageCell *)cell{ +// DLog(@"-----------%@",@"我是评价"); + + if ([cell isKindOfClass:EndSystemSoSCell.class]) { + EndSystemSoSCell * endCell = cell; + if (endCell.reviewBtn.hidden == false) { + evaluationPopView * popView = [[evaluationPopView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]; + self.popView = popView; + popView.popBlock = ^(CGFloat starNumber, BOOL isSecrect, NSString * _Nonnull evaluationString) { + NSString * niming = isSecrect == YES? @"1":@"0"; + self.starNumber = starNumber; + self.evlationConnte = evaluationString; + [self doctorSourceWithStarNumaber:starNumber withContext:evaluationString isKnow:niming]; + }; + [[UIApplication sharedApplication].keyWindow addSubview:popView]; + } + } + + if ([cell isKindOfClass:DoctorIDCardMessageCell.class]) { + + DoctorIDCardMessageCell * endCell = cell; + //7月6日新增 点击判断 + + // 获取当前日期和时间 + NSDate *currentDate = endCell.messageData.innerMessage.timestamp; + + // 获取自1970年1月1日以来的时间间隔(以秒为单位) + NSTimeInterval timeInterval = [currentDate timeIntervalSince1970]; + + // 将时间间隔转换为10位时间戳 + NSInteger tenDigitTimestamp = (NSInteger)timeInterval; + + // 打印结果 + [self getDocotorInfo:tenDigitTimestamp]; + + + self.doctorCardID = endCell.cardId; + + + } + + if ([cell isKindOfClass:healthDataCustomCell.class]) { + healthDataCustomCell * healthCell = cell; + + QuesstionDetailLookFileViewController * experVC= [[QuesstionDetailLookFileViewController alloc] init]; + experVC.danganID = healthCell.fileId; + [self.navigationController pushViewController:experVC animated:YES]; + } +} + +- (void)getDocotorInfo:(long)sendTime{ + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(sendTime) forKey:@"sendTime"]; + + JKCQAPI * endApi = [[JKCQAPI alloc] init:self tag:@"TIME" NeedToken:@""]; + [endApi GetDoctoresExpireTime:parmDic]; + +} + +#pragma mark:网络请求 +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"ENDSOSAPI"]) + { + [self hiddenAllMBProgressHUD]; + NSDictionary * parmDic = response; + if( self.isGroupID == false) { + self.vc.inputController.view.hidden = YES; + }else + { + self.groupvc.inputController.view.hidden = YES; + } + } + if ([tag isEqualToString:@"TIME"]) + { + NSString * isExpired =[NSString stringWithFormat:@"%@",response] ; + + if ([isExpired integerValue]== 0) { + ExpertMainViewController * experVC= [[ExpertMainViewController alloc] init]; + experVC.doctorId = self.doctorCardID; + [self.navigationController pushViewController:experVC animated:YES]; + }else + { + [EasyTextView showErrorText:@"医生信息已过期"]; + } + + } + + if ([tag isEqualToString:@"ENDPICTUREAPI"]) { + [self hiddenAllMBProgressHUD]; + if( self.isGroupID == false) { + self.vc.inputController.view.hidden = YES; + }else + { + self.groupvc.inputController.view.hidden = YES; + } + } + if ([tag isEqualToString:@"DoctorSource"]) { + [EasyTextView showSuccessText:response]; + [self hiddenAllMBProgressHUD]; + [self.popView removeFromSuperview]; + [self backUp]; + + } + + if ([tag isEqualToString:@"loginIMAPI"]) { + [self hiddenAllMBProgressHUD]; + NSDictionary * pamrDic = response; + + IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; + + IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; + iminfoModel.IMInfo = pamrDic; + [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; + + // 1. 从即时通信 IM 控制台获取应用 SDKAppID。 + [ESCTUIManager loginInitTUISDKAppidWith:[model.sdkAppId intValue] UserID:model.userId userSig:model.userSig]; + } + + if ([tag isEqualToString:@"FILEDATA"]) { + + NSDictionary * parmDic = response; + LookFileDataModel * model = [LookFileDataModel modelWithDictionary:parmDic]; + + [self sendFileDetail:model]; + + + } + if ([tag isEqualToString:@"smallAPI"]) { + + bool isSmallHelp = [response boolValue]; + + + if (isSmallHelp == true) { + + DoctorHomePageDetailVC * vc = [[DoctorHomePageDetailVC alloc] init]; + vc.userID = self.userID; + [self.navigationController pushViewController:vc animated:YES]; + } + } + } + + +- (void)sendFileDetail:(LookFileDataModel *)model { + NSString * sexString; + NSString * ageString; + NSString * nameString; + NSString * memberId; + if (self.disModel) { //顶部个人信息 + // //性别 + sexString = [self.disModel.gender integerValue] == 1 ?@"女":@"男"; + //年龄 + ageString = [NSString stringWithFormat:@"%@",self.disModel.age]; + //姓名 + nameString = [NSString stringWithFormat:@"%@",self.disModel.name]; + //id + memberId = [NSString stringWithFormat:@"%@",self.disModel.memberId_id]; + } + //档案信息 + NSString * tf_id; + if (self.JumpType == 1) { + tf_id = @""; + } + else{ + tf_id = model.file_id; + } + //症状描述 + NSString * siksDesString = model.medicalDescribe; + //图片数组 + + NSMutableArray * imageArray = [[NSMutableArray alloc] init]; + + + NSString *imageString = model.image; + NSArray *listImageArray; + + if (imageString.length == 0) { + // 如果字符串为空,直接返回空数组 + listImageArray = @[]; + } else { + // 移除末尾的逗号 + if ([imageString hasSuffix:@","]) { + imageString = [imageString substringToIndex:imageString.length - 1]; + } + + // 分割字符串并过滤空字符串 + listImageArray = [[imageString componentsSeparatedByString:@","] + filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != ''"]]; + } + +// NSArray * listImageArray = [model.image componentsSeparatedByString:@","]; + + for (int i = 0 ; i < listImageArray.count; i ++) { + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,listImageArray[i]]; + + + NSString * str1 = @"\\"; + + photo = [photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:encodedString3 forKey:@"bigImageUrl"]; + [parmDic setObject:encodedString3 forKey:@"thumbnailUrl"]; + + [imageArray addObject:parmDic]; + + } + + + NSDictionary * parmdic = @{BussinessID:BussinessID_CustomHealthData, + @"gender":sexString, + @"age":ageString, + @"name":nameString, + @"symptomDescription":siksDesString, + @"imageList":imageArray, + @"archivesId":tf_id}; + NSData * messagedata = [NSJSONSerialization dataWithJSONObject:parmdic options:0 error:nil]; + V2TIMMessage * message = [[V2TIMManager sharedInstance] createCustomMessage:messagedata]; + if( self.isGroupID == false) { + [self.vc sendMessage:message]; + }else + { + [self.groupvc sendMessage:message]; + } + + +} + +- (void)doctorSourceWithStarNumaber:(CGFloat)starNumer withContext:(NSString *)connet isKnow:(NSString *)isNiming{ + + [self showMBProgressHUDWithString:@"评价中,请稍候..." autoHidden:NO]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:@(starNumer) forKey:@"score"]; + [parmDic setObject:connet forKey:@"context"]; + [parmDic setObject:self.pictureEnd_id forKey:@"sessionId"]; + [parmDic setObject:isNiming forKey:@"tfUnknow"]; + + JKCQAPI * endApi = [[JKCQAPI alloc] init:self tag:@"DoctorSource" NeedToken:@""]; + [endApi PostQustionDoctorScore:parmDic]; + +} +- (void)sendReportMessage:(NSNotification *)note { + + + +} + +- (void)sendHealthMessage:(NSNotification *)note { + + diseaseModel * model = note.object; + if (model) { + //性别 + NSString * sexString = [self.disModel.gender integerValue] == 1 ?@"女":@"男"; + //年龄 + NSString * ageString = [NSString stringWithFormat:@"%@",model.age]; + //姓名 + NSString * nameString = [NSString stringWithFormat:@"%@",model.name]; + //id + NSString * memberId = [NSString stringWithFormat:@"%@",model.tfper_id]; + + //症状描述 + NSString * siksDesString = @""; + //图片数组 + NSMutableArray * imageArray = [[NSMutableArray alloc] init]; + + NSString *imageString = model.image; + NSArray *listImageArray; + + if (imageString.length == 0) { + // 如果字符串为空,直接返回空数组 + listImageArray = @[]; + } else { + // 移除末尾的逗号 + if ([imageString hasSuffix:@","]) { + imageString = [imageString substringToIndex:imageString.length - 1]; + } + + // 分割字符串并过滤空字符串 + listImageArray = [[imageString componentsSeparatedByString:@","] + filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != ''"]]; + } + for (int i = 0 ; i < listImageArray.count; i ++) { + + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,listImageArray[i]]; + + + NSString * str1 = @"\\"; + + photo = [photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:encodedString3 forKey:@"bigImageUrl"]; + [parmDic setObject:encodedString3 forKey:@"thumbnailUrl"]; + + [imageArray addObject:parmDic]; + } + siksDesString = model.medicalDescribe; + + + NSDictionary * parmdic = @{BussinessID:BussinessID_CustomHealthData,@"gender":sexString,@"age":ageString,@"name":nameString,@"symptomDescription":siksDesString,@"imageList":imageArray,@"archivesId":memberId}; + NSData * messagedata = [NSJSONSerialization dataWithJSONObject:parmdic options:0 error:nil]; + V2TIMMessage * message = [[V2TIMManager sharedInstance] createCustomMessage:messagedata]; + if( self.isGroupID == false) { + [self.vc sendMessage:message]; + }else + { + [self.groupvc sendMessage:message]; + } + } +} +#pragma mark - 键盘处理 + +/** + * 键盘即将隐藏 + */ +- (void)keyboardWillHideAction:(NSNotification *)note +{ + + // 1.键盘弹出需要的时间 + CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + + // 2.动画 + [UIView animateWithDuration:duration animations:^{ + self.popView.evaluationView.frame = CGRectMake(0, kScreenHeight - kRealValue(327), kScreenWidth, kRealValue(327)); + }]; +} + +/** + * 键盘即将弹出 + */ +- (void)keyboardWillShowAction:(NSNotification *)note +{ + + // 1.键盘弹出需要的时间 + CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + + // 2.动画 + [UIView animateWithDuration:duration animations:^{ + // 取出键盘高度 + CGRect keyboardF = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + CGFloat keyboardH = keyboardF.size.height - 40; +// if (_ThreeInch) { +// self.view.transform = CGAffineTransformMakeTranslation(0, - keyboardH); +// } else { +// self.view.transform = CGAffineTransformMakeTranslation(0, - 50); +// } + self.popView.evaluationView.frame = CGRectMake(0, kScreenHeight - kRealValue(327) - keyboardH, kScreenWidth, kRealValue(327)); + + }]; +} + +- (void)loginImAccount { + + JKCQAPI * proctocolApi = [[JKCQAPI alloc] init:self tag:@"loginIMAPI" NeedToken:nil]; + [proctocolApi GetIMLoginAccount:nil]; + +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + if( self.isGroupID == false) { + self.vc.needScrollToBottom = true; + } + else + { + + self.groupvc .needScrollToBottom = true; + } +} +/* + #pragma mark - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. + } + */ + +//在线时票据过期:此时您需要生成新的 userSig,并再次重新调用初始化。 +- (void)onKickedOffline { + + [HQCommonUtils keyedArchiverWithData:nil key:LoginUserInfo]; + [ESCTUIManager outLoginTUISDK]; + KPostNotification(KNotificationLoginStateChange, @NO); + +} + +- (void)updateConversation:(NSArray *)convList { + +} + + +- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { + switch (status) { + case kCLAuthorizationStatusNotDetermined: + // 用户还未决定是否授权 + [self handleLocationServicesRestricted]; + break; + case kCLAuthorizationStatusRestricted: + // 位置服务被限制(例如家长控制) + [self handleLocationServicesRestricted]; + break; + case kCLAuthorizationStatusDenied: + // 用户拒绝了位置权限 + [self showAlertToOpenSettings]; + break; + case kCLAuthorizationStatusAuthorizedAlways: + case kCLAuthorizationStatusAuthorizedWhenInUse: + // 用户授权了位置权限 + [self handleLocationServicesAuthorized]; + break; + default: + } +} + +- (void)handleLocationServicesRestricted { + // 处理位置服务受限的情况 + NSLog(@"位置服务被限制"); + [self showAlertToOpenSettings]; +} + +- (void)handleLocationServicesDenied { + // 处理位置服务被拒绝的情况 + NSLog(@"位置服务被拒绝"); + [self showAlertToOpenSettings]; +} + + + +- (void)handleLocationServicesDisabled { + // 处理设备的定位服务被禁用的情况 + NSLog(@"设备的定位服务被禁用"); + [self showAlertToOpenSettings]; +} + +- (void)showAlertToOpenSettings { + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"定位服务已关闭" + message:@"请在设置中启用定位服务" + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction *settingsAction = [UIAlertAction actionWithTitle:@"去设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + if ([[UIApplication sharedApplication] canOpenURL:settingsURL]) { + [[UIApplication sharedApplication] openURL:settingsURL options:@{} completionHandler:nil]; + } + }]; + + UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]; + + [alertController addAction:settingsAction]; + [alertController addAction:cancelAction]; + + [self presentViewController:alertController animated:YES completion:nil]; +} + +- (void)handleLocationServicesAuthorized { + // 处理授权成功的情况(例如,开始更新位置信息) + ChatMapViewController * mapVC = [[ChatMapViewController alloc] init]; + MJWeakSelf + mapVC.mapBlcok = ^(CLLocationCoordinate2D coordinate) { + V2TIMMessage * message = [[V2TIMManager sharedInstance] createLocationMessage:@"位置" longitude:coordinate.longitude latitude:coordinate.latitude]; + if( self.isGroupID == false) { + [weakSelf.vc sendMessage:message]; + }else + { + [weakSelf.groupvc sendMessage:message]; + } + }; + [self.navigationController pushViewController:mapVC animated:YES]; + + +} + +//// 手势处理方法 +//- (void)handlePanGesture:(UIScreenEdgePanGestureRecognizer *)gesture { +// if (gesture.state == UIGestureRecognizerStateEnded) { +// NSArray *viewControllers = self.navigationController.viewControllers; +// UIViewController *targetViewController = nil; +// +// // 查找导航堆栈中的目标视图控制器 +// for (UIViewController *vc in viewControllers) { +// if ([vc isKindOfClass:[QuestionViewController class]]) { +// targetViewController = vc; +// break; +// } +// } +// +// if (targetViewController) { +// // 如果找到目标视图控制器,则弹出到该视图控制器 +// [self.navigationController popToViewController:targetViewController animated:YES]; +// } else { +// // 如果没有找到目标视图控制器,则返回到上一页 +// [self.navigationController popViewControllerAnimated:YES]; +// } +// } +//} + +//// UIGestureRecognizerDelegate 方法 +//- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { +// // 确保只有在不是根视图控制器时才启用手势 +// return self.navigationController.viewControllers.count > 1; +//} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/ChatMapViewController.h b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/ChatMapViewController.h new file mode 100644 index 0000000..11568d5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/ChatMapViewController.h @@ -0,0 +1,20 @@ +// +// ChatMapViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/5. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^sendUserSoSLocation)(CLLocationCoordinate2D coordinate); + +@interface ChatMapViewController : HQBaseViewController + +@property (nonatomic, copy) sendUserSoSLocation mapBlcok; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/ChatMapViewController.m b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/ChatMapViewController.m new file mode 100644 index 0000000..cb6d73e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/ChatMapViewController.m @@ -0,0 +1,152 @@ +// +// ChatMapViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/5. +// + +#import "ChatMapViewController.h" + +@interface ChatMapViewController () +{ + CLLocationCoordinate2D coordinate; +} +@property (nonatomic, strong) MAMapView *mapView; +@property (nonatomic, strong) AMapSearchAPI *search; +@property (nonatomic, assign) BOOL userFirstLoca; +@end + +@implementation ChatMapViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = false; + self.navigationItem.title = @"选择位置"; + self.view.backgroundColor = KWhiteColor; + // Do any additional setup after loading the view. + [self createUI]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + [self.mapView setCompassImage:[UIImage imageNamed:@"compass"]]; +} + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + // 开启定位 + self.mapView.showsUserLocation = YES; + self.mapView.userTrackingMode = MAUserTrackingModeFollow; +} + +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; + [self.mapView setCompassImage:nil]; +} + +- (void)createUI { + + self.mapView = [[MAMapView alloc] initWithFrame:self.view.bounds]; + self.mapView.zoomLevel = 17; + self.mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + self.mapView.userTrackingMode = MAUserTrackingModeFollow; + [self.view addSubview:self.mapView]; + self.search.delegate = self; + self.mapView.delegate = self; + [self addNavigationItemWithTitles:@[@"发送"] isLeft:NO target:self action:@selector(sendMapmessate) tags:@[@"100"]]; + +} + +- (void)sendMapmessate { + + if (self.mapBlcok) { + self.mapBlcok(coordinate); + } + [self.navigationController popViewControllerAnimated:YES]; + + +} + +#pragma mark - MAMapviewDelegate +- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id)annotation +{ + if ([annotation isKindOfClass:[MAPointAnnotation class]]) + { + + } + + return nil; +} + +#pragma mark - MAMapViewDelegate + +- (void)mapViewRequireLocationAuth:(CLLocationManager *)locationManager +{ + [locationManager requestAlwaysAuthorization]; +} + + +- (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated +{ +} + + +- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation +{ + // 目的是只用第一次定位的数据,即用户的初始位置 + if (self.userFirstLoca == NO) { + self.userFirstLoca = YES; +// self.userFirstCoor = userLocation.location.coordinate; + coordinate = userLocation.location.coordinate; + MAPointAnnotation *ann = [[MAPointAnnotation alloc] init]; + ann.coordinate = userLocation.location.coordinate; + //固定Annotation并放置地图中心点 + ann.lockedToScreen = YES; + ann.lockedScreenPoint = CGPointMake(mapView.center.x, mapView.center.y); + [mapView addAnnotation:ann]; + } +} + +/* 地图移动结束后调用此接口 */ +- (void)mapView:(MAMapView *)mapView mapDidMoveByUser:(BOOL)wasUserAction +{ + // 将指定view坐标系的坐标转换为经纬度 + CLLocationCoordinate2D moveCoor = [mapView convertPoint:CGPointMake(mapView.center.x, mapView.center.y-64) toCoordinateFromView:mapView]; + + // 通过坐标点得到经纬度,从而进行反地理编码 + AMapReGeocodeSearchRequest *rego = [[AMapReGeocodeSearchRequest alloc] init]; + // 是否返回扩展信(因为我们需要得到附近地理位置信息,所以设为YES) + rego.requireExtension = YES; + rego.location = [AMapGeoPoint locationWithLatitude:moveCoor.latitude longitude:moveCoor.longitude]; + [self.search AMapReGoecodeSearch:rego]; +} + +/* 逆地理编码查询回调函数 */ +- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response +{ + // reGeodeVC就是一个简单的tableView布局,数据来源就是response.regeocode.pois +} + +/* 这个是reGeodeVC点击tableViewCell的回调 */ +#pragma mark - ReGeocodeDelegate +-(void)selectAMapAPI:(AMapPOI *)poi +{ + // 将地图的中心点移至poi点 + [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(poi.location.latitude, poi.location.longitude) animated:YES]; +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/CurrentLocationViewController.h b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/CurrentLocationViewController.h new file mode 100644 index 0000000..2ef951f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/CurrentLocationViewController.h @@ -0,0 +1,21 @@ +// +// CurrentLocationViewController.h +// healthQuestion +// +// Created by 仁康信息 on 2023/8/15. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface CurrentLocationViewController : HQBaseViewController + +@property (nonatomic, assign) double longitude; + +@property (nonatomic, assign) double latitude; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/CurrentLocationViewController.m b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/CurrentLocationViewController.m new file mode 100644 index 0000000..2097fd0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/CurrentLocationViewController.m @@ -0,0 +1,138 @@ +// +// CurrentLocationViewController.m +// healthQuestion +// +// Created by 仁康信息 on 2023/8/15. +// + +#import "CurrentLocationViewController.h" + +@interface CurrentLocationViewController () +{ + CLLocationCoordinate2D coordinate; +} +@property (nonatomic, strong) MAMapView *mapView; +@property (nonatomic, strong) AMapSearchAPI *search; +@property (nonatomic, assign) BOOL userFirstLoca; + +@end + +@implementation CurrentLocationViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = false; + self.navigationItem.title = @"我的位置"; + self.view.backgroundColor = KWhiteColor; + // Do any additional setup after loading the view. + [self createUI]; +} + + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + +// [self.mapView setCompassImage:[UIImage imageNamed:@"pin"]]; +} + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + +} + +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; + [self.mapView setCompassImage:nil]; +} + +- (void)createUI { + + self.mapView = [[MAMapView alloc] initWithFrame:self.view.bounds]; + self.mapView.zoomLevel = 17; + self.mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + // 设置中心点时带动画效果 + [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(self.latitude, self.longitude) animated:YES]; + + [self.view addSubview:self.mapView]; + self.search.delegate = self; + self.mapView.delegate = self; + + MAPointAnnotation *pointAnnotation = [[MAPointAnnotation alloc] init]; + pointAnnotation.coordinate = CLLocationCoordinate2DMake(self.latitude, self.longitude); + [_mapView addAnnotation:pointAnnotation]; + +} + +#pragma mark - MAMapviewDelegate +- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id)annotation +{ + if ([annotation isKindOfClass:[MAPointAnnotation class]]) + { + static NSString *pointReuseIndentifier = @"pointReuseIndentifier"; + MAPinAnnotationView*annotationView = (MAPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:pointReuseIndentifier]; + if (annotationView == nil) + { + annotationView = [[MAPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pointReuseIndentifier]; + } + annotationView.canShowCallout= YES; //设置气泡可以弹出,默认为NO + annotationView.animatesDrop = YES; //设置标注动画显示,默认为NO + annotationView.draggable = YES; //设置标注可以拖动,默认为NO + annotationView.pinColor = MAPinAnnotationColorPurple; + annotationView.centerOffset = CGPointMake(0, -18); +// annotationView.image = [UIImage imageNamed:@"pin"]; + return annotationView; + } + return nil; +} +#pragma mark - MAMapViewDelegate + +- (void)mapViewRequireLocationAuth:(CLLocationManager *)locationManager +{ + [locationManager requestAlwaysAuthorization]; +} + + +- (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated +{ +} + + +- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation +{ + +} + +/* 地图移动结束后调用此接口 */ +- (void)mapView:(MAMapView *)mapView mapDidMoveByUser:(BOOL)wasUserAction +{ + +} + +/* 逆地理编码查询回调函数 */ +- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response +{ + // reGeodeVC就是一个简单的tableView布局,数据来源就是response.regeocode.pois +} + +/* 这个是reGeodeVC点击tableViewCell的回调 */ +#pragma mark - ReGeocodeDelegate +-(void)selectAMapAPI:(AMapPOI *)poi +{ + // 将地图的中心点移至poi点 + [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(self.latitude, self.longitude) animated:YES]; +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/SendHealthDataViewController.h b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/SendHealthDataViewController.h new file mode 100644 index 0000000..fdef8c7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/SendHealthDataViewController.h @@ -0,0 +1,18 @@ +// +// SendHealthDataViewController.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SendHealthDataViewController : HQBaseViewController + +@property (nonatomic, strong) NSString * memberId_id; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/SendHealthDataViewController.m b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/SendHealthDataViewController.m new file mode 100644 index 0000000..78cd308 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Controller/SendHealthDataViewController.m @@ -0,0 +1,110 @@ +// +// SendHealthDataViewController.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import "SendHealthDataViewController.h" +#import "SendHealthDataTable.h" +#import "QuestionDiseaseInfoModel.h" + + +@interface SendHealthDataViewController () + +@property (nonatomic, strong) SendHealthDataTable * homeTable; + +@property (nonatomic, strong) NSMutableArray * dataArray; + +@end + +@implementation SendHealthDataViewController + +- (NSMutableArray *)dataArray { + + if (!_dataArray) { + _dataArray = [[NSMutableArray alloc] init]; + } + return _dataArray; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = KWhiteColor; + self.navigationItem.title = @"健康档案"; + [self createUI]; + [self createData]; +} + +- (void)createUI { + + self.homeTable = [[SendHealthDataTable alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight) style:UITableViewStyleGrouped]; + MJWeakSelf; + self.homeTable.healthBlcok = ^(diseaseModel * _Nonnull phyModel) { + KPostNotification(@"sendHealth", phyModel); + [weakSelf.navigationController popViewControllerAnimated:YES]; + }; + [self.view addSubview:self.homeTable]; + +} + +- (void)createData { + + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + + [parmDic setObject:self.memberId_id forKey:@"memberId"]; + + JKCQAPI * api = [[JKCQAPI alloc] init:self tag:@"HEALTHDATA" NeedToken:nil]; + + [api getsendHealthDataReportAPI:parmDic]; +} + + +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + + [self hiddenAllMBProgressHUD]; + +} +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"HEALTHDATA"]) { + + NSArray * array = response; + + for (NSDictionary * parm in array) { + + diseaseModel * model = [diseaseModel modelWithDictionary:parm]; + + [self.dataArray addObject:model]; + } + if (self.dataArray.count < 1) { + + EasyAlertView *alertView = [EasyAlertView alertViewWithTitle:@"提示" subtitle:@"暂无健康档案" AlertViewType:AlertViewTypeSystemAlert config:nil]; + [alertView addAlertItem:^EasyAlertItem *{ + + return [EasyAlertItem itemWithTitle:@"确定" type:AlertItemTypeCustom callback:^(EasyAlertView *showview, long index) { + + [self.navigationController popViewControllerAnimated:YES]; + + }]; + }]; + [alertView showAlertView]; + + } + self.homeTable.dataArray = self.dataArray; + } +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctiorIDCardCellData.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctiorIDCardCellData.h new file mode 100644 index 0000000..c988d64 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctiorIDCardCellData.h @@ -0,0 +1,24 @@ +// +// DoctiorIDCardCellData.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/8. +// + +#import "TUIMessageCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctiorIDCardCellData : TUIMessageCellData + +@property (nonatomic, copy) NSString * cardId; +@property (nonatomic, copy) NSString * doctorName; +@property (nonatomic, copy) NSString * organization; +@property (nonatomic, copy) NSString * departmentName; +@property (nonatomic, copy) NSString * doctorTitle; +@property (nonatomic, copy) NSString * doctorHeadImg; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctiorIDCardCellData.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctiorIDCardCellData.m new file mode 100644 index 0000000..b1b5008 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctiorIDCardCellData.m @@ -0,0 +1,44 @@ +// +// DoctiorIDCardCellData.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/8. +// + +#import "DoctiorIDCardCellData.h" + +@implementation DoctiorIDCardCellData + ++ (TUIMessageCellData *)getCellData:(V2TIMMessage *)message{ + NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil]; + DoctiorIDCardCellData *cellData = [[DoctiorIDCardCellData alloc] initWithDirection:message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming]; + cellData.innerMessage = message; + cellData.msgID = message.msgID; +// cellData.lation = [param[@"lation"] floatValue]; + cellData.avatarUrl = [NSURL URLWithString:message.faceURL]; + cellData.doctorName = [NSString stringWithFormat:@"%@",param[@"doctorName"]] ; + cellData.doctorTitle = [NSString stringWithFormat:@"%@",param[@"doctorTitle"]] ; + cellData.doctorHeadImg = [NSString stringWithFormat:@"%@",param[@"doctorHeadImg"]] ; + cellData.cardId = [NSString stringWithFormat:@"%@",param[@"cardId"]] ; + cellData.organization = [NSString stringWithFormat:@"%@",param[@"organization"]] ; + cellData.departmentName = [NSString stringWithFormat:@"%@",param[@"departmentName"]] ; + cellData.avatarUrl = [NSURL URLWithString:message.faceURL]; + return cellData; +} + +- (CGSize)contentSize +{ +// CGRect rect = [self.text boundingRectWithSize:CGSizeMake(300, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } context:nil]; +// CGSize size = CGSizeMake(ceilf(rect.size.width)+1, ceilf(rect.size.height)); +// // 加上气泡边距 +// size.height += 60; +// size.width += 20; +// return size; + + CGFloat textMaxWidth = 245.f; + + CGSize size = CGSizeMake(textMaxWidth, 106); + return size; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctorIDCardMessageCell.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctorIDCardMessageCell.h new file mode 100644 index 0000000..dc1b0e7 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctorIDCardMessageCell.h @@ -0,0 +1,28 @@ +// +// DoctorIDCardMessageCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/8. +// + +#import "TUIMessageCell.h" +#import "DoctiorIDCardCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctorIDCardMessageCell : TUIMessageCell + +@property (nonatomic, strong) UIImageView * doctorImg; +@property (nonatomic, strong) UILabel * doctorNameLabel; +@property (nonatomic, strong) UILabel * jobLabel; +@property (nonatomic, strong) UILabel * hospatilLabel; +@property (nonatomic, strong) UILabel * bottomLabel; +@property (nonatomic, strong) NSString * cardId; +@property (nonatomic, strong) NSDate * msgTime; + +- (void)fillWithData:(DoctiorIDCardCellData *)data; // 绘制 UI + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctorIDCardMessageCell.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctorIDCardMessageCell.m new file mode 100644 index 0000000..9a0f69c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/DoctorCardCell/DoctorIDCardMessageCell.m @@ -0,0 +1,129 @@ +// +// DoctorIDCardMessageCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/8. +// + +#import "DoctorIDCardMessageCell.h" + +@implementation DoctorIDCardMessageCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.container.layer.cornerRadius = 10; + self.container.backgroundColor = KWhiteColor; + self.doctorImg = [[UIImageView alloc] init]; + self.doctorImg.layer.cornerRadius = 10; + [self.container addSubview:self.doctorImg]; + + self.doctorNameLabel = [[UILabel alloc] init]; + self.doctorNameLabel.text = @"张医生"; + self.doctorNameLabel.font = SYSTEMFONT(14); + self.doctorNameLabel.textAlignment = NSTextAlignmentLeft; + [self.container addSubview:self.doctorNameLabel]; + + self.jobLabel = [[UILabel alloc] init]; + self.jobLabel.text = @"张医生"; + self.jobLabel.font = SYSTEMFONT(14); + self.jobLabel.textAlignment = NSTextAlignmentLeft; + [self.container addSubview:self.jobLabel]; + + self.hospatilLabel = [[UILabel alloc] init]; + self.hospatilLabel.text = @"西京医院 - 消化科"; + self.hospatilLabel.font = SYSTEMFONT(14); + self.hospatilLabel.textAlignment = NSTextAlignmentLeft; + [self.container addSubview:self.hospatilLabel]; + + self.bottomLabel = [[UILabel alloc] init]; + self.bottomLabel.text = @"个人名片"; + self.bottomLabel.font = SYSTEMFONT(12); + self.bottomLabel.textColor = UIColorHex(#999999); + self.bottomLabel.textAlignment = NSTextAlignmentLeft; + [self.container addSubview:self.bottomLabel]; +} + + +- (void)fillWithData:(DoctiorIDCardCellData *)data { + + [super fillWithData:data]; + self.doctorNameLabel.text = data.doctorName; + self.jobLabel.text = data.doctorTitle; +// self.messageData = data.timestamp; + if (ValidStr(data.departmentName)) { + + self.hospatilLabel.text = [NSString stringWithFormat:@"%@",data.organization]; + + }else + { + self.hospatilLabel.text = [NSString stringWithFormat:@"%@ - %@",data.organization,data.departmentName]; + + } + self.bottomLabel.text = @"个人名片"; + + self.cardId = data.cardId; + + + if ([data.doctorHeadImg containsString:@"https"]) { + NSString * photo = [NSString stringWithFormat:@"%@",data.doctorHeadImg]; + NSString * str1 = @"\\"; + photo = [photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + [self.doctorImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"doctorNoImage"]]; + + } + else + { + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,data.doctorHeadImg]; + + NSString * str1 = @"\\"; + photo = [photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.doctorImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"doctorNoImage"]]; + } + +} + + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGFloat w = [HQCommonUtils getLengthFromText:self.doctorNameLabel.text andFontSize:14]; + + self.doctorImg.frame = CGRectMake(14, 18, 50, 50); + self.doctorNameLabel.frame = CGRectMake(self.doctorImg.right + 14, 18, w, 20); + self.jobLabel.frame = CGRectMake(self.doctorNameLabel.right + 2, 18, self.container.width - 80, 20); + + self.hospatilLabel.frame = CGRectMake(self.doctorNameLabel.left, self.doctorNameLabel.bottom + 10, self.container.width - 80, 20); + + UIView * linv = [[UIView alloc] initWithFrame:CGRectMake(10, self.doctorImg.bottom + 10, self.container.width, 1)]; + linv.backgroundColor = UIColorHex(#EFEFEF); + [self.container addSubview:linv]; + + self.bottomLabel.frame = CGRectMake(10, linv.bottom + 8, 200, 12); +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCell.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCell.h new file mode 100644 index 0000000..5fa025a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCell.h @@ -0,0 +1,25 @@ +// +// CompleteReviewCell.h +// QinghaiProject +// +// Created by Apple on 2024/5/20. +// + +#import "TUIMessageCell.h" +#import "CompleteReviewCellData.h" +NS_ASSUME_NONNULL_BEGIN + +@interface CompleteReviewCell : TUIMessageCell + + +@property (nonatomic, strong) UILabel * systemTitleLabel; +@property (nonatomic, strong) UILabel * commantLabel; +@property (nonatomic, strong) UIButton * reviewBtn; +//@property (nonatomic, weak)id evlationDelegate; +@property (nonatomic, assign) BOOL isEveal; + +- (void)fillWithData:(CompleteReviewCellData *)data; // 绘制 UI + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCell.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCell.m new file mode 100644 index 0000000..5880995 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCell.m @@ -0,0 +1,90 @@ +// +// CompleteReviewCell.m +// QinghaiProject +// +// Created by Apple on 2024/5/20. +// + +#import "CompleteReviewCell.h" + +@implementation CompleteReviewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + + + [self createUI]; + + } + + return self; +} + +- (void)createUI { + + self.container.layer.cornerRadius = 10; + self.container.backgroundColor = KWhiteColor; + + + self.systemTitleLabel = [[UILabel alloc] init]; + self.systemTitleLabel.text = @"系统消息"; + self.systemTitleLabel.font = SYSTEMFONT(14); + self.systemTitleLabel.textAlignment = NSTextAlignmentLeft; + [self.container addSubview:self.systemTitleLabel]; + + self.commantLabel = [[UILabel alloc] init]; + self.commantLabel.text = @""; + self.commantLabel.font = SYSTEMFONT(14); + self.commantLabel.textAlignment = NSTextAlignmentLeft; + self.commantLabel.numberOfLines = 0; + [self.container addSubview:self.commantLabel]; + + +} + + +- (void)fillWithData:(CompleteReviewCellData *)data { + + [super fillWithData:data]; + + self.systemTitleLabel.text = data.title;; + self.commantLabel.text = data.content; +} + + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGFloat h = [HQCommonUtils getSpaceLabelHeight:self.commantLabel withStr:self.commantLabel.text withFont:[UIFont systemFontOfSize:14] withWidth:self.container.width - 14 withLineSpacing:2]; + + self.systemTitleLabel.frame = CGRectMake(14, 18, 245 - 28, 20); + self.commantLabel.frame = CGRectMake( 14, self.systemTitleLabel.bottom + 10, 245 - 28, h); + self.reviewBtn.layer.cornerRadius = 12; + self.reviewBtn.layer.masksToBounds = YES; + self.reviewBtn.frame = CGRectMake(self.container.width/2 - 30, self.commantLabel.bottom + 14, 60, 30); + +} + +- (void)evlationDoctor { + + if ([self.delegate respondsToSelector:@selector(evlationDoctorStarView)]) { + + [self.delegate evlationDoctorStarView]; + } + +} +@end + diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCellData.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCellData.h new file mode 100644 index 0000000..2ab043b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCellData.h @@ -0,0 +1,20 @@ +// +// CompleteReviewCellData.h +// QinghaiProject +// +// Created by Apple on 2024/5/20. +// + +#import "TUIMessageCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface CompleteReviewCellData : TUIMessageCellData + +@property (nonatomic, copy) NSString * title; +@property (nonatomic, copy) NSString * content; +@property (nonatomic, assign) long type; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCellData.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCellData.m new file mode 100644 index 0000000..42b2dc9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/CompleteReviewCellData.m @@ -0,0 +1,42 @@ +// +// CompleteReviewCellData.m +// QinghaiProject +// +// Created by Apple on 2024/5/20. +// + +#import "CompleteReviewCellData.h" + +@implementation CompleteReviewCellData + ++ (TUIMessageCellData *)getCellData:(V2TIMMessage *)message{ + NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil]; + CompleteReviewCellData *cellData = [[CompleteReviewCellData alloc] initWithDirection:message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming]; + cellData.innerMessage = message; + cellData.msgID = message.msgID; + cellData.title = @"系统消息" ; + cellData.content = @"您已完成评价,无需再次评价" ; + + cellData.avatarUrl = [NSURL URLWithString:message.faceURL]; + return cellData; +} + +- (CGSize)contentSize +{ +// CGRect rect = [self.text boundingRectWithSize:CGSizeMake(300, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } context:nil]; +// CGSize size = CGSizeMake(ceilf(rect.size.width)+1, ceilf(rect.size.height)); +// // 加上气泡边距 +// size.height += 60; +// size.width += 20; +// return size; + UILabel * commanLabel = [[UILabel alloc] init]; + CGFloat h = [HQCommonUtils getSpaceLabelHeight:commanLabel withStr:self.content withFont:[UIFont systemFontOfSize:14] withWidth:245 - 28 withLineSpacing:2]; + CGFloat textMaxWidth = 245.f; + CGFloat textMaxHeight = h + 100; + + CGSize size = CGSizeMake(textMaxWidth, textMaxHeight); + return size; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemCellData.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemCellData.h new file mode 100644 index 0000000..6d9ae6a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemCellData.h @@ -0,0 +1,21 @@ +// +// EndSystemCellData.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/10. +// + +#import "TUIMessageCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface EndSystemCellData : TUIMessageCellData + +@property (nonatomic, copy) NSString * title; +@property (nonatomic, copy) NSString * content; +@property (nonatomic, assign) long type; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemCellData.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemCellData.m new file mode 100644 index 0000000..6ca284f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemCellData.m @@ -0,0 +1,43 @@ +// +// EndSystemCellData.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/10. +// + +#import "EndSystemCellData.h" + +@implementation EndSystemCellData + ++ (TUIMessageCellData *)getCellData:(V2TIMMessage *)message{ + NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil]; + EndSystemCellData *cellData = [[EndSystemCellData alloc] initWithDirection:message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming]; + cellData.innerMessage = message; + cellData.msgID = message.msgID; + cellData.title = [NSString stringWithFormat:@"%@",param[@"title"]] ; + cellData.content = [NSString stringWithFormat:@"%@",param[@"content"]] ; + cellData.type = [param[@"type"] longValue]; + + cellData.avatarUrl = [NSURL URLWithString:message.faceURL]; + return cellData; +} + +- (CGSize)contentSize +{ +// CGRect rect = [self.text boundingRectWithSize:CGSizeMake(300, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } context:nil]; +// CGSize size = CGSizeMake(ceilf(rect.size.width)+1, ceilf(rect.size.height)); +// // 加上气泡边距 +// size.height += 60; +// size.width += 20; +// return size; + UILabel * commanLabel = [[UILabel alloc] init]; + CGFloat h = [HQCommonUtils getSpaceLabelHeight:commanLabel withStr:self.content withFont:[UIFont systemFontOfSize:14] withWidth:245 - 28 withLineSpacing:2]; + CGFloat textMaxWidth = 245.f; + CGFloat textMaxHeight = h + 100; + + CGSize size = CGSizeMake(textMaxWidth, textMaxHeight); + return size; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemSoSCell.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemSoSCell.h new file mode 100644 index 0000000..61e9cab --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemSoSCell.h @@ -0,0 +1,31 @@ +// +// EndSystemSoSCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/10. +// + +#import "TUIMessageCell.h" +#import "EndSystemCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +//@protocol evlationActionProtocol +// +//- (void)evlationDoctorStarView; +// +//@end + +@interface EndSystemSoSCell : TUIMessageCell + +@property (nonatomic, strong) UILabel * systemTitleLabel; +@property (nonatomic, strong) UILabel * commantLabel; +@property (nonatomic, strong) UIButton * reviewBtn; +//@property (nonatomic, weak)id evlationDelegate; +@property (nonatomic, assign) BOOL isEveal; + +- (void)fillWithData:(EndSystemCellData *)data; // 绘制 UI + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemSoSCell.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemSoSCell.m new file mode 100644 index 0000000..728183d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/EndSystemCell/EndSystemSoSCell.m @@ -0,0 +1,126 @@ +// +// EndSystemSoSCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/10. +// + +#import "EndSystemSoSCell.h" + +@implementation EndSystemSoSCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + + + [self createUI]; + + } + + return self; +} + +- (void)createUI { + + self.container.layer.cornerRadius = 10; + self.container.backgroundColor = KWhiteColor; + + + self.systemTitleLabel = [[UILabel alloc] init]; + self.systemTitleLabel.text = @"系统消息"; + self.systemTitleLabel.font = SYSTEMFONT(14); + self.systemTitleLabel.textAlignment = NSTextAlignmentLeft; + [self.container addSubview:self.systemTitleLabel]; + + self.commantLabel = [[UILabel alloc] init]; + self.commantLabel.text = @""; + self.commantLabel.font = SYSTEMFONT(14); + self.commantLabel.textAlignment = NSTextAlignmentLeft; + self.commantLabel.numberOfLines = 0; + [self.container addSubview:self.commantLabel]; + + self.reviewBtn = [[UIButton alloc] init]; + [self.reviewBtn setTitle:@"去评价" forState:UIControlStateNormal]; + [self.reviewBtn setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.reviewBtn.backgroundColor = UIColorHex(#21BEBD); + self.reviewBtn.titleLabel.font = SYSTEMFONT(12); + self.reviewBtn.hidden = false; + [self.reviewBtn addTarget:self action:@selector(evlationDoctor) forControlEvents:UIControlEventTouchUpInside]; + [self.container addSubview:self.reviewBtn]; +} + + +- (void)fillWithData:(EndSystemCellData *)data { + + [super fillWithData:data]; + if ([data.avatarUrl.absoluteString isEqualToString:@""] || data.avatarUrl == nil ) { + [self.avatarView setImage:[UIImage imageNamed:@"heard_man"]]; + } + else + { + [self.avatarView sd_setImageWithURL:data.avatarUrl placeholderImage:DefaultAvatarImage]; + + } + + if ([TUIChatConfig defaultConfig].isEvealCell == true) { + self.reviewBtn.backgroundColor = UIColor.grayColor; + self.reviewBtn.userInteractionEnabled = false; + if (data.type == 2) { + self.reviewBtn.hidden = false; + }else + { + self.reviewBtn.hidden = true; + } + } + else + { + //1用戶咨詢專家 2 專家咨詢小助手 + if (data.type == 2) { + self.reviewBtn.hidden = false; + }else + { + self.reviewBtn.hidden = true; + } + } + + self.systemTitleLabel.text = data.title;; + self.commantLabel.text = data.content; +} + + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGFloat h = [HQCommonUtils getSpaceLabelHeight:self.commantLabel withStr:self.commantLabel.text withFont:[UIFont systemFontOfSize:14] withWidth:self.container.width - 14 withLineSpacing:2]; + + self.systemTitleLabel.frame = CGRectMake(14, 18, 245 - 28, 20); + self.commantLabel.frame = CGRectMake( 14, self.systemTitleLabel.bottom + 10, 245 - 28, h); + self.reviewBtn.layer.cornerRadius = 12; + self.reviewBtn.layer.masksToBounds = YES; + self.reviewBtn.frame = CGRectMake(self.container.width/2 - 30, self.commantLabel.bottom + 14, 60, 30); + +} + +- (void)evlationDoctor { + + if ([self.delegate respondsToSelector:@selector(evlationDoctorStarView)]) { + + [self.delegate evlationDoctorStarView]; + } + +} +@end + diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/chatPictureCollectionViewCell.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/chatPictureCollectionViewCell.h new file mode 100644 index 0000000..151d9ee --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/chatPictureCollectionViewCell.h @@ -0,0 +1,21 @@ +// +// chatPictureCollectionViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import +#import "healthDataCustomCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface chatPictureCollectionViewCell : UICollectionViewCell + +@property (nonatomic, strong) UIImageView * pictureImage; + +- (void)fillWithData:(healthDataCustomCellData *)data; // 绘制 UI + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/chatPictureCollectionViewCell.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/chatPictureCollectionViewCell.m new file mode 100644 index 0000000..9151f11 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/chatPictureCollectionViewCell.m @@ -0,0 +1,30 @@ +// +// chatPictureCollectionViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "chatPictureCollectionViewCell.h" + +@implementation chatPictureCollectionViewCell + +- (instancetype)initWithFrame:(CGRect)frame { + + if(self = [super initWithFrame:frame]) { + [self createUI]; + } + return self; +} + +- (void)createUI { + + self.pictureImage = [[UIImageView alloc] init]; +// self.pictureImage.frame = CGRectMake(0, 0, (230 -10) /2, (230 -10) /2); + [self.contentView addSubview:self.pictureImage]; + [self.pictureImage mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.offset(0); + }]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCell.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCell.h new file mode 100644 index 0000000..73103de --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCell.h @@ -0,0 +1,29 @@ +// +// healthDataCustomCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "TUIMessageCell.h" + +NS_ASSUME_NONNULL_BEGIN + + +@interface healthDataCustomCell : TUIMessageCell + +@property (nonatomic, strong) UILabel * questionNameLab; + +@property (nonatomic, strong) UILabel * sexLabel; + +@property (nonatomic, strong) UILabel * illnessLabel; + +@property (nonatomic, strong) UICollectionView * pictureView; + +@property (nonatomic, strong) NSMutableArray * imageDataArray; + +@property (nonatomic, copy) NSString * fileId; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCell.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCell.m new file mode 100644 index 0000000..7cb2276 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCell.m @@ -0,0 +1,211 @@ +// +// healthDataCustomCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "healthDataCustomCell.h" +#import "chatPictureCollectionViewCell.h" + + + +@implementation healthDataCustomCell + +- (NSMutableArray *)imageDataArray { + + if (!_imageDataArray) { + + _imageDataArray = [[NSMutableArray alloc] init]; + } + return _imageDataArray; +} + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + return self; +} + +- (void)createUI { + //姓名 + self.container.layer.cornerRadius = 10; + self.container.backgroundColor = KWhiteColor; + self.questionNameLab = [[UILabel alloc] init]; + self.questionNameLab.font = SYSTEMFONT(15); + self.questionNameLab.textColor = CFontColor1; + [self.container addSubview:self.questionNameLab]; + //性别 + self.sexLabel = [[UILabel alloc] init]; + self.sexLabel.font = SYSTEMFONT(13); + self.sexLabel.textColor = CFontColor2; + [self.container addSubview:self.sexLabel]; + //病情描述 + self.illnessLabel = [[UILabel alloc] init]; + self.illnessLabel.font = SYSTEMFONT(15); + self.illnessLabel.textColor = CFontColor1; + self.illnessLabel.numberOfLines = 0; + [self.container addSubview:self.illnessLabel]; + //图片 + UICollectionViewFlowLayout * layout = [[UICollectionViewFlowLayout alloc]init]; + layout.scrollDirection = UICollectionViewScrollDirectionVertical; + layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10); // 设置 section 的边距 + layout.minimumInteritemSpacing = 10; // 设置单元格之间的水平间距 + layout.minimumLineSpacing = 10; // 设置单元格之间的垂直间距 + + self.pictureView = [[UICollectionView alloc]initWithFrame:CGRectMake(0,46,260,200) collectionViewLayout:layout]; + self.pictureView.delegate = self; + self.pictureView.dataSource = self; + self.pictureView.showsHorizontalScrollIndicator = NO; + self.pictureView.scrollEnabled = true; + [self.container addSubview:self.pictureView]; + + [self.pictureView registerClass:[chatPictureCollectionViewCell class] forCellWithReuseIdentifier:@"collectID"]; +} + +-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ + return 1; +} + +-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ + + return self.imageDataArray.count; + +} + + +-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ + + chatPictureCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectID" forIndexPath:indexPath]; + + NSDictionary * imageDic = self.imageDataArray[indexPath.item]; + + NSString * imageUrl = @""; + if ([imageDic.allKeys containsObject:@"bigImageUrl"]) { + imageUrl = [imageDic objectForKey:@"bigImageUrl"]; + } + [cell.pictureImage sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:PLACEHOLD_IMG]; + cell.backgroundColor = [UIColor whiteColor]; + DLog(@"%ld",indexPath.row); + return cell; +} +//- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath +//{ +// if (self.imageDataArray.count == 1) { +// +// return CGSizeMake(215,215);; +// } +// +// +// return CGSizeMake((235 -10) /2,(235 - 10) /2); +// +//} + +-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath +{ + + +} + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + + + CGFloat padding = 10; + CGFloat cellWidth = (collectionView.frame.size.width - (padding * 3)) / 2; // 计算单元格宽度 + if (self.imageDataArray.count == 1) { + + cellWidth = (collectionView.frame.size.width - (padding * 2)) ; + } + else{ + CGFloat cellWidth = (collectionView.frame.size.width - (padding * 3)) / 2; // 计算单元格宽度 + } + return CGSizeMake(cellWidth, cellWidth); // 示例:单元格为正方形 +} +//赋值 + +- (void)fillWithData:(healthDataCustomCellData *)data; +{ + [super fillWithData:data]; + [self.imageDataArray removeAllObjects]; + diseaseModel * model = [[diseaseModel alloc] init]; + if (data.model.list.count > 0) { + model = data.model.list[0]; + } + + self.questionNameLab.text = [NSString stringWithFormat:@"姓名:%@",data.name]; + self.sexLabel.text = [NSString stringWithFormat:@"%@ | %@岁",data.gender,data.age] ; + self.illnessLabel.text = [NSString stringWithFormat:@"症状描述:%@",data.symptomDescription]; + + if (data.imageList.count >=5) { + + for (int i = 0 ; i < 4; i++) { + + [self.imageDataArray addObject:data.imageList[i]]; + } + + }else if (data.imageList.count <5) + { + [self.imageDataArray addObjectsFromArray:data.imageList]; + } + + [self.pictureView reloadData]; + self.fileId = data.fileId; +} + +// 设置控件坐标 +- (void)layoutSubviews +{ + [super layoutSubviews]; + + CGRect rect = [self.illnessLabel.text boundingRectWithSize:CGSizeMake(245, MAXFLOAT) + options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading + attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } + context:nil]; + + + + self.questionNameLab.mm_sizeToFit().mm_top(10).mm_left(10).mm_width([HQCommonUtils getLengthFromText:self.questionNameLab.text andFontSize:15]).mm_height(16); + + self.sexLabel.mm_top(self.questionNameLab.mm_y + self.questionNameLab.mm_h + 15).mm_left(10).mm_width(100).mm_height(16); + + self.illnessLabel.mm_top(self.sexLabel.mm_h + 16 + self.sexLabel.mm_y).mm_left(10).mm_width(245).mm_height(rect.size.height); + + CGFloat pictureH = 0.01; + if (self.imageDataArray.count == 0) { + + self.pictureView.hidden = true; + pictureH = CGFLOAT_MIN; + + } + if (self.imageDataArray.count == 1) { + + pictureH = 260 ; // 计算单元格宽度 + } + if (self.imageDataArray.count == 2) { + + pictureH = (260 - 30)/2 ; + } + if (self.imageDataArray.count > 2) { + + pictureH = 260; + } + + self.pictureView.mm_top(self.illnessLabel.mm_y + self.illnessLabel.mm_h + 20).mm_width(self.container.mm_w).mm_height(pictureH); + + +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCellData.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCellData.h new file mode 100644 index 0000000..b5c8dea --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCellData.h @@ -0,0 +1,31 @@ +// +// healthDataCustomCellData.h +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "TUIMessageCellData.h" +#import "QuestionDiseaseInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface healthDataCustomCellData : TUIMessageCellData + +@property (nonatomic, strong) NSString * name; + +@property (nonatomic, strong) NSString * gender; + +@property (nonatomic, strong) NSString * age; + +@property (nonatomic, strong) NSString * symptomDescription; + +@property (nonatomic, strong) NSArray * imageList; + +@property (nonatomic, strong) QuestionDiseaseInfoModel * model; + +@property (nonatomic, copy) NSString * fileId; +@end + + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCellData.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCellData.m new file mode 100644 index 0000000..5cfb9d2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/HealthDataCustom/healthDataCustomCellData.m @@ -0,0 +1,71 @@ +// +// healthDataCustomCellData.m +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "healthDataCustomCellData.h" +#import "QuestionDiseaseInfoModel.h" + +@implementation healthDataCustomCellData + ++ (healthDataCustomCellData *)getCellData:(V2TIMMessage *)message{ + NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil]; + healthDataCustomCellData *cellData = [[healthDataCustomCellData alloc] initWithDirection:message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming]; + cellData.innerMessage = message; + cellData.msgID = message.msgID; + cellData.name = [NSString stringWithFormat:@"%@", param[@"name"]]; + cellData.age = [NSString stringWithFormat:@"%@", param[@"age"]]; + cellData.gender = [NSString stringWithFormat:@"%@", param[@"gender"]]; + cellData.symptomDescription = [NSString stringWithFormat:@"%@", param[@"symptomDescription"]]; + cellData.imageList = param[@"imageList"]; + cellData.avatarUrl = [NSURL URLWithString:message.faceURL]; + cellData.fileId = param[@"archivesId"]; + return cellData; +} + +//+ (NSString *)getDisplayString:(V2TIMMessage *)message { +// NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil]; +// return param[@"illes"]; +//} + +- (CGSize)contentSize +{ +// CGRect rect = [self.text boundingRectWithSize:CGSizeMake(300, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } context:nil]; +// CGSize size = CGSizeMake(ceilf(rect.size.width)+1, ceilf(rect.size.height)); +// // 加上气泡边距 +// size.height += 60; +// size.width += 20; +// return size; + CGFloat pictureH = 245.f; + if (self.imageList.count == 0) { + + pictureH = 10; + } + if (self.imageList.count == 1) { + + pictureH = 260 +10; + } + if (self.imageList.count == 2) { + + pictureH = (260 - 30 )/2 + 20; + } + if (self.imageList.count > 2) { + + pictureH = 260 + 10 ; + } + CGFloat textMaxWidth = 245.f; + CGRect rect = [self.symptomDescription boundingRectWithSize:CGSizeMake(textMaxWidth, MAXFLOAT) + options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading + attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } + context:nil]; + CGSize size = CGSizeMake(textMaxWidth + 15, 80 + rect.size.height + pictureH ); + + + return size; +} + + +@end + diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCell.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCell.h new file mode 100644 index 0000000..ffbe4f2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCell.h @@ -0,0 +1,21 @@ +// +// sendPhysicalCustomCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// + +#import "TUIMessageCell.h" +#import "sendPhysicalCustomCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface sendPhysicalCustomCell : TUIMessageCell + +@property (nonatomic, strong) UILabel * titleLabel; +@property (nonatomic, strong) UILabel * hospationLabel; + +- (void)fillWithData:(sendPhysicalCustomCellData *)data; // 绘制 UI +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCell.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCell.m new file mode 100644 index 0000000..558cdbd --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCell.m @@ -0,0 +1,84 @@ +// +// sendPhysicalCustomCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// + +#import "sendPhysicalCustomCell.h" + +@implementation sendPhysicalCustomCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.container.layer.cornerRadius = 10; + self.container.backgroundColor = KWhiteColor; + + + self.titleLabel = [[UILabel alloc] init]; + self.titleLabel.text = @""; + self.titleLabel.font = SYSTEMFONT(14); + self.titleLabel.textAlignment = NSTextAlignmentLeft; + [self.container addSubview:self.titleLabel]; + + self.hospationLabel = [[UILabel alloc] init]; + self.hospationLabel.text = @""; + self.hospationLabel.font = SYSTEMFONT(14); + self.hospationLabel.numberOfLines = 2; + self.hospationLabel.textAlignment = NSTextAlignmentLeft; + [self.container addSubview:self.hospationLabel]; + + +} + + +- (void)fillWithData:(sendPhysicalCustomCellData *)data { + + [super fillWithData:data]; + + self.titleLabel.text = [NSString stringWithFormat:@"%@-%@-%@岁", data.name,data.age,data.year] ; + self.hospationLabel.text = [NSString stringWithFormat:@"%@ %@年",data.hospital,data.year]; +} + + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGFloat h = [HQCommonUtils getSpaceLabelHeight:self.hospationLabel withStr:self.hospationLabel.text withFont:[UIFont systemFontOfSize:14] withWidth:self.container.width - 14 withLineSpacing:2]; + + self.titleLabel.frame = CGRectMake(14, 18, 245 - 28, 20); + self.hospationLabel.frame = CGRectMake( 14, self.titleLabel.bottom + 10, 245 - 28, h); + + +} + +- (void)evlationDoctor { + + if ([self.delegate respondsToSelector:@selector(evlationDoctorStarView)]) { + + [self.delegate evlationDoctorStarView]; + } +} +@end + diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCellData.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCellData.h new file mode 100644 index 0000000..5aa1f5d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCellData.h @@ -0,0 +1,26 @@ +// +// sendPhysicalCustomCellData.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// + +#import "TUIMessageCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface sendPhysicalCustomCellData : TUIMessageCellData + +@property (nonatomic, copy) NSString * reportId; +@property (nonatomic, copy) NSString * name; +@property (nonatomic, copy) NSString * gender; +@property (nonatomic, copy) NSString * hospital; +@property (nonatomic, copy) NSString * createTime; +@property (nonatomic, copy) NSString * cardNum; +@property (nonatomic, copy) NSString * year; +@property (nonatomic, copy) NSString * age; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCellData.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCellData.m new file mode 100644 index 0000000..a895575 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/SendPhysicalModel/sendPhysicalCustomCellData.m @@ -0,0 +1,39 @@ +// +// sendPhysicalCustomCellData.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/25. +// + +#import "sendPhysicalCustomCellData.h" + +@implementation sendPhysicalCustomCellData + + ++ (TUIMessageCellData *)getCellData:(V2TIMMessage *)message{ + NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil]; + sendPhysicalCustomCellData *cellData = [[sendPhysicalCustomCellData alloc] initWithDirection:message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming]; + cellData.innerMessage = message; + cellData.msgID = message.msgID; + cellData.name = [NSString stringWithFormat:@"%@",param[@"name"]] ; + cellData.gender = [NSString stringWithFormat:@"%@",param[@"gender"]] ; + cellData.age = [NSString stringWithFormat:@"%@",param[@"age"]]; + cellData.hospital = [NSString stringWithFormat:@"%@",param[@"hospital"]] ; + cellData.createTime = [NSString stringWithFormat:@"%@",param[@"createTime"]] ; + cellData.cardNum =[NSString stringWithFormat:@"%@",param[@"cardNum"]] ; + cellData.year =[NSString stringWithFormat:@"%@",param[@"year"]] ; + return cellData; +} + +- (CGSize)contentSize +{ + + CGFloat textMaxWidth = 245.f; + CGFloat textMaxHeight = 90; + + CGSize size = CGSizeMake(textMaxWidth, textMaxHeight); + return size; +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCellData.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCellData.h new file mode 100644 index 0000000..aa89cee --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCellData.h @@ -0,0 +1,21 @@ +// +// StarMarkCellData.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/3. +// + +#import "TUIMessageCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface StarMarkCellData : TUIMessageCellData + +@property (nonatomic, strong) NSString * reviewConnet; + +@property (nonatomic, strong) NSString * strarNumber; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCellData.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCellData.m new file mode 100644 index 0000000..beba219 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCellData.m @@ -0,0 +1,35 @@ +// +// StarMarkCellData.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/3. +// + +#import "StarMarkCellData.h" + +@implementation StarMarkCellData + + ++ (TUIMessageCellData *)getCellData:(V2TIMMessage *)message{ + NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil]; + StarMarkCellData *cellData = [[StarMarkCellData alloc] initWithDirection:message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming]; + cellData.innerMessage = message; + cellData.msgID = message.msgID; + cellData.reviewConnet = param[@"reviewConnet"]; + cellData.strarNumber = [NSString stringWithFormat:@"%@",param[@"strarNumber"]]; + cellData.avatarUrl = [NSURL URLWithString:message.faceURL]; + return cellData; +} + +- (CGSize)contentSize +{ + UILabel * hlabel = [[UILabel alloc] init]; + CGFloat h = [HQCommonUtils getSpaceLabelHeight:hlabel withStr:self.reviewConnet withFont:[UIFont systemFontOfSize:13] withWidth: 245 - 30 withLineSpacing:5]; + CGSize size = CGSizeMake(245,h + 80); + return size; + + +} + + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCustomCell.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCustomCell.h new file mode 100644 index 0000000..31792c2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCustomCell.h @@ -0,0 +1,26 @@ +// +// StarMarkCustomCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/3. +// + +#import "TUIMessageCell.h" +#import "StarMarkCellData.h" +#import "FSXBStarRateView.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface StarMarkCustomCell : TUIMessageCell +@property (nonatomic, strong) UILabel * pinglunLabel; +@property (nonatomic, strong) UILabel * pingneirongLabel; + +@property (nonatomic, strong) FSXBStarRateView * starView; +@property UIImageView * mapImage; // +- (void)fillWithData:(StarMarkCellData *)data; // 绘制 UI + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCustomCell.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCustomCell.m new file mode 100644 index 0000000..afb886e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/StarMarkCustom/StarMarkCustomCell.m @@ -0,0 +1,85 @@ +// +// StarMarkCustomCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/3. +// + +#import "StarMarkCustomCell.h" + +@implementation StarMarkCustomCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + + } + return self; +} + +- (void)createUI { + + self.container.layer.cornerRadius = 10; + self.container.backgroundColor = CViewBgColor; + UILabel * pinglunLabel = [[UILabel alloc] init]; + pinglunLabel.text = @"服务评价"; + pinglunLabel.font = SYSTEMFONT(14); + pinglunLabel.textColor = CFontColor1; + pinglunLabel.textAlignment = NSTextAlignmentLeft; + self.pinglunLabel = pinglunLabel; + [self.container addSubview:pinglunLabel]; + + self.starView = [[FSXBStarRateView alloc] initWithFrame:CGRectMake(0, 14, 100, 14)]; + self.starView.rateStyle = 1; + [self.container addSubview:self.starView]; + + self.pingneirongLabel = [[UILabel alloc] init]; + self.pingneirongLabel.text = @" "; + self.pingneirongLabel.font = SYSTEMFONT(14); + self.pingneirongLabel.textColor = CFontColor1; + self.pingneirongLabel.numberOfLines = 0; + self.pingneirongLabel.textAlignment = NSTextAlignmentCenter; + [self.container addSubview:self.pingneirongLabel]; + +} + + +- (void)fillWithData:(StarMarkCellData *)data { + + [super fillWithData:data]; + self.starView.currentScore = [data.strarNumber floatValue]; + self.pingneirongLabel.text = data.reviewConnet; +} + + +// 设置控件坐标 +- (void)layoutSubviews +{ + [super layoutSubviews]; + + self.pinglunLabel.frame = CGRectMake(15, 15, 65, 15); + + self.starView.frame = CGRectMake(self.pinglunLabel.right + 8, 15, 110, 15); + + self.pingneirongLabel.frame = CGRectMake(15, self.pinglunLabel.bottom + 14 , self.container.width - 30, 50); + + CGFloat h = [HQCommonUtils getSpaceLabelHeight:self.pingneirongLabel withStr:self.pingneirongLabel.text withFont:[UIFont systemFontOfSize:13] withWidth: self.container.width - 30 withLineSpacing:5]; + self.pingneirongLabel.frame = CGRectMake(15, self.pinglunLabel.bottom + 14 , self.container.width - 30, h); + + +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoCellData.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoCellData.h new file mode 100644 index 0000000..46094da --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoCellData.h @@ -0,0 +1,19 @@ +// +// userDataInfoCellData.h +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "TUIMessageCellData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface userDataInfoCellData : TUIMessageCellData + +@property NSString *text; +@property NSString *link; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoCellData.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoCellData.m new file mode 100644 index 0000000..b922b12 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoCellData.m @@ -0,0 +1,44 @@ +// +// userDataInfoCellData.m +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "userDataInfoCellData.h" + +@implementation userDataInfoCellData + ++ (userDataInfoCellData *)getCellData:(V2TIMMessage *)message{ + NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil]; + userDataInfoCellData *cellData = [[userDataInfoCellData alloc] initWithDirection:message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming]; + cellData.innerMessage = message; + cellData.msgID = message.msgID; + cellData.text = param[@"text"]; + cellData.link = param[@"link"]; + cellData.avatarUrl = [NSURL URLWithString:message.faceURL]; + return cellData; +} + ++ (NSString *)getDisplayString:(V2TIMMessage *)message { + NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil]; + return param[@"text"]; +} + +- (CGSize)contentSize +{ +// CGRect rect = [self.text boundingRectWithSize:CGSizeMake(300, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } context:nil]; +// CGSize size = CGSizeMake(ceilf(rect.size.width)+1, ceilf(rect.size.height)); +// // 加上气泡边距 +// size.height += 60; +// size.width += 20; +// return size; + CGFloat textMaxWidth = 245.f; + CGRect rect = [self.text boundingRectWithSize:CGSizeMake(textMaxWidth, MAXFLOAT) + options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading + attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } + context:nil]; + CGSize size = CGSizeMake(textMaxWidth + 15, rect.size.height + 56); + return size; +} +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoChatCell.h b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoChatCell.h new file mode 100644 index 0000000..74b20f6 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoChatCell.h @@ -0,0 +1,24 @@ +// +// userDataInfoChatCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "TUIMessageCell.h" +#import "userDataInfoCellData.h" + + + +NS_ASSUME_NONNULL_BEGIN + +@interface userDataInfoChatCell : TUIMessageCell + +@property UILabel *myTextLabel; // 展示文本 +@property UILabel *myLinkLabel; // 链接跳转文本 + +- (void)fillWithData:(userDataInfoCellData *)data; // 绘制 UI + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoChatCell.m b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoChatCell.m new file mode 100644 index 0000000..a4498a3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/CustomChatCell/userCustom/userDataInfoChatCell.m @@ -0,0 +1,64 @@ +// +// userDataInfoChatCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/2/13. +// + +#import "userDataInfoChatCell.h" + +@implementation userDataInfoChatCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + _myTextLabel = [[UILabel alloc] init]; + _myTextLabel.numberOfLines = 0; + _myTextLabel.font = [UIFont systemFontOfSize:15]; + _myTextLabel.textColor = TUIChatDynamicColor(@"chat_link_message_title_color", @"#000000"); + [self.container addSubview:_myTextLabel]; + self.container.backgroundColor = [UIColor redColor]; + self.myLinkLabel = [[UILabel alloc] init]; + self.myLinkLabel.text = @""; + [self.container addSubview:_myLinkLabel]; + } + return self; +} + + +// 根据 cellData 绘制 cell +- (void)fillWithData:(userDataInfoCellData *)data; +{ + [super fillWithData:data]; + self.myTextLabel.text = data.text; +} + +// 设置控件坐标 +- (void)layoutSubviews +{ + [super layoutSubviews]; + + CGRect rect = [self.myTextLabel.text boundingRectWithSize:CGSizeMake(245, MAXFLOAT) + options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading + attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:15] } + context:nil]; + self.myTextLabel.mm_top(10).mm_left(10).mm_width(245).mm_height(rect.size.height); + self.myLinkLabel.mm_sizeToFit().mm_left(10).mm_top(self.myTextLabel.mm_y + self.myTextLabel.mm_h +15); + +// self.myTextLabel.numberOfLines = 0; +// self.myLinkLabel.mm_sizeToFit().mm_left(10).mm_bottom(10); +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/DoctorHomePageDetailVC.h b/XinjiangProject/XinjiangProject/Project/TUIChat/DoctorHomePageDetailVC.h new file mode 100644 index 0000000..e7faa71 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/DoctorHomePageDetailVC.h @@ -0,0 +1,18 @@ +// +// DoctorHomePageDetailVC.h +// QinghaiProject +// +// Created by Apple on 2024/8/22. +// + +#import "HQBaseViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DoctorHomePageDetailVC : HQBaseViewController + +@property (nonatomic, strong) NSString * userID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/DoctorHomePageDetailVC.m b/XinjiangProject/XinjiangProject/Project/TUIChat/DoctorHomePageDetailVC.m new file mode 100644 index 0000000..23a1340 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/DoctorHomePageDetailVC.m @@ -0,0 +1,212 @@ +// +// DoctorHomePageDetailVC.m +// QinghaiProject +// +// Created by Apple on 2024/8/22. +// + +#import "DoctorHomePageDetailVC.h" +#import "ChatDoctorInfoModel.h" + +@interface DoctorHomePageDetailVC () + +@property (nonatomic, strong) UIImageView * heardImg; +@property (nonatomic, strong) UILabel * titleLabel; + +@property (nonatomic, strong) UILabel * label; +@property (nonatomic, strong) UILabel * namelabel; +@property (nonatomic, strong) UIScrollView *scrollView; +@property (nonatomic, strong) UIView *contentView; +@end + +@implementation DoctorHomePageDetailVC + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = false; + self.view.backgroundColor = UIColorHex(#EEEEEE); + self.navigationItem.title = @"全科医生主页"; + [self createUI]; + [self getSmllHelpDetailInfo]; + // Do any additional setup after loading the view. +} + +- (void)createUI { + + UIView * topView = [[UIView alloc] init]; + topView.backgroundColor = UIColorHex(#21BEBD); + [self.view addSubview:topView]; + + [topView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_offset(0); + make.height.mas_offset(kRealValue(170)); + }]; + + + self.heardImg = [[UIImageView alloc] init]; + self.heardImg.layer.masksToBounds = true; + self.heardImg.layer.cornerRadius = 30; + self.heardImg.image = [UIImage imageNamed:@"nomalDetailHeard"]; + [topView addSubview:self.heardImg]; + + [self.heardImg mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_offset(10); + make.left.mas_offset(17); + make.width.height.mas_offset(60); + }]; + + self.titleLabel= [[UILabel alloc] init]; + self.titleLabel.font = BOLDSYSTEMFONT(21); + self.titleLabel.textColor = KWhiteColor; + self.titleLabel.text = @"小助手"; + self.titleLabel.textAlignment = NSTextAlignmentLeft; + [topView addSubview:self.titleLabel]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_offset(26); + make.left.mas_equalTo(self.heardImg.mas_right).offset(19); + make.right.mas_offset(-20); + }]; + // 创建并配置 UIScrollView + self.scrollView = [[UIScrollView alloc] init]; + self.scrollView.backgroundColor = [UIColor whiteColor]; + self.scrollView.layer.cornerRadius = 10; + self.scrollView.layer.masksToBounds = YES; + [self.view addSubview:self.scrollView]; + + // 创建容器视图 + self.contentView = [[UIView alloc] init]; + [self.scrollView addSubview:self.contentView]; + + // 设置容器视图的约束 + [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.scrollView); + make.width.equalTo(self.scrollView.mas_width); + + }]; + + self.namelabel= [[UILabel alloc] init]; + self.namelabel.font = BOLDSYSTEMFONT(16); + self.namelabel.text = @"全科医生简介"; + self.namelabel.textColor = UIColorHex(#333333); + self.namelabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.namelabel]; + + + // 创建并配置 UILabel + self.label = [[UILabel alloc] init]; + self.label.numberOfLines = 0; // 多行显示 + self.label.textColor = UIColorHex(#333333); + // 将 UILabel 添加到容器视图 + [self.contentView addSubview:self.label]; + + // 设置 UIScrollView 和 contentView 的约束 + [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.view.mas_top).offset(93); + make.left.equalTo(self.view.mas_left).offset(15); + make.right.equalTo(self.view.mas_right).offset(-15); + }]; + + [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.scrollView); + make.width.equalTo(self.scrollView.mas_width); // contentView 的宽度等于 scrollView 的宽度 + make.bottom.equalTo(self.label.mas_bottom).offset(20); // contentView 底部与 label 的底部加 20 像素 + }]; + + [self.namelabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.contentView.mas_top).offset(20); + make.left.equalTo(self.contentView.mas_left).offset(15); + make.right.equalTo(self.contentView.mas_right).offset(-15); + }]; + + // 设置 UILabel 的约束 + [self.label mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.contentView.mas_top).offset(53); + make.left.equalTo(self.contentView.mas_left).offset(20); + make.right.equalTo(self.contentView.mas_right).offset(-20); + make.bottom.equalTo(self.contentView.mas_bottom).offset(-20); // 留出底部空间 + }]; + [self updateLabelText:@"--"]; +} + +- (void)updateLabelText:(NSString *)text { + NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.lineSpacing = 10; // 设置行间距 + + NSDictionary *attributes = @{ + NSParagraphStyleAttributeName: paragraphStyle, + NSFontAttributeName:[UIFont systemFontOfSize:15 weight:UIFontWeightMedium] + }; + + NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes]; + self.label.attributedText = attributedText; + + + // 强制布局更新,确保 UIScrollView 正确计算 contentSize + [self.view layoutIfNeeded]; + + // 计算 contentView 高度并更新 UIScrollView 的高度 + CGSize contentSize = [self.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; + [self.scrollView mas_updateConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(contentSize.height); + }]; + + // 重新布局 + [self.view layoutIfNeeded]; +} + + +- (void)getSmllHelpDetailInfo{ + + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:self.userID forKey:@"helpId"]; + + JKCQAPI * endApi = [[JKCQAPI alloc] init:self tag:@"Detail" NeedToken:@""]; + [endApi GetSmllHelpDetail:parmDic]; + +} + +#pragma mark:网络请求 +- (void)Failed:(NSString*)message tag:(NSString*)tag +{ + [self showMBProgressHUDOnlyWithString:message]; + [self hiddenAllMBProgressHUD]; + +} + + +- (void)Sucess:(id)response tag:(NSString*)tag +{ + if ([tag isEqualToString:@"Detail"]) + { + NSDictionary * dic = response; + + ChatDoctorInfoModel * model = [ChatDoctorInfoModel modelWithDictionary:dic]; + + self.titleLabel.text = [NSString stringWithFormat:@"%@",model.userName]; + + NSString * photo = [NSString stringWithFormat:@"%@%@",ResourceAddress,model.faceUrl]; + + NSString * str1 = @"\\"; + + photo = [ photo stringByReplacingOccurrencesOfString:str1 withString:@"/"]; + + NSString *encodedString3 = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef) photo, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); + + [self.heardImg sd_setImageWithURL:[NSURL URLWithString:encodedString3] placeholderImage:[UIImage imageNamed:@"nomalDetailHeard"]]; + + [self updateLabelText:[NSString stringWithFormat:@"%@",model.memo]]; + } + +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Model/SendReportModel.h b/XinjiangProject/XinjiangProject/Project/TUIChat/Model/SendReportModel.h new file mode 100644 index 0000000..7e92c9c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Model/SendReportModel.h @@ -0,0 +1,32 @@ +// +// SendReportModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/24. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SendReportModel : NSObject + +//customData: { +// businessID = system; +// title = 应急单; +// content = 该应急单已结束; +// type = 1 +//} + +@property (nonatomic, copy) NSString * businessID; + +@property (nonatomic, copy) NSString * title; + +@property (nonatomic, copy) NSString * content; + +@property (nonatomic, copy) NSString * type; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Model/SendReportModel.m b/XinjiangProject/XinjiangProject/Project/TUIChat/Model/SendReportModel.m new file mode 100644 index 0000000..969b1dc --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Model/SendReportModel.m @@ -0,0 +1,12 @@ +// +// SendReportModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/24. +// + +#import "SendReportModel.h" + +@implementation SendReportModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Model/sendHealthModel.h b/XinjiangProject/XinjiangProject/Project/TUIChat/Model/sendHealthModel.h new file mode 100644 index 0000000..0ce64af --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Model/sendHealthModel.h @@ -0,0 +1,16 @@ +// +// sendHealthModel.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface sendHealthModel : NSObject + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/Model/sendHealthModel.m b/XinjiangProject/XinjiangProject/Project/TUIChat/Model/sendHealthModel.m new file mode 100644 index 0000000..8bd8c00 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/Model/sendHealthModel.m @@ -0,0 +1,12 @@ +// +// sendHealthModel.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import "sendHealthModel.h" + +@implementation sendHealthModel + +@end diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTable.h b/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTable.h new file mode 100644 index 0000000..26f1d8b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTable.h @@ -0,0 +1,21 @@ +// +// SendHealthDataTable.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import +#import "SendHealthDataTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SendHealthDataTable : UITableView + +@property (nonatomic, strong) NSArray * dataArray; + +@property (nonatomic, copy) sendHealthBlcok healthBlcok; + +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTable.m b/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTable.m new file mode 100644 index 0000000..de1cd04 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTable.m @@ -0,0 +1,129 @@ +// +// SendHealthDataTable.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import "SendHealthDataTable.h" + + +@interface SendHealthDataTable () + + +@end + + +@implementation SendHealthDataTable + + +- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { + + if (self = [super initWithFrame:frame style:style]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + if (@available(iOS 11.0, *)) { + self.estimatedRowHeight = 0; + self.estimatedSectionFooterHeight = 0; + self.estimatedSectionHeaderHeight = 0; + self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + self.delegate = self; + self.dataSource = self; + self.backgroundColor = CViewBgColor; + self.showsVerticalScrollIndicator = false; + self.showsHorizontalScrollIndicator = false; + self.separatorStyle = UITableViewCellSeparatorStyleSingleLine; + self.estimatedRowHeight = 60; + self.rowHeight = UITableViewAutomaticDimension; + +} + +- (void)setDataArray:(NSArray *)dataArray { + + _dataArray = dataArray; + + [self reloadData]; +} + +#pragma mark - tableview的代理方法 +//组数 +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; +} +//每组多少行 +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} +//注册cell +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + SendHealthDataTableViewCell * cell = [self dequeueReusableCellWithIdentifier:@"STATUSCELL"]; + if (!cell) { + + cell = [[SendHealthDataTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"STATUSCELL"]; + } + cell.model= self.dataArray[indexPath.row]; + cell.backgroundColor = KWhiteColor; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.healthBlcok = ^(diseaseModel * _Nonnull phyModel) { + self.healthBlcok(phyModel); + }; + return cell; + + + +} +//每行高度 +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return kRealValue(90); +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + + return CGFLOAT_MIN; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { + + return CGFLOAT_MIN; +} + +//组头 --- 组尾 + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { + + + return [UIView new]; + +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + + + return [UIView new]; + +} +////cell点击事件 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + +} + + +@end + + + diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTableViewCell.h b/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTableViewCell.h new file mode 100644 index 0000000..47ae8e0 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTableViewCell.h @@ -0,0 +1,22 @@ +// +// SendHealthDataTableViewCell.h +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import +#import "sendHealthModel.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^sendHealthBlcok)(diseaseModel * phyModel); + +@interface SendHealthDataTableViewCell : UITableViewCell + +@property (nonatomic, copy) sendHealthBlcok healthBlcok; + +@property (nonatomic, strong) diseaseModel * model; +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTableViewCell.m b/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTableViewCell.m new file mode 100644 index 0000000..e957cf5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/TUIChat/View/SendHealthDataTableViewCell.m @@ -0,0 +1,99 @@ +// +// SendHealthDataTableViewCell.m +// EscortProject +// +// Created by 仁康信息 on 2023/7/27. +// + +#import "SendHealthDataTableViewCell.h" + + + +@interface SendHealthDataTableViewCell () + +@property (nonatomic, strong) UILabel * nameLabel; +@property (nonatomic, strong) UILabel * desLabel; +@property (nonatomic, strong) UILabel * timeLabel; +@property (nonatomic, strong) UIButton * sendButton; + + +@end + + +@implementation SendHealthDataTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + + [self createUI]; + } + + return self; +} + +- (void)createUI { + + self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 19, kScreenWidth - 66, 14)]; + self.nameLabel.textColor = CFontColor1; + self.nameLabel.font = BOLDSYSTEMFONT(14); + self.nameLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.nameLabel]; + + self.desLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, self.nameLabel.bottom + kRealValue(15), kScreenWidth - 66, 14)]; + self.desLabel.textColor = UIColorHex(#999999); + self.desLabel.font = MEDIUMFONT(13); + self.desLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.desLabel]; + + + self.timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, self.desLabel.bottom + kRealValue(10), kScreenWidth - 66, 14)]; + self.timeLabel.textColor = UIColorHex(#999999); + self.timeLabel.font = MEDIUMFONT(13); + self.timeLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:self.timeLabel]; + + self.sendButton = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth - 15 - 55 , 28, 55, 26)]; + self.sendButton.backgroundColor = UIColorHex(#21BEBD); + [self.sendButton setTitle:@"发送" forState:UIControlStateNormal]; + [self.sendButton setTitleColor:KWhiteColor forState:UIControlStateNormal]; + self.sendButton.titleLabel.font = SYSTEMFONT(12); + self.sendButton.layer.cornerRadius = 13; + self.sendButton.layer.masksToBounds = YES; + [self.sendButton addTarget:self action:@selector(sendReportID) forControlEvents:UIControlEventTouchUpInside]; + [self.contentView addSubview:self.sendButton]; + +} + +- (void)sendReportID { + + if (self.healthBlcok) { + + self.healthBlcok(self.model); + } + +} + +- (void)setModel:(diseaseModel *)model { + + _model = model; + + self.nameLabel.text = [NSString stringWithFormat:@"%@",_model.recordsName]; + + self.desLabel.text = [NSString stringWithFormat:@"%@",_model.medicalDescribe]; + + self.timeLabel.text = [NSString stringWithFormat:@"更新时间%@",_model.createTime]; + +} +@end diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/AccentColor.colorset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2305880 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/Contents.json new file mode 100644 index 0000000..3ba848d --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "homePageTiwen.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "homePageTiwen@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "homePageTiwen@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/homePageTiwen.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/homePageTiwen.png new file mode 100644 index 0000000000000000000000000000000000000000..975e66d527d7f1ddf5e1dfdd534b1fb7d061e644 GIT binary patch literal 1369 zcmV-f1*ZCmP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$@!%0LzR9FeUS4)T-RTMq!6B0}?nS}^hs;+t;@2j>lGfBF-6BchCL3^WG!eNzR=MaaFg_;x@v7 z?=)oOZ>6@#Y>Ev*hN-FY)_Jt(!4ri6`f6OsB#^Yxd&!01(!P%@REi7 z0Ff!AsYCGCI_I$2IQ)hvY{Y2JK<)JEaWP$-7GEBuvDW)ACJ}&X1g%x%?8}DK33P8< zf(k>#bBd|+woLuPmF1(e8B))gd_SF&57<<2A|3H5s=FWtv;n`B0W<(hNUp z2@+eNhgC?TeWdjvLmr$3oc39(pAzsR(yddr!~q0uJ#=8^eBBrB6 z{F5bnf?e=Di1%8jpJwJGLeoDAS9~WW-)}N=3d*&r)iV@+SOz?abc;0<^HIm{9ar{p z4x*#5ZnxFFXPEdPaj?~){KZOdu*O)e z_e$hXf@sF1b5E!!-Vd91BrAH<$ZHRq9Y~odpwtn@B*oX{@3J)6IjQrX&Z#Z3BODe$ zV+!-BG@NIwTM_a;9Kdzo86?LYGP!JA_KE!xb5l(68|&MPAKs*_3f!PB&51xM$z= z+@GG73S1lWn1bDp;>!zb3Y*eB~dIK}Sm*ZYj2|C*~V3(FN;|EubR(*f2-wx byq^C9c>@gdvma8m00000NkvXXu0mjfdx(Co literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/homePageTiwen@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/homePageTiwen@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..847b9ab06c107144350ad0665e3dddb35efa7bb9 GIT binary patch literal 2375 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 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/homePageTiwen@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageTiwen.imageset/homePageTiwen@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c9e1f6929b3892fcad9ffaf1482c48a78a281914 GIT binary patch literal 5710 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 ArvLx| literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/Contents.json new file mode 100644 index 0000000..da9615e --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "homePageXinlv.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "homePageXinlv@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "homePageXinlv@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/homePageXinlv.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/homePageXinlv.png new file mode 100644 index 0000000000000000000000000000000000000000..c975727c2e63459b15325f41121c608263f87f1d GIT binary patch literal 1468 zcmV;t1w;CYP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$^CP_p=R9FeUS51fcX-|~uHF*pp$xxeDZ?52YU^Ijv^`$Aja98Vz~@0DHec>>8ie!XYDwA&>x`_${J zV%HwMUZ*Yr`bY6bW@^pJuRgjUYaIgg#LlEeYVt;dmt=&*2!>fav@g|DFr^;2w=u~C zltoqQ+|aQ_0ZDlqo!Z($dTy%LI(KIE|8@HEWa5SMBO@~k8fQmK;Zh^H5ab73AXU0a zENgk?T9y7fmnSOq7%z2tPkA1+bH>;@XALYyeDk=K-k0*flp zQYM&!ZA!tgF=1mD3cES->Lmw$6Cm1v<{xYqUyu(6h)>v#~ZG7{oXazEd_D)h&_2`#FQ|LvLIS)ehu(a-=%zoXi_@ zz{knK%ie^;i;=+Q)?K$%F-&yLrM`WKCpyf4la9iGnpFx6S5DhI=ns6PG!(&|R!VId zCH-#-UJn>x!O*&E!{GBP+OMpa&rkw& z%ee`#zEtcTHTzqM&jDr#Xb(>Z-E(=vJ;1guzg{^TN}!{L(700lV(a9voRg--;J;}M zM~HCl5}|%|&ROjC{eeXm3@1=z$Ou2On_cIutjxI}vHpj%d>7{gSEM>hn$ED|-{O`2 zC+D`n(i4D1W&B0Il7KXuSq--vjfR2Fj~dJIG$11r_zXS%;X^piDR9<1{Q`U9q$Hyx zUVP~{ZX#fvpK^o8Q?yY(x$?cT42iV2L>nNeXAr}8O`)NXWmxWvS z1dkA^F9Q)Lr9Z-YO%9X_K!J;LZ&qY8H<^jC6kH`%rBGS21o{U@tz+XladR%L0Sr3; zsR$Hy8?7I7J{S)0WsDi=Q|_%sg(fH7nlTga%(&(Y=?MsXIrew5%j0$ksR8;kGUj7R&Uu#|K&5{T zs?{MOE{u0?UP*eJDN95W* zyj7nV-=DVIH4x%j!$qI_($c_KSp@@HB485QCU#7jX$E^u+$xzbKdzL80_c^xv7dCo zD~${am*;_UAD=1(NGSNvomPCAz@IK0xn<|*FK&~3KQEnV7ds56I z=@~2A4ItQR-NAYmRP0)pTmDMzEqk9}38r9k2&ckAduAb7_V#O66fD6M>`ocpdic|( ze62`auHF3N76e1E1XDD-fSu0$*sJ5Ir7=-j>ZZIn%;0KiGbwNZzL}n9V211=P;Mdq zI&P#lk4pQ*PM5hxukf{Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuDyh%hsRCodHTU&@#RTy6X+WVXt z$B|}6vB3f<3WO-rhb}LrDXArDl9mJsQId3lM526%3CpJaOf-pO-RG6f426IIUgzs(jjvGe1el?VbVrBm{psxW_~nLi2cE5nceTJSyOX-1LRM9GY8bn8{NA*6vF=cm(O||d$I5osh6lzj zsnH8J1vX0RS%$I8aXA5+Uc*FK(eXc^9oN;~vzo+XsN-f+PsBe?M7tazc1P0Eg1*v^ zLw-3DXW`eB%H%WsU-%sqLhW(M`7@PXwnsfno}X5>7AU|GYcXlP0m11-=sS+%`I|1u zZ%kQF>!%T3h2IR5mdE!%;*KP#jg4CRdCC->9P9*(E}f^Kr}R?*zYW>NfM+eYVGs7P zuhoMb@kBt}>j;hno{PI$>t|dg4sfJgSN0HqZ9agr)kd3!XhA!Ct$&2<%+lp)7Odu= zC-t&&ETJq5P`}O02$V;FL(iekxJA8{6Cv?3PrkMa z%OU{RjCa{qTtT@>j_{V*>a!-m_k!EvJ8dft~W`@+8V0iI&Gc;Aa!ZiR_pOm+sRarOOOSSQEgEqtPdd zub9?htn(f}bdnVI_CrnyT?PUAkkM1BZ%qJKq=^m}S>Y95IN1LO?o`SLX8Bnv3|;Bg zVbY86dr8n2MU=}~q$~ok``C_cFfU^T9l*WPKt7-7*qNUG(jjpLTjAY&mWT`aEAlP} zB}(~2Vh8IfMI>6*ihx0(?(wu*hR8o~DK_sRQ>7k>bX5mOWO+GAZ1IR69A~vF-Z$$taxel#v!$AncPa4xkvQ}E?L8D!g zR4~s^l=g4Mo{Q_6k<_|f5-oI3aN$Sx&nML@m^l3LsgP@B>Ef6zlgUk1IEe&n48`Mvn9jq1T<_+-p+UsEs# zSi>rp^cf5ljBlC}meZPdpXQn@Oil%QvCOjWl3Yaza3q~j%Ey?b*=*PBhW@6tX#wv2 zrUT^N(Nv73l}X>UrXPcCag0*~i>BxET@ z>Gha1QnO$rThY>(Bf@h-B&Y0PrWuy4Fsgt_z!moU(Xr7gaegfnzLjzA2S>CExRV~1@2)mZIu_~@N@gn@A7!LP?ysCodc8m%E zT#+N>9xRQk5mX#6;J)*P`)G{H+u|0`pO!Uh1aPhR7=H*G-$e-KJoRDr-;d4A(#Xj% zt+CaJj4A;PAV%^ROlal1UtCX=z-)S1R1Tc2l5~G3I^+9cGX6#bzd#68`2y5Gx(XX8+e_)rG{elNZ zqu+ws*2s^l7<;e};MY~-$_mi?0cP|;Kmb1`>hEjlscoN(UhRz4JfI49g8Z~hB?%WY zW7{!C#%fT81n_uh?wj1jud7VvSo0YhV`Qub8^Y->csbT|ehNP@O3$h9SnzDFcj`rB z`UXuF0i2;%tZ)*E_O`L|h>Fd=x%pft?c0}ib)J)efCOA;22W@CF;%_188+Q&e9ZPd z;g$S!*2o7$z#6(lYjcB-FEaH)1b`1XqPJCaC35w86klEoh!zTn;0x{*FEw_Fp19jD zV*J=3cxzB=QUI1ub$qb#8bz{IOdRAL9)N`tT_%?Q;}Hh_1L6;db-wR#wEzGB07*qo IM6N<$f~bV*=>Px# literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/homePageXinlv@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXinlv.imageset/homePageXinlv@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4df421fe378c325d97a352ed4ca7f357685e1dd8 GIT binary patch literal 5079 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 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXueyang.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXueyang.imageset/Contents.json new file mode 100644 index 0000000..61543d9 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXueyang.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "homePageXueyang.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "homePageXueyang@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "homePageXueyang@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXueyang.imageset/homePageXueyang.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageXueyang.imageset/homePageXueyang.png new file mode 100644 index 0000000000000000000000000000000000000000..d4819d40b02f87f99623c1543be4bcec7322189a GIT binary patch literal 1201 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 FV1j>Fk<$PG literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/Contents.json new file mode 100644 index 0000000..51c043f --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "homePageYali.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "homePageYali@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "homePageYali@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/homePageYali.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/homePageYali.png new file mode 100644 index 0000000000000000000000000000000000000000..d031486e382af1aabecbf7529ea3e03b1f75ad18 GIT binary patch literal 1345 zcmV-H1-|-;P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$@t4TybR9FecS50VKRTMtw{=7GD zCNt5r(Gt*tg0-R`C2g()Pm4ym#-J^L_XH-it79TqZl0L8AL5t!LCSI2qh_ugv3zoEDc~&t;>V#2CK+0w-TD?I)=Mh4NmPttQV=@@=bK!m? zq)Xh!!MXTkKO|3ktt@ymQ-tQ3BDMD$A1eJbv5aQkXO_$<=NDcu5WaK1cu@uO4sYl& z-gOU(@B@Iq?6JSr%bKqN>JQP;ERwk%m^aIuR?7UtefQnm=RY-s*vP=+AEgT;bLDH+ z@>#sqc$rWyqfv7Vwibe42F$Klw0#lsL=SNAKcg_e5`y^}OmvdXz}DH_mv?L>BSq_4 z9Q9wxJ(ui}G1dZ7dhJbfiWGjr1*lCKTaep08oR>&U3Y>0=5UKaMGpbFKPlMnIawnJ zQU*9-`~i#e6i12WQjQ>{WMqtufy~V0O6lj(n)aSDsYi|#qdvwveS*OsVO_jExQ|1b z&u{n@TWUo8ZhxZiP0H0|WU+i5{l~7%P2j`m+}PBUpq3pmD3GeX&`}Scz#Z4~7q7pgu$=_hWbExyb21oHp_X_N>^Qw+y%8{4S zikabjF0*ck`M4J{4GeMUiDGE7#Dr7Q-jQtM_g{O*Pe0Xye0#`8!LZq^grVaeSMLTP zM1@Db`|S9;JoS&Gxig2YB&;)b2|Bw>_nNrZyi+G*xuCc#+1`8~|1Gm%GrP8>T<~I+ zYR*TqA{c@tn4)nX@Gf1=_6Z1`yLvel0)ue}ujl^(yJ<-8X#0pT00000NkvXXu0mjf DLmp;v literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/homePageYali@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/homePageYali.imageset/homePageYali@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a3cff90f6197029ec076620c422e08f17a44065f GIT binary patch literal 1952 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 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/Contents.json new file mode 100644 index 0000000..f65c6d5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "sleepIcon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "sleepIcon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "sleepIcon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/sleepIcon.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/sleepIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..1512b6b735deab6e6f7dc0f444d55f1cd35d1d00 GIT binary patch literal 984 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 AFaQ7m literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/sleepIcon@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/sleepIcon.imageset/sleepIcon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e2bb389751ff997dc3debd90a41b0eb73167b1c5 GIT binary patch literal 5096 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 KMNUMnLSTZl?y;r- literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/Contents.json new file mode 100644 index 0000000..f8dfda5 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "stepNumberIcon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "stepNumberIcon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "stepNumberIcon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/stepNumberIcon.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/stepNumberIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec32ab6fe5924cc3c57c54c487efe3ace722709 GIT binary patch literal 1095 zcmV-N1i1T&P)Px(0ZBwbR9HvNSKo`3RTN!opL6dF=5MniD-y|Yh9UmL?ffS2S?=p3!`l4!Obwc22lZ+zqS9?5Slk!^TRJjK2!ebKF5<2I=ORl&pvKSG>RRK@{ zsC(D|Xklhc;5k5>O8EAX!Z9WQIflXHNY-oQ>j1hgg^L$}^rjNFG7RKMt5A*_Kt41k z5XOiQCQ828gjE2hUw#0a4y-539U$XX0YI-w@YR4n1aJz0$pAtt=K_ua*ev)TQMIpA zC@$+UqhcW6z9yR`>O+DP0W<+*rHj_LG zak-=(a-f?CI1J$}0Lux!>w#YqWlNSiW+01A>DC<$TL8?FkVqVHVVlhNTH+lbm(wuK z6W$~Bgrs*6<5%qtui9~^LX>YGU<*LLN+1f{BVZe(WrS`Au{(L#LHH~Sd=9QR3QONu zs8?~1Wou1n3!u7jtSJ;_T?CcL5V)?Yb-_WL6tPnYpMaP_;z3B?g7%c8O^M+^@NzDU z-A0}j)6X4O!N1zBxProBEwww zvdhenq_gHa)N0^q9RkIY(rQ3!+BG6olxUBGADQ^P8`is*Kj!^L&iRM6m$O1w_QEL< zYdU5C8342b($j4_q40%+yA4_;a9u+AlSoE!rpQ~U0dbO?2t3152RmjUXFO>=2KG?7 ztcNa#2}n~(-Y58rE*;JzUA8mEl?FXJ*g{fH*wzfR8b}5lg?R+-X&VBeFNYw(k6)Z8 zbMhuI5VawqQ>sv%Duy?tY9MJhl2vtYHE#=`ESLgqEYnmql8yUNI__h6rg%IaCQbN> z{Y$4G{eL{oszhrvLN6B23dR}N>XnoeJGoBn$DU(DAE$#-{l9*m{|&{oJqdt&lb-+p N002ovPDHLkV1lTl_5J_= literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/stepNumberIcon@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/stepNumberIcon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8a820b6dcfa5316ab6afde7782005d01e0ee2f27 GIT binary patch literal 1854 zcmV-E2f_G>P)Px*_(?=TRCr$Pn|+L&RTajc=iJ%P7TU$Cd>EBtOq&%@q)ACiLfe0oxTv5_L8L|- ztwN17)DSh)Dr!g|7)441K|}+VwpLrQq5>)*1PmY5)goUhCBG*~Nr3 zqeEgUk^8}vXZi=)?X{(k&f33zJ-r--C5`{!J!(04pyzl~^KnT?TRELhb(@ehxpVNp zEp4-3{>`~OIF>y{0mO*^x%0pY2!n5(>L^zWG-d~q=2y<{Zrf8VBMJhDQBM!_%}toJ zSF6097C-&#}H3C44 z{J_BL^T14Myb9}5Ua3rL>x^CbnJ^3>j`;^W`{sF5(pHzo*T^VKhXaecXYR_?gkbO{`7NTy90ojRQ|~+mpD~>xS1VhU*y~)prSJ4N?82uMDWx)8vbpDsMw$Lb^N7nNeAUf=Te4w^26Y3#WX%$O4B*}6Iz{N4Zu(`p?F+T5 z3ji_ll&%u_-YT5APUd%3A(s`IG63c@C+5?+2*f7=v{vf`g!2^qrE26S4S*8RXqQ4b z6(j|95IDISqw{4%JOKI?S)it}{s!gCPZ|KoR#R9pUWZ3G5A1;X*Ub58fgb~~O6D(A zqGNIZxU~|96}y((?rkz(&%{0f;&K4{M6Lvr-E{~coJ;5%l^8bmI)HbI$#wMbDL|J2 z*iG3=51DX?)apobpS2^|9T@F757FJR;y zfF1=HBfTW|Uce3lKbQGmhe60rh#7Lkc|PV!KF0u!*ZB$00J_}{pz|n0^Hy#{+ux6l z+yU}2L7QNHZ`R1fz5*iFhet?!sTPr+@C>ko^F`iKBud?sZuX!D^HTm~MJJ`@(PxV5 zJS4xS+d2SU03MRG20@uxM1H~n(5>{o9(WSs-3rN$d=QXkc<{f$?P>xaI5bTDB=a@- zj#FU)l3bz)jSGVlIj4|C1z9pE!nXSE_X|w zf$Ule=Lq^eOjnLpK!sV9uF@zL&(WAl{pe_|Ri+HyoM@7Xrv` zbdHLA##&@tYEYX~Y05@ye+7RUrl-o#Kis5R0Dq}ONwKyB_5k{Dd@tBdL;HoTGQYZ@ zjN38-Umi>Mq|^Yq)dIj?0H2NfcRFtd_&x|*6#UyofyqvTa3#PZUyt;J%q!Y;PDus` zdXcV`O5s(y#SfwH0d$v4*VZDlD(Pb?06a}%MO@7duM~-&ivHa(BEML|n}^ZMema(dj(0a=Ik#G*l8v)D}aXaYWFOl}QmK)W{sR0T_$7xAJg*ka2M{be% zO=HP0gEzq}7R6i!jMe;cnSZOK4S5Z!Iv`PlBKQ!6%^v)Zl^9#=wucW$H2M*lhCd|L z@W*8b%LPKAj9bFe1^78cPt!K=LhdX;`r-L8k s3T^dxecqTHXiDt0h26*YlzV;te{0K&{*EKe>;M1&07*qoM6N<$g6p<|+W-In literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/stepNumberIcon@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Monitoring/stepNumberIcon.imageset/stepNumberIcon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f2dd17146cecb41322b85f82553db713fb8e9e45 GIT binary patch literal 5904 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 m6!>(LtX*kP3#jZS=0000F1(BY literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardHistory_icon.imageset/HeardHistory_icon@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardHistory_icon.imageset/HeardHistory_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3db6a3a830f398f416d93c9420cda34d00d8e1 GIT binary patch literal 13237 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 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardHistory_icon.imageset/HeardHistory_icon@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardHistory_icon.imageset/HeardHistory_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3f6a9762983d60a78ba5b7aca28f26b709dc7d76 GIT binary patch literal 22885 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

(BYOclV0S3(oO}LJ z0BJjRWj@?&F>?(^SXPfmt&<)5`Taz%H`mJpSR=2U9%GGdy$}vzu_D{A|Pd zJ~rFz+9UoIz>K`RcgF}!Uj#8zPMrbAh{7XoVn8}8d_0gLJnC%s;AP(Zsu*9&w~EU> z(lw2??q$^UNsuztaVkN|Ja=Gm$yI(F8NW5FvjGGu<$9CF4KB<#MON|ySSvuK42=|9 z(%0G{C*WGEl-38mR&peRk)R{(Mf|)!XyqS}<5=}Wi z7KJT-a7UF@Wi(~p0#x!?v2uI@RKe=r{Y!pRR3%@>tfVbinXe56$gBVsjY;Z9m22(T zR);?yl}8WO>(~HX*3CvU!wCyyC$A3)$ZtC4 z5jkLwe|APEQbKqsOr_i_Ce-33}Ctyuu_i)8v7DxU03YP z=T-r1!K)<`#K&;cb~hLafc@}+dIa$~=1F51!8E(!22P7P8d(K1MG9!r+d1?yPaBP* zj&_&)y}0C`0)v-*@@1TQ0^?Ml*ULX;b_l?H6{zHeVE{9g$V%1=0jR8}9^qst<62J} zfy+v7A^K8nQUs=)LkOlk2x3RM;e^r}l{K%a1-J5K?5UYb%IK*qUhb8)H&f&hq$;ak z{+0h?0IRk&oD^leP|`;58sM@W)iE!5T%=&iV;q2wLUs~+8>oZD+pN3Z3}lKqHfFk& z!va(F6`;)PC7-kcl^|uF$GE6US>q6Zf`-USHYy$bGXFw4w%p;@a-$jn%nBP2D}c$? z;RER=5RzF=ZCW%-f?1Y%3$JfUNR0dMclH{7N&mKxO{L3|6+E$8`f* z*Btk`RRCM?($Yp?^=Cm$o(?HgekExYp!78fq?Fg9Dw)@LWMvcWab1GeHgGI}Rmlt? zlvM?@@|!@dvMWh#^t67q15n!GWF}GC`nsOz>mIcBWL*w`)qWh1Req&uBS6*Zm`JMP z7YkTTdzE}~rJDkn-O&(*n|f(0fSw4-s?$wCO7#~TP;D2zs3NUx_&9n?U>;|@!~7RB zFei28OQ4<9J4SZ3!Tb_HO=rJEKKDIvwE_Ozx9Fu3U+RIEdf=rVc&P_oTs`pr1Ht2o U&BK6aU;qFB07*qoM6N<$f;?#+g#Z8m literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardProgress_icon.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardProgress_icon.imageset/Contents.json new file mode 100644 index 0000000..b9b11f2 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardProgress_icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "HeardProgress_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "HeardProgress_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "HeardProgress_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardProgress_icon.imageset/HeardProgress_icon.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/HeardProgress_icon.imageset/HeardProgress_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dd44e05c9bc0fda253935c1bb4f8621511175a40 GIT binary patch literal 5027 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ɷS^Bz zNnNC(Aagt;h2X-N)T*Ns$Hu3*4>S#J@N=Ev+E%MyD_YYtqoS7;?M(tKVdui2Tg=ew z-*~BuPQcDwIO6xluILGG28b{2z>kOEJ)!ywj_o5CYWzyZ`3?FC&DE$QwQPI3Mv=Cj zwOY0I_IkZvo2ozd_(NYZH$V4d^sd;$23i^vk4px+GcZ-zO_&%bKE#*Kn4esuiI`-Q z@G)h|pi)U@bA^7T@*eulUHTCYyg&m#=Q%Y;!=B0c*T3rkGKB$@Xd93G0GtE7^@gru zVVMm;T|M37L;oczyPK5#iSN)L+9ihYOopy8uUZyNoXo}o0=DW<>!IXNl8H373xP7P zB_~C7Pe#9Ub?fDCqovS(MknX3VSU({ZP0pGXH?8=jYgfR(Qti!G+4Sa!jW4eZT93- ze5og%gjJ^o=+>?xEfjS_L#HT3I6yf`otDFDxE#0L&x)zeXo{mPJ-F8BkItT6`I9%i zW%f_W?km|g&ZoF?3`d5EattEX9wk?WXA@PfL(l9c0M_;hdk-IG6ZaPc$_BMYZ$-qL z5l{X37X5H?jee9Q=O0iGuScS{uj24S@7@AP5K-~kQLF;!>ze3c(C{J+c`t+YQ@X)z zNrQ<@1+g!fce_l0L#;C<%;s(Oqv#l$;DL1b>rc!uLH=``CJv zn#{2(T&Ssy1^rNFH0AzV)hn~Uen5k)eLJ3pn75#Vb=grd{MBB6_0&wW7;RD-(B3AH z(mg9z=vzB#){14yY0prwqtrl+lX5pv76uio2Z^8L_Ap%lMzrOegjDr*MP0M)ZHFsl zMUz$%KJ&Sc4+evuCADO@$wZQbg`&YS)lSO9Do!Tpuv(%kW6&8FnO0$}>XCqragB5w zaT*IR8>b^DQs$POSbxkVX^QfWGSer5O`KgxW>xiT47C-8$h}zm!aQ$px-^f*FHZN0 z&aZX`jUKLm;hq!(F|5rlO}F{bzsb*ng|%5=2zb)9*`(cTRCWMunp5bRodTDaE7s@Y zEhiLhJB{#8gre0OwYu%1Pyf%oboQUnVKO|0se{#$I_F5Dsiq7^g2`-==|qLGsX?hm zO5P^UgVV3@=cLXdal@bWkNY4UvHp~F*hU?iOc}99W#3LRpE)e%Ohb$ed`LY>rYyIw=oVz$lo}iTent z7UYk)RH+w!*n(H7qpTO6LB=5G-W1A3{BZ&{=PY||O!*>fwuOE+QvKDwa; z^%!BkpJJPsAi<|@CNe@LX~|;IF;#0k>IN2Rgg-7JH5<@cNlLAVFRC&}mB+>ANL9pA z>_V+%MlyAr_9+;t2W{Ke#Zy{HBd!%kMxPOo>d~vEJt;1C2iyN`R#0|NDIq^nLn)$0 zS-sByevndXl+`1)9>KL8I*m=6iUOmq0b0{zf=|fg@m@q*bU<@kgnt|c_%0rfwwl}a zM^{$XE?vEJ<;UpTZI8uT&zPVOWjNCFxC2fH23!@M0YM4Xg`uM>ZBiBIm$aR2bQPG| zl<7EKBb6{^c#(}{EEX9Trf(xu?bsK!gT(2ZqVj~nRmU?@h%vb-IREhF_|j#%0ABoy z_5S&fBNaqSh}1CTvXm-@6Lju{kFp9_7SKmIC@OzaxogmR$C@U6g_Zf$=Lnb0`X?)a+FOb9SV-DK(@G7^WL9r)P_=l}p4Z%IT! zRIyU><&;bTc^ii0M|rMPQk$Gq20hVMBduBk)J>IHkH;7+F|PSA10hIYN~z37s&Xx% z=KG>%PM)LvPcyXWtU}LR)d?SmenU<*N(F2 z@~%Ovn?G$dLp=gW41qRi`^2gRj@5-f(pQefZtj&*`6(g0< zlG=*o1YnXv)IsmuRtB?)oRJ!H8Td-VaiIA#Hl$UQo`!#_Gs_{$NR_FP=%a{sfmR-u zj-{sN6ADR1ETms7RwFNR@<7n#C6 zvkQD<44Nvh7~Dvdg}+^Z7HSc=sFibD@UUSeL8C1?zCh8Iegl;b8+2)il5~Lgg%?ge zyScgfL!?flbu*)+lz#q=CK-z>bVL#h(ZMV$$(_W9I-ycYV~=YGGv~ySqAeUR2v+v# z$6yZCOzpIEeJ~b`xI!PoEX%B3CAXdgKc;JZH&5Q)6b-Pn<3_)-+PU(7)14=SKJ8mx z;%d{10iDa>oQCh@T06rjqt9j0lus?oLD0H#4Puv|jb6$PA=-8?92p_nB5y%%i)f2{ zrc2Ql`3-JO>vh)(tlx^lM21rT8 zs2bwT*z;I}b-Yb<7b*1<+yuUpCT;qrqy;NXX2wQn6KS7Stfh57GQ3aY3So8hAgM@~ z9MAIHUFash%!ftUi~XYWgI79No~K_K9PzD(loqV_dVIeuqAYHTLC`|*@+V&iZj+;I ziY*zz#9|MijXpHmYMP)YWha(bM(8MjizTpwGt->kAkUenXp3*;CVevzZIR!;a^}MS zF&q_t6g^wKU{;(nqfFIvnD&g++H7oxkgm5eaFC|a>Q5E54sS#&o1Lpn%1Rk4ik;9& zp+@RM%BWLfxT?)sm8}hkJgFQ`&EBl7DHAcrYTJX+=C@qhzWC?Gpg+QzEcRoU^4R${ z(YRDg=Q4awGe19~I{^9Ui(sbbK5#c4W%mYH__!|6!f?{27aZ_S+oq>>5pnSi>>=tB zaFMY0=q@!3cy(p<%7yc*f1h4p_c7{vm|mSDEu|r@3eWa~5>8iHWne{>@tqW!h#ERJ z&+)X%bmS(MxbR8ZpQD*3-EzpQ1$2@vSH8A4;sc9UFUI%H`Xw&ylLkGl@3q_`Xydm+8!ks% ze6x_pAll-jjPAANZy?eHBvK+0&tJ12NebV@c_Rl`J=%)u9)s%YH=qQ;Gxx)Bk~p*P`EeWE5b%5Xy0K?7AM;U?ORO?a59dgErJ&S zTaL1do6thUleV~e%h-_b0P+>>Ab@*WPRe*Sfg&#QTfW3g(Uz}G)8NKthb4) zUc3rK%a}O1Mi4qr7ZGqY4QT=W9u#c=EHI#cs+YJ_y7%%rKs(-u&r|epFi#yvUV}7Y zG&{xL#3g(q>6?kf9r-QJJhuqE0PYJfp84F`+Q#3bXQMuCqbmfz6*0e5EQY3lH|#{0WbW%D#i9e3FvaW3Do^bOv!O#Po8axtj2NWn7;4 zirul+=oa?%VKMlzE8R0clQk&1(thGQxM&p!X&wNp7ZI>hgp+R^T@hsgSRZ9QKCFQo zASOI+vm1}`CUHEH0}KCH&asov=c^lYd3ZEuo*vCvuWc=?<@AlL(|~L1-F}U37_Vi$ z0p0%JtYwX6ZM#3H9e?PaHyvC&_ydhv{rz;k7e7G~HY$|_FqsyH?EoRhWyA@8<|OFw zr{P>12yUDWdSLb?o1J7qRr)%~P90MdqR#_nwlGvhQ?t|?&g+)&Y?lP&^nn;xUV(bGRd1Hfi*ln#a1w zk9~=>+GaVw1s{hBB<4sHa0sC~e?xJ`iHM8*7FSg02NEdaHbyVLaQ@i~7gxV$G#dVe z`b8P%(?v|LAR4SE%C=*u?)hvcI_5aB2^Cd=4%5oeQaTo7!t^rhcZr$Uac{;xY?NxM zCHs_$0p+*iQB6~N+oFArE<-on0CHy*Ic+pqEl zKwF*LYR8b@zV(44a^r8e(5q#7Qw^3#c&P-38U`+wPy%pYp&a+@>dN044F~^@{FT;m zr3IOuF<@#3th9M7aRT2aHHsbW5eFl}M_z6LwfP9k4fFKYP)V#}rvaZ=Gf zMBUiIlCRLn>EWpJ-7ABa{#Bix^8!!-*iEDcv`TD_IZ&4(F4p#t8!>Px>bi(~=JdsvPoFvScYD45 z&yp*9uO-i|?8Uf$gn>rOGO9ai07r!mOoL)DFyCsg40VQbl8l|nhv=)Bia3(0%nOxoj8?6DbbY23$UfA9+z?QFi zX_STk6tLjj_;!P!MF%DWS636tz{Txq)xb?tg^MfeSDt&}`5)!MV zWQwn3C#eqf&44S)v5L46r^X)B3k=hafKXQKNc6@1P=&}==LRcLiJGL5RHW*7Mhd}& zF-hOiiLX)d2Wz7Mnl|QT(c{h!)0BkD(ES52k(2f6yu#*5=eexBt!sETpk9`1b zb;}xY6}UKb;1Ggj{R}^%6YfvIqBJjsS;S3&OK&~zed?2+{`vLw&A&-EYCKI}68^C) z+W|!QofG#9QCcaNe*dc)>u4p8DX{r-%%1@a{zOIFtdy17`=3SSJ|TzBQY` zcPh@G$W%9JE6B{B$-FYT5*MM5Qqe+XWNW#q%ETWEY&**d?#`FA_1XTY^Al^`OTRbj zZ*TZzt#HzX95$o`04zU+KoJ%v)JXFXVbLzH$F3|h4ba|fz@p841TEa{4!GIMa)|Kq zmKt6P>o@bPJxy<`>DD4}2L#+E1Ghh{=fmDseQIH;apJz?f3@9i|3hjo{){#46x%UG z*gn#o%q5igPd?CR*r`$~3+zd<5}zHZTWtisxd|2ovO;FI)iUd!=y9QbrD9ce;TYBj zvoD_7>|g!9wc(}H6eva+oowO4LAVPqENfMz1OV)@#re_NO1R>+JHVpR{fn~jw$JIo zc<1z+hsKa9@WqGau&RJV3>Kxa6jsi0bvX`9agIt-ZLb&T$cfZs8*5FJ6R>DcR2I7+fF{8NnW;{Y3)}2X zAA|{Wxt(B?7akz>se(paqzZ35)XG<;IyHJ-Xik$<(+d!XrWf;#9@2$DEvKm4Y}fMb z{zfftG-}JUiw6!IT7I(CZhvc@*B&MJoH7_#bSHC3AK}k-WY7yr-bU5cAZUn`6Gbi54iiRBxT-Sd;UjDog?EA<$5>QIUt2lfcDc-v!%UUsq4YwNV(iZKzv6KKkx>&8#(|D=t)RHfdju>c#ffR_EN>)z8*P#c#K#=xv6z+T*l`L)*F& z-5wVf4?LlL#bzfkO=N^AB%lo3sN?}VQAPqwWW+RjU||4ka8Pzb?I+sfy6nC9bZ@l& zEtj{>|0_DzI!9<7(HkG>E;~AY;po*H(1o93)WWhOoeVed3!JSQ-%o&Lt=aj4PP*E> zO0eA=Ow3`?xmy8Pv}52xWq-FAZQ<8PTtr*&XcZwpc5<37_rA!Nd#}>_!RV!SHM$uC zuN1A_M^X0*ouK8Nsaku6UPajL)ix>OF173V7M+}BbduH_k(f%_75TBF_r7gzcJbTt zTK&D$z%uVr`LO*f`#ID@#mj=aDgjio5#eRt1{#UX7(u|m6h}c13bawhgEo;ttc_IK znx!-@MbO3Dn4cRIgJ0j+y7Wt zT_(V`Yb^rm7TvGVY}NAt(O6+vSe%_Xc<{*MQ&Ur4Rj<|lGiqibfCDYk#y~+C_O9Xr zd~BgUNhV6B2ZI095H8fU$kZ{5N;1|K2hPse(UvKxvRFGFRp5tkK6-{8cK+o~ck?3~ zgUg(^(&;RLb&gK9Mg^Yf!g&I&LgEH)+z*S}3vss=o}k6Kg}>6J>#*GW+n5q?`|@#< zLCe#dwBaKzqXHi+N1|1;)+U zCP&;fRfuu9`Ud=bUtsLnBtrKFsHuvkf^!`(dx^$-)r3Z+*4Fd2s0hz(u3Xyj( zs^>@VS$=44X8xNRjr#j&$R{Ws&0?I23k6Ok_!L*BoZ2y_L>6dxrj6~GBXr}O@WI% z7pn`JE_9JL(8@xaQU;1E9C=$)wH#}@0CI@DwY-a*H!tdk7mpm9otl1oyVd?+tzQ2C zHFZCMfaf6KE`Y`Gsn{_FjY4<2*mDWrdMGnPP7TQ7FHnWlaBxNb0(vY4@aYq z4u_pT-5#tz)9rUU04ws=DOwe1)?55mA3Vo}R~6ySFL<{a-b;Yo7132M7*qikw-=(p zs#^@TBWVtM^YT}1&zH9lv}pF)z=c*gL933sHCYz(QJ29hDFcI7B5w-bUOuGgixal2 zHrra5YE942&%dYLp8CeTR{H>H!;6D}bj!bB>rL{J?g0(k2R%IiA|m zQQ&Mb8vgQjXYN@kkS1O9ilUDj+KZxI>HAUeQ;+hag>l-CH^UC$~1ra*O!5JzF(+0bKM)b6q-A z@l`v&x&ZKASl_N4$(C`GxupzO<^BbLwmT&7j-?IVyiYl9SZ(O>iUUBLF@lG+Msqr! zYR(;)pPs(2(QH0Yuh)-LX8aHV`8e&I`|1A?0wwpSGXJH12iy@7D?y2oIa#RUVX8C5 zaCmx@7cbDw?=R3J+NXP?!OQEtwKIdkR=-he(yL!7S0#`l4WLDA`aQ0&8i1c7E~f!_ zp)pnk_(gE^qHDYiF02etWTiL1;6)m^4;GI@p$k5L^|>o#w_`~Q?e4VQhDhtXQw>~b zR7G93r27_dk_KAWbeS(FYDvBeflC`&!)}h%2As4Zb!fH;#8m341Jo^rAbOCu>a&EH z+Awd@6%BeIs75LA+{4XA<2ZHT0s3vGdkMjGEjm9$Se&QdwxK&qiU!fs1Wr0F&pUK1 zqmq6xp4RB;`L|V)U7!az&(Nyri@nk4`EGafd`>^7(WmEJvtgsx$tl^PXd1vtW0dt( z^bJv!R{@CT6#*<=(N<0a0$9iMR-^)Y)Anvpw%|X_U%|Qc(G{)gcAG(qZd3!e9C0;W zfJHg#>WP}B49It<=jbF2H{Z}kzqFFC>oOS_vQ&m81inZ?B`y#5havhB;xbws;v6_6 zx>J-&^k}Y7_IX*2RN~fdGe0uMDf+=5iM>JA;HcST9)pqC9r}l8nsqvv9{QoJhkume zw`S?&iqZfqUEv3{eHu_c$$~xZUk-0C3~vDPcW7zu3O#I-@6-zN+YMOs;tl|Cc_UPFZXA?${A^Iv^a_1G)Jp^<0e}oS?g?nt z=y7d2^!F)0m*6S0w_uYrsNXBPwVP-zPw&@;I6jNFmdU0sN8^ zX3#wXwD}YOs{uH{(&Z~n1E5#VTfy?t_1bH%u(-YH0D9oJI~ug;r~((Xf>%${s!|5% zl_M{muhDNu(JxEVHboJbel{q_io;^In5}gJkQKnt0nJNiL<7Xx%nSj#OA(m>=70=c z-Y7&PrJ!f5#^$p@(Gfb^Tdc_+3Qkn?aGz}j1qCT&eCCh)0+c3j^5MTpsWbgJav7|% z6j^;5pm{6o^}YenlTNlEyOSd<`iE_7k^}p8f2I*vd!qoZ0xxv*q6BD-yqmq%{MfN9 z)76HpKBW!|O*(U;olXGm4mR?oY$*eX5q%eluW7`5HkV-)BAc6|=(?THk*r541r@Z- z5-)-jDaNF2lMeHK!(m>Z)oj(L_;BCE!ar?zmoEn991{_v~(5jc}GO$r7Ow< zHk$NXv$7h%_a~Rq0N7VWR`4gU3_yBkMOXAlw>uQH+P!h`DsZ8(7w|$~*LgwX(lByg z(8zrOV9>n!K&7qyf=L^Ij1o~8rEXXkR(dxj-%;fh^{@|Mf~`R1D^^t3XbPDg{z3Z` zKrg+5uQ@Ad4_4I6sQ`F)Lu5ri{kEqG_lCEYPQhCRT=b_ZZ2(_a8$fI709scaKzjhA zUIk+C`631g*%ZuL->Fn!s*V9v4)@>#q$m+dr|EZxSMgi(wCU9=(7J2|x|{-l2e6_< z8h~YxcRL}}i&_1G~{%Qm&#--b< z1hg1VHE<#E;6>d781>zN7jX(NlSvn`(U$P$BnVoeWfH-n~&3 zy)SRCBGCGwRRef0;8kxv5`(8Hh01TFECZDN%Nf7=^$`_34^-8e4A@r}SarOwQqbz~ zP*ww2HOfE+zZ{8G*GFXK?MGP#ruy6)KwQGVc9l&Zm3CJqH(XtAl z>T_}=g~n?Gs5%!sVqbY}(K`beb5RwAtLA7ofZhp|WuH5PRJC7wV6~Ae@p`E literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Contents.json new file mode 100644 index 0000000..fcab5ce --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Seedoctor_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Seedoctor_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Seedoctor_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Seedoctor_icon.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Seedoctor_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b0a2aaa9de4697e60444f1fb05054fba9954020a GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0vp@K+MO%1|+}KPrC%97>k44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TW!7cL6h;%?DEWE-R@HWVWY^V~B=m zYml!0;Q*1h!n_x7&e^m^AFW zGO8VU+7O`sSv$d9*l9w=`?B5rIybi6J+jhE=J=#U388)S7JrMnc5cP>lt?zNsY^0v zRiBuza3yhxqtm>KdFAhZ{}T|JTGjeUi>>*fz!SxFo98dfoP1)BNr+MAQ5Q3gru9*4 zr@h`)=ajN9VEXKMwNIOG=5UAaQ(q@NqqwR&WBcvdFP<_8-#K`d<->_hYYeNZIS+r> zEVOQhiSO#g1?^iKxAxZMHQaxo-*A+rakcH&s=eD^mfSkTxqL-$=b4kiF-NQXmAV$O zJhEh|`CwW6#x+$zD@ literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Seedoctor_icon@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Seedoctor_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae70921f53b3e7af11216cdc3be8d740a02ebb5a GIT binary patch literal 806 zcmV+>1KIqEP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR918lVFJ1ONa40RR918~^|S0K z76h$=Xr+~nZ8Ra4f)KFK(o(Rn5ftn!Y*y^Fv9XYVe?UxP*lrsuEd(KHg0K*>5)j9{ z{C(rxVNGVnOvVG3d+s^se&0Rk+`3(%C1x@ zWzX{taGVaExk(Iw4$U~6&1P3T$8pYz1jC5&kf0GZ#{_RPFA(ZOxPs&&GxEc>G>N`Wjk_AyY;) z{3KVoB0T9SxNELVM3AUlzl0L%Yk*0HOr_%*{{%>V(S4V`v7~0ii{Ua4<0YPzpz+LS zKn@OveuF-JV-2V6P|8o;Zuesnb1D%ecM65V{rP+z?FTT>@jWv}%4kie(>>PP5wURy z$rnzqcNx=ihxt51m*Fd!_^389I`B~TBuUMP57ypfGI_4erBX?Kxyb1cv*Xt>hNb2?a+?0-z&Ur=s<&OemluWk{lHl~hIj+axu9;FZT8*Z3ZrCSX zHGQKtmP|z4tN}f`C3N~X*qDXDOhokTh&^w!5SZAgN0eg0$n>-ukhob`!ZbdQraF4y zsQoD%H~E?TZ@*h1rY?@7(hV^jLZTnYm*xa{X8l7*z|}ZJ9lHH~|9iPyK7!;r1}}7) kpsnYS$S0czyaPY{2FH$3+J4PT-2eap07*qoM6N<$g4YFP`v3p{ literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Seedoctor_icon@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/Seedoctor_icon.imageset/Seedoctor_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..03ea01d3d09360d26ed0768717cbbe79e8664eb3 GIT binary patch literal 1151 zcmV-_1c3XAP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91C!hlW1ONa40RR91DgXcg0LG*S82|tS=}AOER9Fe^m`iIDQ545BkF=t; zTExeyN?p{YTBW!P^hH)hA+B5qg}U@bKY<@WTnb8ExXV%{wzM_Sf^Jfat8P-FAV{HI zSgVl7jK4F?gvq2c-n7#c#S51^=iKx7-+RwJb7r&zEuBtxS1Ogqnx@^hZCe-KK{WhZ z_ z%*;EX+u4SOhECzH=AKwpa5V%!6FLA7w-c1-OZ=hl#O(NlXNdh0(6OMK1j? zIyyQzJ3G4`ChO-bgJbnqa5C;GOW?NJSkO4P@ELlqRdjcXxgGUb^(rT`yyK)I6a9}Y za#c}0p}cbo3k${J;o<9myhvVjVo22qJLbeFx+_adOJ7v=l);I?xw$zptZZBrM3|iN zv4$DgPyT;!yWQQEVlK=HIZ!H_%f!9pS~-p7`T6;cFnLveEZ}fOPF!Cys5?dTwF0BkAOfVL3VaE5$j|Ch%*6^YY z(z^v23pie9n*i{t6x*eDi>a=sd?6@xj!;qDBA(8mE#`F3b8X5IAElq83o3Bh zCB`3g*+r+JC%%ee$7TI-PzJZSxVVwYWNxgjtu>q@-xM|lWC~Aj=pFP5eUfjCJU|+@ zu&=LA%Vx9wg&`W=l)+)b!mxaFH#LgTpu=iDpAYg9g+if8H;UoEO;K`@bHrHv_(U*B zM=D25#sV(F{+_1(eQ?}FxdR~ds`li!A&o?CN(hf|t R6!`!E002ovPDHLkV1guV1E2r^ literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/Contents.json new file mode 100644 index 0000000..736dc60 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "acccountSafety.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "acccountSafety@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "acccountSafety@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/acccountSafety.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/acccountSafety.png new file mode 100644 index 0000000000000000000000000000000000000000..60b2151e40f283d006ef50ada770964a68416b53 GIT binary patch literal 601 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_4!3HF+i2N%7QjEnx?oJHr&dIz4a$Hg)JkxxA z8MJ_G4hF{dOa>N^5+IfWVg?501&j>LK$;OGwtxvP%eR0T&gKUxY?vV61ypv})5S4F zL$o!>*5h!1z&mdyO}-{U!Cj^tt_Sm6TgzU_xAIxNc(zDEB%EEaMN6aU9bXd%my#8S zsP`}CS3-qrn)xmsTxiju`Boul(vR5LSGI-N?AWvW{l52c@Ae*#*-&AlC)xIJyH0kO zq1pM*e>9S`c23wGQ0-LL6XCjciN+~)?)JmU4CfwB%bd0Tft}Jdhby@c86F89c`S4M zWQSx;7=u95e$FO?xo6Y%cmA2KD#W=lZhibBxknl5ELZ=#TsiYB#PhHqL-N_B-^CyE zxG7Dv+~Da&E5qtlg*pYKjln(UsrHg+^k!FeK+Gpu`-(#AzJQhe>6HeWo ZBfq)y(BT>97M}z~tEa1<%Q~loCII`!?_U4_ literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/acccountSafety@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/acccountSafety@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..beffaff66b11b677857f374deecbd1dba9f3fb9c GIT binary patch literal 1196 zcmV;d1XKHoP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR919H0XL1ONa40RR919RL6T09oDL5&!@M7D+@wR7efgmP<&KQ546Wr^!s> zBMf`kbJ13;$c!>)R0@PzxGJ!R1O){VVP#nvRuVx`VMr-P4@g?MDc?ahQHhJ9RhjmZ z0(CUSoN;FQozMAV9KTN|bJK-0_uO;O`Ty@Z-+hcBDy-$?^*uF6CKwhJ}#>U3FtX6AJeSQ6~>Lk4qDI`9hZ?Dm4bYfdh zP%?S~5~YGl@AvzK!Grulq|HIB_`xy020bc+acF4hds|!EPsV@UGBPse+U@rFkSrs39i&I-?JQ=EAv-%e z1HxyJy>4u5T+76t5A)Yd+5wW(OGsBkxWPz?R0308US5oL%*?GpOp_o8mvQD$GmHHH z2^|i{X1-Z2`H!EIutLmghL9a%bJVj5A7*7`rG#-Q!&xIFtCO6`s}P#mjdv0g6XnoP zYUW9npdl?S%@Q9UznG)asplj1%*;$PL>Gf+EsC>up{c2LX*cFuh01uLtgE#H~WXs9w z6}Bxbs#OnM%dWdiL!EiYD#^^n!<KBO~5upG9{)SHEpBf7`s%7=p z)zyvs6PiYF5YsPH!X+6Fu+u!~t0-F${k8D_AsRRlndGkv*arn$IE2f{ZSsyCcoVU) z87?rC~q1hB}gU!^4H)w!KLifC#p|q&$rLTuY`ow<0pR+Tai-k)s|2{ z(KQKWB0W7l#%8k>q872@g^+sD@6w-DS1c8QMDE$0^cJ%Eie5fEJbcULa%t{(T|xqt z7A$iy85BTl^?JSE$h=x6$znIR&jN_#@~&ZArY>eYdh+kIglY)8&Vhak;!RR!X;MDq zDe5_1iYCQ4%}>OHf+O!=Z*Ok_gu7)7Sv4J$hX8FV?y!{5sH~H5{g+NvS0000< KMNUMnLSTZPP6cfM literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/acccountSafety@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/acccountSafety.imageset/acccountSafety@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e26b26ddef9f191a9aa53b1c0e25e83f3c49b1ca GIT binary patch literal 2003 zcmV;^2Q2uBP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91Dxd=Z1ONa40RR91EC2ui09#s6s{jB8JxN4CR9Fe^nR`stWf;df7vy%( zL7|0LJRoLE{vei4+q@HMXr*Pd)n=w^S<7;+%++ShY`HRL<+}72en-F~=XV6kA~bfn{5!{wr*5(>_Vjd95Q9lpXfS)u0P0+1P2FSZfa_3 zIC$`2V@H9GPMjDO8XB62qBxl1QJg?N1{z6Q6!ng>oyvB*J*aCxGC^%^ZJqc! zR@9G7Ep6q{QR*kiPtsP=*w}ciu&_{lM)CrkF=NI8l)gr5B1Zdrlw4=rBNwE8B|OqX zxgO<>%AreYr`{impdP9m?>Rl~%C1ZB89L$B;H2XiI6gdZ;J`OxHmpsbK7A?-dr{^R zqnT8OTA=@Et4FYsas^6Hla~SVH0{+akBfMqg?g*YG$+Qlj=^m=X zk#!@hJPts^XxCuEASWbIBdLtKI`X+WIXQW@^z`(|`uh5BQIduN0TU>>zXqmbluJEy zJU2J@4CQMhq0)n7n>KCQP~=BJ_ldBnWfwy^o?PGsHaj9B;wjtg*|P^T;@|0vhVe4_ zik6m^teBXXn#|11R_eDc&7VKtQBzYB<8(UHF}fb0k>nScv9Zo8SFYFr7%cRp20WXO z=c-k?-O1ya>eSTKd_38J{YYUGMmxYXmFCv8!=O?0Y4TvOdqA`aqgm-wU{;LZ0cyod zf$-e%s0DA?($dm~Oqeji(&p_GkB%QdK5XjLsTrKtN5aCwGAZBXZ(z3_D4*+CzBFHO zsITITR7^3QPxBOiK#f4bA5(Aj6Zi}S+!oHoS&FIvr~ssxdZ9lXw+-l&DN_amYBS&r zkopn=I)|^$^M?){s`3Za^3=;4iVOTH^wrNAOab5?Xtq2lkmS3mF94(h9lyyEPz*iH zXDx?NE_d?e$*F#|c3?nOf%gtTrQks`=KPvKjOAj{#D=%*t8@yfP~*OW|Zd$r8}~{QLsEx*VVis$fI5JG;r3jK4OkyS|;f%MQ-KFhG8QM_nk^A-$E|9L;*$DFAG^2-+3` z>SMs^t|X9+)L+TV%iHP?On3cOff_ovyKDxS${7F<&}cw!;5waxcTWH;30gp(p_g(U zJgW)BdjwJj0|F`mmceE`dlrD71LSU+A}B9WpAz0PHVt_tv<&_quJ-io*U}p8Y68z@ zaZo=8kW#>Qy;n8S{xchCPH%yf{eV4cf-Wd1_>pCBglV1wuyFv6#Iu*E|3rN^uO9!J zyuFd%G*B7GW4hOG6zK+eD{rmWO+DVY_6i_07E^D6^o79$YJg+<+BlGPP3_Yp48r08 zVPLcKO5*h(>nohmB=#vvj0=OXm^g&d5f>N79}{Fr*{YPk_m_X3o-<5gs1? z<;_GszCi00v7w>i8TwY^lvvXi`4!r-_+VskR+pHvhDXf`$j=cge$N|c6#{M)#At*h zU1?__JQ@$5W;y(2%G^v&Trdt@>ycdn=^@O#KOLq1PE}Ra+r`Dja*j87cf7a7Q_!88 z&*UOJx&kup-tsO=FF<=4#G6D^=ex>vSJ!ohfoqEALVD&j*vT(L>j?w56NUM7!VQ6% z23h12DC=sgYi+QU3or)t=Dv~7qNE!p{ZOpJHF)-ZsA;^>R|cXdDJ!f)-rb#P97mrO6%}3X z#ALB@(?CuAIHd=b{^FLm5o~EWa+D-rf002ovPDHLkV1jF)u;2gy literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/Contents.json new file mode 100644 index 0000000..215fc6c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "alreadyEveal.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "alreadyEveal@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "alreadyEveal@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/alreadyEveal.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/alreadyEveal.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc4271a48afccb95031e50698657f7b4a1b6730 GIT binary patch literal 5041 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 Hu0mjfRFHD? literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/alreadyEveal@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/alreadyEveal.imageset/alreadyEveal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c6827e2fc638222bf16f72a223b26792b24d3b69 GIT binary patch literal 13201 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�a&(&f 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 BqHh2I literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/Contents.json new file mode 100644 index 0000000..8d2a6c1 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heard_man.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heard_man@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heard_man@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/heard_man.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/heard_man.png new file mode 100644 index 0000000000000000000000000000000000000000..4ac9c77f4b0c571acd7431a4ba01ca4404ddf70d GIT binary patch literal 3010 zcmV;z3qACSP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91EuaGc1ONa40RR91EdT%j07j?)ZSVD8{oe2W*Y3p&!#@sKPCFH53W!+=W>FS{s+u%6+3 zEZZVUl*lV9@C1R_uZxiaw*gt;*;>14Q#<&JdRs}*0Q|Tj2rpr@icM5(KBrvKr21E?iDCL$w^YC-u7xyn>*(ZCUr^$8)F0W#kfK+We|o5-|H- zJe{DAE}e4Rpi;ojJlLEEE`C`yT(V1Ib5>#N{?^{JM;VWC0_gsZj=7Q`{4`m@!aSIL z_*yK24UR9WQqRXiUG}qbPxLle5po zU}=|_zjeWU3Wh?INvEBUp=XsSvf+A%V>yLgIfY8zu7Yhpb9L7)uiKxC9)mk~&bAHX zVb*S{#GqHMx}R$5YUoVYX}WghD)sgBQ8Y3@@mQSFsT3(VKv-FqOt?uUl)(zBvb@mN z^;O`1hsWeV8@j$GplP8*CR0`xYwuGuhYzPPHBN7$#>NKrLArhE9d!GhO9&f?(y)3A zpig{poId{GLrNzBUIloJtkS&B1}-}p7AtQc|>YOJrLZ?9fOKYHpXG=K2|VkKn~X+~8oRcvjH zfuZj0-Lc~)#^J=Nb&4{BMDf=E?_n#JBgfCcG!jzjn+xXAvU``2SY#lFL%1E))>hNp zg$rnCWSClRYNngD8bqohgYp2d3>d%%s~qguzyGY`9)hCGLw-?RDsGOK!$JZcA3gTH zwIl|;WTi7@m)bN;*q3O{BWno99u4k0;>6eSa!Y+@*Mlc40ngt?-NUk4;OwQwOzN`% zA`>2P+<=v+lq@WDDjea=sL~-0AJ2hfejZmG(1Iw=nvw)Cb0kQe3v=E%WlEn7PlzOy z2*@T`)0x)+jkT?i0DmnG3vLlogO-(qDL0IYx{@t*o%*9?3q|rqyCWQN$ z4~|)krIL32U^r}#&Lju}m5eCFGYY1M^zOl;z?sMBiBkGP4+(N**`_q-RK*dn*~p z`V3sP_{3zgExdIM4?68?%Y336$ZK3o9IXJni|bBsMl#Z6$Z`~o)!AL@@)j+52dGe4 zN4(aXXOZ`wm1IV*Qs(qwGBZgST*5Jr;}>^Dt#uhm^Jh}xT9}lcZc^YP8R#_?@8(M} zVl_^rtflL=Z0QDwW7!*VQJ@l-G+dHZe3G_6`}=E#*NNIxm_bF%3qV2Of2j0*>PAvq?q!; z#iTv-1A0xIO@Hc9=x9QrA)LY?pNBMLO2@yvME#MW(J@d?zIiF>v+i?BcVqTNkfMHd z3H%u6^-vt+k3bH~dlhn7KF`DR<)0axeZruxxXR=}*KF8u*%pMiaC33{@aAcfa`$pl zR<0)h%x}=LrC4fgE_M$d$eY9K^-}nHKfQnGq%+P&9FFzID5)z>$#tgp51yoOPe1rQ z&Nv>=a#-GS$YuFF56?$<>~V>6A_R#O!-~@Bw&g%`1H|vb&1D$xbMl;E`-9>~f z&On|#r@4VNbu6*sB*yPYUTvGydEgjb?~PI-njk%?Bh$quMalIrVsz(0Jdk4fNBPIL zpr*-m3*_p2`M^iM?M~u(UEu8QFy?QX*RRLfKS~oo*KgW%3RnE!dpY9+AbHX4*|>`g z3l^)Z4p1Zt$ajYC+CUJ3>SP-bjOmJ{@Q z9l6emuv`JJstYhLzVoW%8RKAGP0fV&y)g-6T5KOlrH*^5Ye{UHmD89f@F4=!RQVkR zT&-Pe%LoAwzim*O#axM))-R)K}Ta3pp5*AEzS48d4G21^||CDZyZnJRZ*^z&rLh)!YM)W7d<@IH%`Ejg$xXr9pD;6D;KV)s$X+EyL#MO77kn4f~? zAu9)#4<#J7X^M)%hlbwmgx!YDJ)#yP=_BNbpO)ICr)CTOwI6qN!h& zdHMOdt1>YRRFq_-7aS6W6oSS(k%7Vc1)sdu)9AUt^Hf4*@~h$^9)Ic&%?O?k3S>WE zldu?o>LmawMi!21gvuc}a2K$@X9?!pdw2irzw6%mj_2u>=zoitC{eRQ;FYeR$HSs8GdH?_b07*qoM6N<$ Ef=|(#l>h($ literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/heard_man@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_man.imageset/heard_man@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1846f5fb72d44bd5dfb145f1a5971b59dd46db85 GIT binary patch literal 7136 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 FV1ftVT-^Ww literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/Contents.json new file mode 100644 index 0000000..43ad165 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heard_woman.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heard_woman@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heard_woman@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/heard_woman.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/heard_woman.png new file mode 100644 index 0000000000000000000000000000000000000000..dd92f57be5e5ffcd7a52aa70c8001d0f20fa2c23 GIT binary patch literal 3131 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 P00000NkvXXu0mjf^2b0t literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/heard_woman@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/heard_woman.imageset/heard_woman@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2b03312e710101986e01293a95066eb062a7ad68 GIT binary patch literal 12959 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%0D5Eu9Xrn{p>k)ZB^Nqgwu? z(@zqs)q?5!nO5j~Ne0gsw5u^DsMxSaa#>g*E8Xqk5Dg>uAsXUVvoCWxz}D{1d1 zxo(8Zh2{OVOJH4bSplt={3WggH!F_fGwLiiPqh5(aoQ^Ujzo$ zfk>OfDPwmUFTb8ST_*0gj|5vFVfAntMd33#)mUg|%C7{)GwM;Ba`sbY1PJmrbqB5pQFxnq=r4f#G($AvQW? z%E>3lRkzX1z(Ai00ae(MAr!hRt+h2YFm>@p{~{ z_x}6JiRYgqqsNVw5cCb|3h2S8A{oCC?sCbIC!HY6zgsFTEiF=11fNS1w9$+uz}J8i zcEG$vj0NICGGC`Cf)o5u3*1AY-CJz7-Edpf&dM=|A&5N|h_WP8*#zYd`V!0MYVu93 zP154-P}AU6m;LmPe&BFC@<NT(*J6M9-t~<7p)Rzy zk4M9eD}?uFHjd551Q|u5k=-Arsz>)|rI;Vd(^nWUQXUIL!=LcV7 zwU+cQrJv4$S3vBH;NjsuxT*7w=)+ofzc~MFsV*;t2!SO+?{Au*&>E1>hukiy z89h=CIpQ#J!R*yQ*>g{f1Bw==CM>Sv0;*)5i9C^=zoZA?*r#{yQNyt;6term;e89i zE6P6OYBVlHqAJRd)}XyB(EFGTOqaF`W+p|*@KGb>sL995frlR^H6ure&}RWqK)@oy zsBzIdo0N~4T^M@I5D=X{w~A58x5YxxqID`d z?!2>SUymrx5jGlk-Hz)lwPF(4k_P$$TDm&L6ZB!-Yb5@XfT)3k>KEsn0sn+cUjEm! zN`&a)+8#Z2v|MoARZujspa@(d*xZsGE)kD@0uM^>nB8{+NUh?)T+9ilo+yW&I8_A~ zyE{AO?H68_CEqMo-c)8oy^3)aU49SN-XMf9k14_`^cL{eoj?W}PfaClrwAi({Pth@ zJYskqIY%evQzFX>{V=VmPn>q%nKJQ^gJgf`5f|ThofyEbDdW%i?d4KEtXhEr%P3GY zFvTo#idd~fu~k%Au4Z(1+I<%}@mJ?cb#bwjLHvyvGg?l+-bIIwr?-{U{~?&o#Sk$S)m7>@MIm_yJEg03#^f~Yt~3tQiKX)$bNKF=Ux@+- z2(;#tK$cCmN(6h+V4iMpkZ^JZf}^p%K^8B>(gY}am~YQFx&6x5XzhK0BE`|zEGw6- zP~wr%?7b7~%9=!K$&>NtXe)aj6qQ`N**>MkXu?|45p~xofjZHG|qj>1}Jy)-~UJj%;=Mt0nKZ5ApXAk zbiOn-HX`OD#zHJqmfJ^#xJW9$*ia#nz(CK0d=xk^3ZWSlLV~pdk)qax^dX1bgYlYm z8#l|6k3SV%d09c~9w1%}CB@RPexrQ+*1J-S<5=sB$t~#9!H%+hYMQ5?y)Y0BjsoBu z5l#_?&cR*zqRG>mi(-Tz9^g5t`kEgtS^|3g_3Bg(3+(pT$ARw3EHda+gxU^W_e)a`fwS1+Nl$It`I2qxtqTFLuHb>_OQgSbR!*dr&Q65sn zSE>mY?P5N^36MmI0AZuoZQLY}&Av~Lm^wv%bijUMrd)^j6up$_@vK}^EAdh6_lW8E zZsE7`9U{X@%gWRywxl;!BA6KL6YqMgXR>vU@g$(K=ar;UoC9+!P1!0qrF_xA5W`4` zJD3g1#&1Ia&l7VVlKJyt!9cdNhWSW(n@zUXZIORI@Th$A<=0ZIrt0BXiUSOdOtN!w zj=YMM$YAng*WqTZ?V`XD*6VZrzI2U{sBbhBcLPo)vEj{-?`0L`vh=Hk;>QG+oRwtW z(0|siSS9N*_hSQ4xuzxA#QG|0C6A4-iVlUmE`wo%Mt2lA5KvPOrNk34C$(F0`>lvX zyK>4t6*|a0Z16^|U%y^fF8Eq>Wtc-mr{yAXVvX|StIy_308{n~s7V$~QBT?nLFYiT zJ4arBeUDKR1&$({tph}^;bNkEChE+QSg%WCqLag+U6dF(iN78aMg}hU_6@&46e0o@36gb-S`YyPq7jsrLUrBKbkjJf& zQiBE=MM%xPG&VHLOOHJz0TZ@3pz{eGn5{(d<-;s1<3oMm8mTV6qJEB&VmvPE;e ze9`ucdS8n|!I2{{u+%-tm^~gBpE6PnU9$_|Sl0Wlezk$GV;%PTY+zVkJ`%+WM<2JhOxG#I z=NWU#De~tZdr}(Ku7Uo6w<%;WQO{WV`2u>!dpvQYkOi zz1+coQD+S(}FzaKdGJWSd55NzWm zs&k!KCMST@uE~QapZNq3O=iYQG81+TM$bwJ9pJ@QOFrxc8pQkGm^7fMy7n#)$2`aD zP$mF0a5KDz*6Y}&z`^|NaD4f&e1hvz)bnXH7N6tVWEWPw<-WBMR1D7Q@%c7G&-}hG z`7yy^@%ul(2yy0vSe8kVqO6s^)F%0x4esj19%7j5xcE=^OXcWs;_XDtDK=`Mj1OUj znIBw)APHb^uAo}%3^9gIQh>noJm%{6AU3lPV2==UyVMO$`cAsn%8950cbdCIOE$;gwdgdDw9u|CWoJPZiGr~N{^oFPjR;% zp_EhrD$LMCh#P*wh+$1WRibC7S{#4 zz&VtK2AXn}7>^5)h7C}3FT^S{E+uH11&~7J0qZ&o2jU!H#cRE{S+#dVN z$yd#QA{tp~p|@jKfo@R|s}a;WURPkD;)!PA?|6yeFx#;-0@3eC6klgt{|6bd({3o= zks?6gen+_;05X-C=y;^1a=v@;EyBBI`{^6ZCoVXay4{V?_Fu5V9L#OfbuXZf8mj}4 zfQWQmNZiX#Q-4j?b&X8C}Jp5vz_S2@&^Jd0tUl7 z@yd$JIru=p=UWI?x0r7>%vGYz-~_6EivwuFKJa@zNh?@N!DV{e!v`~2j{ z{-k1;VB?5g!8r(y!8ANZ8avQlA;!uv{ma3bgN{E@Mx1hsEH@u29!rfF1BgruVFw~r zZfvfg#0pmUb-~mo7s*B9&d?B_&keufhMvf;zU3yQWK?af3r+dF*Y6L-u2$dd2KSp~ za5lDs`+(s%y3EKKeHb&JK^Gd_FKxvWWy6S5WwrfqIrH38EeXLvLUlz&PvYt2sRXd3TS1DHF8CbU)V>^%v8HH1 zgBkz`atf@-lD3lFW#j16rGD6P;x$)^-rp&^jYX7qoPxPw8z3dNNk`!?tr9u{yi^qHV_iug=r05!lxZUT_^PV6Cv zi{PL+n<{O+a~k-VosRO}DIYs_aiY5i1V`01*R%r|kL5y9;>K`o=m1Z^EhcoL0WzBn zNzu_&G*%ibC(EXhCrf?JabVfiYBZX4*gg_E!2E@)>9>lR{`ZwHWcqDS$-7HBBs6v} zDY7B&0c+l!Rd=3NV^A#B<+4V`$pcS*Bscx>8L4k*jalBB^$oImJ(fS3p(qCkXpz?9 zy=3F4Q)SEWsp2TxPXdM_fZeSCPqAatLp-|LRYX`e+nRYpkL-jV`MB=PGZSj)Ntq(p zw_z^cfqqH0UOde9H=+TH%mz$k!5ayHm~0i&ZXF3Fb2xx75*(sZf_S}#0S!qOttAE* z6xqzOWLcfGce#@6~SIWz1>O#qe zsKow)0Eu2Y?K?|H@vh?Vw~N)+Bvwy@*xj2&?{1W~t`;%tB6C4q$e(n@AWN%yTHiD- z;Q4*0{KgyK8z_UMG|gG>zS}k9xZ}Do*iKaqIZ&=iUT0neMTwE?HbfSCjPfo#)N8F1 zrLB6hwA*(T55N&H*Z>NDx6F>38&V}vx!Ts;Dm7K5GI7^YQKi5B-Xi&I!73RstQ_xj zHAu6gQ|7Pr$>L2u8C7YNF*PRa7!*-cdv^qZVY9)Dij)8R+$9fv&?U>aU^`1gP|8c~ z;5>S1Xlj?k4(9HG+m||aba~{lxgWrK@{83HJ@zOlDNe{K!g{k3i7xACX@{8XESV@y zL%D=ab}2@$)Syl1Zt;VF-gHG(F2x_@8t@*sL+QWtp7-CcAL#L9nJeQXUWEtm8*>IM z7lML{Td@JU1in9LGs~S@i{y??cr_?CvkR9@z)m;@F<@PHM3JLO$fsgA6D^z~ytUwi zdCSD*j!dYr;tbpSV&NLGgR>}+gT^VfTcq4>kX4NV`R{+X$#Y*o{=@{cCF+*W6mhZ}9O&8wF(fW(Ymiknq*#tDB}Fo-a; zo~*w4=BRMMcn>ATIr#AGx8HWpIOZ5Pgw)CCqNG99w_sM%jMgYc$&1|vnX}C%uK^s6 zAZ9s{s~OHLjxL(2+W`?96utB24#8XM9a2$lmp!_<$L6gLdGQsjf&&uieN>Zac!++5 zBDOfdwqU(qwmL$x_fA%6Z1u|WIO1wXjdQqpMzs7()j4gP*vk%;2ncFDyI!)4s zcG=Aq#CDaD^YL;T=sYbHZy->QN?dI};)tGAZHb&d_G?jkj+kPZ3(W^<_<}f-3@a(GCN!ZG1A_Si9ndZ1O;P6 zXt{BR9*UC<;2s18^Lpd`Z-ktK;*CH`C$SyC#FSX^B8!)uW|`kNRCk6>(I6#JlT@qP}2APF6`=A~Buo}Q+`d2^U8Eynel>pD(pYX;$7gGWUpB;AV zt>40ZJlllU8`!-aDUBUZQ9^Ct{)Qr1=rYMLGv0^{YS{>xOciBzdG+muvT<`W0Dw1F zcaPx6z`-OL0Kv5_7PBQ1Mu?{7i-(M0>3#+SVLx>}=3qkL6s~S=!_Ht#t+wodfMZwy z>(2(Xf`dHs(mZjt!4HCCUe82gF8q`e5ICR+{s;gm0br6%SYc+n4Z2orV|?(B5Qh^k_t0}JB}A_NLE7AO$_ZFqkh_YV!ii>VC= ze$%Tt99Gb)Z+$Iaf43f@%$_k|^sX8QkPVH<&qEko>ph6B2WJ}yBBYUXC=e-kS1wxg ze(yY!IZl;B_2k)l*Ifsp{a!~%;V?R(;w4tV4$-k3%IAM=p_zujUz{7LV)61z<~-U2 zrlb$%YnilSG*d#8bF|{cJOqOoT*Ho?fvkv5_xXZSzpY8mpY{_ub?T21Yw8szW=Q}0 z&o4@|(<7sXS154B3I(J!G`zY5z8N2sQy;jIF)QHE>dc|o9MH*O#eTVdq+8q&gNfRa z)(Mo*1xAnOgtFS&sK|0H&qUuzTPuAtnf=~-TW1`5ELX_=4AkiE*Zhx=N#LaNiabx)JR-(HfL7 zRz$61){AuXO;nnpXE+Vv@MYz<-L|~%^<;jh4Gw00*R*Nhb-LYUKLAawy8B+v`1 zW%RgVa>V4lpo4g1{#UCMn5w+P96H@O21Gi%v(Cg$Uy=$zxpK7 z2Bg9z8@{G;=FFG-Tu%CD+!3El4!X-P_q)R3KO!z*9$8r5M6ylLq!xCWP#L}QhW5QD zyT4(nphNlcKPEOBJ(rv6w#fl|kCyvxzepw@vZosHT@XJE&{11A!8G*&ASHO6=#>}$ zT&}rnD&7LsC0iRJQC{RC6i-Y9T%2*Cu4noW1vov*%RC0zia|%$K<{D6I$B7RPIn&^ z(0>l5{6TRJ7W|j@-}l^b^wHlzBR&p}mI`fT@fyKFpT-LgyqpHI5*B056FG(-x&b?r zLBR%nP|iAaGCKSuDZ{32OrB1!;vCv?Mv4c$np3eT2il&ykClV>-vt}fIpO`p=5%O$ zH)f8x4~H71Ij$8u%^A?k1iU(DcZe4+xQE6+y7i2Ajb`)jtcM-8eG)1S8Z**eHMicn z2%xwGUdVdQ|3Nfcf$GgZgKUa{@HA*m>k%rFR6hL((rIzD%2k(~sPqeMF%nH(iWC($ z+Fb&0TBXq=cSS}u#PfR9&V-?t62V^9b(tIT< zqf|tz;Jo_B+>d10^12>U{9Z(T<3oRdmdFh_>*|BWqb26?=u_`YeN(558#7Y*OK2kJ zD`9sDS?fjHf&?RgV#b;rwEY?k(km*jy>?S3=*k#4NDMg0bNIR$$o8tn#=%B#4mRQT zrstixPZSljD7H1V$|snhiv;{Yq`-7lDF%V$9xCBk$2O-d{C1sEKFP#$VVOhYy zg3N)jAL}+XAyOSdMVLUL;u%YCpwg+h3KUp>n@8#~iHF?>;3FX`&%G$=+X9e$%3|3X zFmcjuE7k;`T{&aMXMOJ*%)%vL8L7U`qpLFnLl=Q-f0$_+ zvH}he88+WA^TCZC{q>m8?4lo_5E2JGMN1dB#pVX5nmF68=f|dyo>e-O8d};h?H`#> ziG62o&l;d(n8Lxjw_B~}=x)08-E5Se)m}U5k2n0aGoZT=J0sWWf$~B~)ad-bh9}b=e_Psi?JTV3f?@dvbkClD_64q~RhVDR4khnl{J(t^$FvK=kDA1%5->wu@ zimGHjG^0~dUr0MS1~PwL9|)fH^rP1$711>S$#F0DcWcJIHT?_EJ#@{d=Un;V8CWGX zM{h74$qiNVsqI@Z?@|Zr!`a#ee+9g^;3TmUfxrkeM~6$A9341LJeDYay6_%Z2lis; z@j!`7CMvM6STVMwBA61T?j4EnNZ?6?72NQ`V}ti&Br1>B2Cl(CIV5@g*@u3!I21Pg zG92{J#%Ku+cKf9yi|u!tGHGFPG(v}{gWkbtu0%j(C$~5|r45noy?r75GR6sxZ01GB zTQZ*jJhqXt6SFUh5$HaR^kH}#hh3HnV6c8U;T&2+KJ(CToYST~|9i`@`nA|-=#P56 zaby^=lZiS@&AE2&UoIbTDM7MjCVOAb#7bX+p8ng_i@X-!8KFS<3N+3pWz8hh`h7D><2RK+ z3)YmZtwS^z{1=>O;kmwv9EQH#Ef7DN_0jj9zQ5Vg$ta`RJ$-?}a+Ea^3VjLx%P*h) z+ix#_IuF2Lz48VQ7XHG0)7?)$eAOdCziTR3^1sk9ZUdsi*+AJ&bAOOEbJ~cY5@Jlb-tPZw6eI7K`pooy)1t5s&C+AH9L$^1r(9 z>c9Rc7zj&XXx`;yt)^)rCuESS6V**VIp$pROueK2(`dE&Ova{d6Kk$QjQR2ryWW z{wQJ(h!=j2Sko&e zD6QKX+pz-y_?f?5{fSmyA$}JuIJCxk z;)z-Yfc~qtws!97#+n0z{=n3*E_@cm&7{aZk-^qi>(`!-_syqhrMR((X&v;AQ6tJR zCBOY0FXSxrTX6M$B&DWsM3ibi18+Bo10X)eu0Bs=PGtVvN3MyvdtaoS!ueb9;Lw^1 z;Glo`D}FAx;-N=FhTuM6!sntBreHW$!=YwZdy^~IJQn;UG0bVPKmmqH+ayO~eXU~Z zk^Tf%!6t5)y={VbG@do1(Z+A;Mw*TkgoOj}wZW*}47vRhXnWOQbgy~hFV|^E>-}iK z9`7*V=-q<-|%IcVD^PZ~7@5YEuy>w;#C5IP~v$?sv|KHSYY!Y4>n$W=I}(&FsGig~x1=I<+0$QjhW>GWda*dOq^QC1zw*#K4dbDaFZ zv1Y}BH{bkgcc_`ldWZV6LxQ7s3;#PZ8ehY?*Px$R17*X;Vub0FG2wEnvP~=#&U9w&aiIm;8;1j>LDhUf@7=* zgab>kYtPD%$*}3Uzg)RNW$**|v%`a4Rv zSr_t8z>3<@=wNJ2s;h*jyTaMtWv_2`8mr3fwxA~fLqgXDt`lr-?dbG)eU2ilu^CG& zn)JHxrcg+~E~F1{3LCHyk1o`?xvJUqQH*`Vd($;^Jk$b1EilvqLoG1W0z)kz{|{cr V;J@~VMfCsx002ovPDHLkV1mvoqXPf{ literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/Contents.json new file mode 100644 index 0000000..9e26f22 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "medicalReson_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "medicalReson_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "medicalReson_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/medicalReson_icon.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/medicalReson_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fae614965007e306965c2de5749f582fbcb40d30 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp@K+MCz1|)ZGH@^v_7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TW!7cL6h;%>z<6WtE{EP??dZi(`m} zXz8T=-iHGOj(?sM?!8cU(gJ^1w9zViFOKX!CIu2`;fT0Hs8!p9cHC6m8+>{*;Hb;$7CwxCzb zGNr;Ley|xk|27G3+PUs_f?wx+)A@`J)0Vwltl~OJrSP-O{2%-3`}L28Ez-Dk*mC;0 z4?R73OEtP`H)L$G@?keg1PZrR-I4`X={QPG(7V(n*2cs57 zbSTw-Wcbg$H&)?*qrjW2wf!sJ+VHjdhKA-xPOJ59|E4&j%;6JXki2$%%haa_B!BWV ac>iK`WNfnbYuj=g6pEg%elF{r5}E+7v#h}Y literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/medicalReson_icon@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/medicalReson_icon.imageset/medicalReson_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dea7a00bf955730c1461074a3ea7379f4f4520f6 GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)h!3HFsG`&3vq!^2X+?^QKos)S9CzEd3E8Mv8!oFi_Q-b~^uRqMUx+Vw&&G5^; z;Ke_r)miiLk#t+ny*wDj`y=UZ6zC2h2LT6s_J)}m#Za;b~! z9$YGkwSWD!YH8Nis`Up?vb3lRoLeYAwLZg6Y;MEi*LmA_=P;d_vCOjlAg|0@=a&Vh z&c-6_cSLK%e)TFea&I`}qZQo6 z@%&`=%lNYl-kzyWOFL3n?5F1XOjRtvoaj&@pe16NCmI7^&16`PwcKzO+IXpvxlcz<-qBJ_IDvF-G{vTKFHmB z^l`76VxdT3gnFK=vE8TDSF?QQ__y_1T>9aB^SMc++Jq)zC`~!6=?n}aLKiY z9jbTZKdztA>iOXCtgqEBp>A_O7yAeNmz^??^_&*-bnaCb4Y|(jUJ;`8{Gn=nVT+5* z;mX*g_?^9pzfTy-eDslPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91C!hlW1ONa40RR91Bme*a0C|+ScmMzcCrLy>R9Fe^n7wOLQ53-QUS4dl zTT-Q^Md+Y|R0M-AE@`ESRwx9WDvFy}!GAy~I`|KCYN5Eaf{RO+*b0_Z ze_A%1O-(4>8$wFK$r-t8OE$#bU8r7{AL%EU&Mx zzoxD2)vow&s*$t7vtKolNSp#}0kCP2qVJbFPk91YC=>=j=m$(l`c2(AmD$o0I5uyg zvWBr~>c<1lHN_zYJc-;Pwq0lchjSXjzdv%U&I6rP^=>1_CVb%5almM|M$~$>T1^ga z>$EXUU9DzY_XIAV&wt{ue#r?@rt>SJ+a_t#z!SJ^Hd`%~O0!%NFBXf%N20g!Wjo6n z3fm3U23uQOyX3uB^WEs4z(u1`vGXJl2;8Vvt4Y$&Gnq`y4Vbj`1P-YC%(pq_o!-~i zcbN-74%$+=5AaPZk7`TVik91ga!bbkE`Fb=`^4WHR|B7!2NI zXvam0?!=DbUsLDY2`5IS&Fbpv55!xi?ag+r{&j=ND_`3_xy3?0&KJ-#WR4;7WXQXL z#a{z|!!V3XebU16*WfofbnExM~00000NkvXXu0mjf2OO+7 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/Contents.json new file mode 100644 index 0000000..e584433 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "myLove_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "myLove_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "myLove_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/myLove_icon.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/myLove_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7f70ad22d9a42c0f50dc32695f18a3052ccf7195 GIT binary patch literal 656 zcmeAS@N?(olHy`uVBq!ia0vp^{2EzSd!hs^ko{OHHkfPn|wCSW?heA`&0u>cu$qgLanz;Wn99$Zt^}=h3lHTh>dz-qs zzA{eqbP}owyx=-9lC8;2scU!V#gjgd-e)Yo^6m<^@pJ3vb@wap>|Ct1d)i}*YW2w{ z3qwQ2(>C99d}ICQu#3{iJ#p**-|!4Cx4N43)#OR`1l50He>iR0ZFOuud`;W@Q{!4r zckb;tr3%4AQy&)WcvcxFFuCjKqj@=IyFDg}CY4L|9@D+~TXo<k0KUe#sMYE!%zf zThhh6Xuav(yVmWVwJf$E_Iqbmz-OSo5cj8Q<#Jq*g`HL@}@Ld{YdLm7L z<@H>@=haJtEZg_L`MqzcQM%}(+*NXhzQNBoyxTleX=dl$_P;%{hd=Tjwy>A$S6;P0 zvE{VXT3rUS6H-cBK77AC$@yzAhn({~arv5tSI1k_Yc5Le;d^MZfh$yFk!zFU&l#x) zqqUosb00euzG3MnwFJMWj`&7qwVhgZdyc5vEu1Ybbo){MKf}#iSPYN<3*NN8SVLRp zhR_e4e&^rvUP~u!v^7@$H7QJ#se95??+gTe~DWM4f>c|#7 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/myLove_icon@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/myLove_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b43a388695dee1cd58a0491efd7892efe086165f GIT binary patch literal 1522 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR919-spN1ONa40RR919smFU0Lno(1pojATuDShR7efQmu*O$Wf;fLn@*32 z=~lBmr+i80ni|8oSg3gPC>j(N$zV&0AZb~P#YTN9`w-I_G}dBuf}puc%LetC;zpnea?)yBNO}F{f)YL=_ z3=Cvgt=8?hWYZi$*D?AF^Yin4>FMd0JRZ+naDCOzys8yrSy`ELadB}Mt&(ZB&1Q=c zALi1T%;sAZfk5B}(+kYc(3;xX+D0|N3V&7<&dtrWCnO}ijKE&Rl0;}>Vc{D6MYw#B zUlC5`che=)wy+xs5(q*3PJd)_a`LFx>%ECB>{(XW<#KI8>;sF%QYwOMV=qLX;oXs+ zpFdJpSGS;NVs7c}?R|j21ph1nJSqV&ZU?uQ?0?ncWgI44Qc{wK)8`Qp5vfG}2hMNN zH+FY-&lsJTn->)oMGr&d$!x^LqRe;qvnGO+U*Ox2i!-PEJg0Z0t!yx00ck_Ec9_*RZnx+kSX>_^QL< z_!{wib}tLwEW6$Q<;282$`7jEscU0hv#xrKSA^ z_Y-V)R&sLkDWA`G-6qa#Lp6nPACY|*85!BA2vtv&KgM>wh+`hR@poxy=@-+}(}%dUHiZ#X1DP#hAxp4cUI8cY>^z z`4NJ%P$YlKu23+MV7mo}UlHqm0=mxndV*M_y+R>Dt zxPHP`fbTY`>Kq|NWTd&dd0xi4M~;@f%oU-oi&ho9QG4jH1ZL!?1ShI2%7|pPd#V3Uk~K+k=L3cYv6v6 zv)LESDtl^b>V7>~#@G*H_i$Vi$>uZy1x5^&oDW&EV8DC$9e>A&;bL-v$-;h2Op{=jIUVv5;T8?Dz6j5N zb#QQSJ~cIUJ%nze*^rr;c|z6{vGm-*0lrASnw_0p$J7nBG9@Ktj`j$m$7Fl){U|;@ zzP6>MCG5VI+Y$R=1f2wMlvntTR@F=ziS#lNsk>CKtBuLR&k=eZf?A>uKyncLA;vb= z4)A4C3uZdZkp;Nrw?McripU#KUA zQ@Dc~8c!%=nXTog&k|t~XB*f4V^4(Txg(#qx1>#`JMuxV#HFX&*Y;l+y||43?|<6< Y0eh=cDbq;y`Tzg`07*qoM6N<$f*nBDd;kCd literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/myLove_icon@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myLove_icon.imageset/myLove_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7792550d296318fd90296acf7e19975e6df57e32 GIT binary patch literal 2602 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 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myReport_icon.imageset/myReport_icon@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myReport_icon.imageset/myReport_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..40052df140c6e023f54a19cab5fa54d6c491803f GIT binary patch literal 867 zcmV-p1DyPcP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR917@z|H1ONa40RR918~^|S02j5>Z2$lQ%}GQ-R7ef&mOE%uQ5eVXP42xd zDR$|k;G%;rU8L1+nwJqe*g>s`6`D>y1_u!lcL#A2q+qIa5g#ZtcnOJl=n(L+=^(z) z#Zd$+fztc%_ub|~bGbK7$R-{*ob$c@|L^^`^cVN2gy6(ZYiyLrNMOIby zrES|c>h=1MfZY>4r=TH|$?PJ~jKyMmgSIf)ahwnMPgg3HZ$Z09kV>WY#pCfK7>9AT za6W{bB(rzySJ16P){zW47oARpGx(0<+hG3!oyNL`{W(>=QOR}+;AfhqjREE*fKh4B zleJpyVKA%Bayp%!1@r+^ktqWL#j>oQ$TM0DUKcGsJ%q zKMu$(mT`!OrC&}vSZ}XNqtW=7%jFJ}RUZ3p^uZJ4yTY%2MYu;RKl@5n4@-^` zbnv{)0bJlh$#ZevFpRfhj!^_E;Ku=YMfoR!fzlQ(;T`Nl+?Bh!t}mFT`77urawGv+ z9VNS++{Oa$&5R$+egWXy0?ut;0{mR5R9f@x!8PilITFYdFa*gl$dG?K@Mg*Mw z`K>aSco~ruY?u|LSS+prC?tzibF&|C!HD_>KEAg~yV#uVQ1&QnSwW9Dk#7G6f&WOY zN7mWD!N*eNH`$VSF4F;?fNRJDwGA9cumlqO=w)5Q3N%oUs7<51&|1w&vD_(oZ td>Zg85RD4!AOwJtYwQo}b^c|Te*s}6N-~EUvN-?%002ovPDHLkV1oU;cN+iz literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myReport_icon.imageset/myReport_icon@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/myReport_icon.imageset/myReport_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c4621fd7c23eeeb49dbe522c1579b170aaf68e GIT binary patch literal 1357 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 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/Contents.json new file mode 100644 index 0000000..5a15efd --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "waitEveal_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "waitEveal_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "waitEveal_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/waitEveal_icon.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/waitEveal_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc5c2da959b2c28ae071a10b623fa94aa9ed87d GIT binary patch literal 5160 zcmV+@6xZvCP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91I-mmp1ONa40RR91IsgCw0Hdp`^Z)=8l1W5CRA>d|T5FJ8#dSX2_uhHz z?Ck7Aqm@?g2NGz75MB_rN$?^FHV~ZHsTDDa%av5X#7VGmFm@c`EH0Om!j%+pY^RD! z%H)TQt#uL-zl(wW^SME zK7G#l`gHg0#|8Ke3GBVYDMH!35YlrM_JRnrScDF9F9u~^3?WL!9AN!@KDZu$-acg6 z=HVj>1k1N`=;^_j$}w~b0q+s;)3>xzeGX3_AbG7HSoe62<#N}%SW$vnd-MMI>aFRF znQ3SS%WZHNGlUSXXB)HS!tC_BPrW@el)Jv-D`MT8C^FP+aQ;83713oA?+bBG-41qMEOOxm`2^4^pUE$3D@L`Pmy_)!i zQ#kq3j?e5kfZlhZXS>loo@Kf2Ztr3M{xyKs10+wN2c51jzLQyX&ElK66}v+K`)zLW zX5#eFx1J|Jcpi9&5`Xx|7(0Mq9P#2Gf5hk7wE~LUuOoe^N(ERblvqta`nwOZsW1oXPLn_)3oE-2+H+j-wlBgK=q*x`v-0sTgh10c71R8pymLRvk@{Xz{C^MfwvJal{3Rak27#<_6}#Z^yL@t zYs2eAE{d=_pF3FWH0KgRkhvT{KL4cH_IT|cE1md>5i_=u2Ng&(62%2T=FqZ$ z@?<`O3}__$py~>6of?9y0<&V*^Hk%r*M7I~xjf`07d5u*S=bc1-r3@FV2py?2{(P? z?s)5^3%+5*jX#&;&m}KLj1Oqa^F0>ig&rht;?NC26D`w5 z4<{m$6D^C-K^@FvRubHDsn6awc4zvPBPGl_XRv4Jx*^E%@o~QNy30)j`R!P0K9Jfo zeyj}*Vg*E^p*;Qf8w8UwlehxFKCPLlQPHEo5~&_z{lf1Iu1m+ru5<0iX8?-Iadk7E zUC8_Uw>iJ{p{pN=HCTUaSI`*k0cD@I5@SV@)uF+dB0v%p#XccfNfvRdzb0gw@`Ey; zKt2gJp1fo6RcpV}-{0qweY8*kc<_w9^E8F%&7MBq37tlNU#I;CKb-w|vN`z!&lM)U z4+BHUKxu<-aFo_%$e{VvxC?osua=Mpd@M%9oH3tFF z5&#ZP3;5yNHJGWPU#L132IVA+{z@zeeEslP!-_LD z^}YEndNZGgkACL%E7Be59JX;vNKYxnQkhg5rYnwsPi`>a4=+9Qun$$wPyNrJ1ONC^ z4LwVseECsbNb4?7%SY@5vreISegF6VZ%bq3)(qFy>LV zYEY$1H?HSYaZ|v5f8EzVwKjgFCc4(8)p~r+swn~#CE@F&FpOiff1BI9DD@E>n{8^A z4Hatxg4j1e8-&RV4!XUR4h2lg$43AdwNOgn$_%Vzi`CTpk^cTpS9&$r^oOR@O-8i; z8(Il$=?AvQV)585s?~hqQZQBYo7X3mI+;s3K{$F+z%z$jIjPiDk<}Fxl8+NPe0Y@s zYp}~wkjDEe>S-)f)szlDL0L@Ts5Ri$j@zDi#AzGxx`%KdtGI$^2(%Yi@m+NL;G3}S z6E}2VM}D7&+h`fIg1`W!R2xD(nnhIrI9U_$#+aWg>-i0)X^Qc0V_&_dqrPKdb{#0< zle+wTSsvl>T$^?}n=@BzSWU_s91@h`16OvY^7JO^zOX!Mop0y0KtVXVWU zf`ISub>v=}7?e>ItAt7m*>!Kf%z}+s)hK8{gjdrcumHIfpvw`C6~`C3y}lpdnYD{z z1{}vjxkw0_oDQ`r$Hy_9<%R((HBV?D3RO0qVh9yP+aah+{P?GtRK{47=-`ixL`MU@ zjxkRGQ*GjdBpJvk{{ih2em)p%Whc(TgoE%zXxs8Y<8RZ#;4tz0szEPC#n@Zg(y)pd~t zs`!$qWSEeb{kjztl?LNt$# zClTad|GWZYvmX4@4M~{Bt>C}ysX`Ig0@VMcY-&)gN5>>Us?=q|aP28Pk60{owS0=} zfV$-g@+>i-3JfG!2QARgrleGigrt>5%?%xm482z;J}8S4QwZw5=PIyk*nv-Mu;7+8 zst!&k@ZheB?7~qy6j%+6bSqjmh!9o7Y7r7gvMs8n9;hlQ;W0W)p&kVw0wju?loLP- z(ap5V0eExVgRj422i>oN3z)6T4fw0BuUW^|7R<@Qi?O-IRdK+Bj|s7<}dV3a*(2jL!;O zOyH!1Tgy7#Se-u-Avb5i|aa(}N9>PsFc~XO<3N#7PSd9@#|Mj8(QYmWCcKFJ)PCDoocCF@?YlE#DIyvDW zJb<{UCWUZX#DtkzESguQ_=$n3LpV?m;r0hPeK1%hN>k-PkxVE)B2O1)5aj(ks<3|& zUp>E550V<-3(u8d=Mh(eq}C<*@-KBqX)KH60iO8^;SCu_rVdpTDQ>1v*qjgmrK>t~ z6xSsS0QU6#vf$X>E}W-*G^$oqxIVy=5`Cp}WY;B&xXAxvu8Qwh7eOY2B_Ad z;l&Xb5~x$lRxL>!r%|Bc;I$n(W>@^BfoZbe99=5p)gx8)LjaWSBjb%V5x3J`c0qzw zXG%|bH5Vs6>=vYl9uz2|G({9kTD35}=jRIqN0H)F?m2&G)Vm2O47l*Wr6q2Lk!P z&I;@pLQm3Lh}w=SP|z_EnwGInsBEbLCnBiYk2bw>V5YixIZw1^y&SBqn}|qc2$WLP zef#%_6N!ww^4hF5{ELytSKYYgPM(Nw^lG%=S0U=z&_J~_`L6+omZ_@Cp&w8bmD_t`+YV<$1XS#h$$3v-@`6%sd<@phE$$;7eqcDSL z3glVxx&o_cD#Lqx_&hG!X+3)a7Xy+P8$gQ-1Ym)ZTQ5Ig3@Ts?;_)Oa*B-Lp`qh-V z_8LeUrkfofLe(2kO4w~lS2!zBsu#O&c3h-NvtE%G+~r$V7z2;xe{9dzw(}TX%p!~Y z<0H@~Y4Qc;MQF_|^RdjqEzT+Bc_YL!8Dc=W-z*X+ia zSn^bEKP|WGoUft~#$4|OE+b9k`*?(+iWb(7F<4nj|E}}R(IZ2D8 zDP&}5yhK3SFi4~8%B1yVzaMD+`^00vhz=ThXZcu}Re^ zoa#}P4}hP$EG>_?rPNBtNqhF9O&!J?-}%Y2<+15cBghFlj3Q%nkRHTzV6b1N(tbWN z6Q2%IuPb0w9_3Xu31#@T3WA&zQ>D9|r+@WyWqF5@Lc7R5vXku9a_5V2#GEeRfl4p1 zF1&CWovN9M7`M1rj*Y%mayNYH>Me;SnTL5SeyLNf$U6`XNWCh2Pe`LfT3-%HFwrtJ zp}wIAp!O!3h!c-js}8`4seA38zV&iqS<3KuvR0{ic6&?AIo-ul6xkVo5*vcW3t{@E zXmqL_!5&4hX6*RT32()9E0(luSoQ#mS=(rrgC9fHc~f?5L=NZ`usk$7aCs>p3=lJ?79moqVNMKhj&FXH_FmDXO5Y7XCe(hJtuql&arz2ao-4?BKx( zyQAH(-L#!d%s8bYcVu@x&#%bN0VttV6&)YF)Bw# z-NsF8no^gwZ!sDZA7+;Meh*iD=$(Y#zz1K4Nl&X?5xy$ubGQnE8v@&T*(=%4!2aRg z{H@`Fy`RU zR-HCoGserqlb+`qEVZsZlUmunoHxeTGLx-C&2^aRo7GWeDaUy98K2;NR){`nN^b##)QSU+G{`CM-O$rwXR0)w| zmq_$5O;|WZ1Knm7(bELHdQu%IJMANZK04Q-Ds=2Yz@+Es6Lb2$KKLe=I4%qzNuUrY zR>_O;jCfg#lb^6rV$NH@RM~*+@yEx!Tk`C_yP%Szd`{1Kl0e$g71)_fwiT?*{ WDj_2`MERWn0000Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91bf5zO1ONa40RR91a{vGU0O~3Xt^fcsp-DtRRCodHeF>N!M|EfQ@xNv? zqx-aM%f=TrHZ~^s;PMh|z#It)CL4~0um-|zU_TO$<@z#Sz_AU15Af#O<%ro3V~7ER z*WoZ9;0<6KVu3IDkZegMc_8v zIKOtBaakVNN}!(_;La})N34SuKy(3gz`JO8dCvc_QwDPR+1wl0IF)VlQcP?;&flCyx*!Q zeyrQ;?dW!Tzdi8tojdOR%E#ISbVBxnlV0}v0Ii-AxVa(u$p!XF0CZ*`WjIA|?2Mx) zZc>kY@45&*>Ws^N(s$e|&OW)>*F4(`z4Mjw&+&W$P^lGuEv#|3qD*4?p5#*^n3fc+ zHgw$WMk-Brr)j!_Sig><_|EQR@9up+xO>xv8~?*3di+T*`->36Ilz^n89lc&Bp(I9 zK7oMF4y1sHbKll~A5PSU*G2&Gq(3?Dte{!DIPld=$;xR#JzT^f0Tk*_X_Baf{;;J6 zDH8DpJ#64-G&7({gEWP}^C_VbmuT<^z&Xh-d3jb1Pl>YW(ZD5fK=12j#hH{8Es@b(PjNm(TG7qa(iDK$Je*_kNxjo zyleGC>Sf=pty|gh`X^Q-GBeJdUx%z)5FQQ5wYrKs?cGT?`dnw@@E3n^<@@)pz3kof=J@iYbbc-M)*}b%VFt9&D-nnS zm=pbd{??y8n5sv%C9k>h4KJznHU8GG1<$6_BKOEFaBd(uq|<|$3pkb2>IR6}duLuB z^=9=kMLWaE+om4tQIAb}z4h_r#1%ig{Ifqe>7?g)(es{8y>&9*TT7tA>BA4~VFa`Q zrZdD2FJIx~5=8gPTYDD`y=mF1XRZB!R}0?m`(7jNWkahD92zUYnDE-5n&8^J(*wDX zma`o~O6&o&jMfzIbA0F+nND=h=&-Dyk1D;ePP6Q|6L-2_Xm8wh<@ziCWq9pnm(--U zE+5{LJW)gNVFI)a=5#~sYi{_`d9}g5Ptkh`&<(mq$HXCQV+4FAFvlNo1nR zu(;(cUn`j`>u0p4cuzZ|8O@Yq->J(~n(0b8_5yBkIj`2FS$St)((b(P;N_qB=h4e9 z3BvwPTADCn2p&58pw1J}*}$ap<<_n0tYf>u>94uyy?&$qA-c2+lZe191c(E|VUZx_ z17+nDQ4{uD;K2lcMi~o@U8B!-nKmVLqU{)+=?@%|ROowtjmlFid%Y_sesuda2e;K@ zwQilNJg*KJm$~ipKc~(E(CNV(-L}w=R)*fz-4CW`uUy?a?bT=gUDyi#5)&W3o|GsE z048t}Tuud=ihuz&W>=PjQ6tx+jTjChV=e>2+SkUAWtPrzPTXY~3q?oU%j=_h;`ns^ zN|UCj-Tr*%-bdd*{_xJJXywzraCek0Ja#m(D@=#Er_LYHA-XhiX0iYilb>+7ldia+ zum8jg&i!<)6}*wpmuM*e=MWSECqbeZl7uz1Iv9mK$z7Q?XLKq+LwSRWYd52{0i(ip zGMZ%izfEFUwmYKtCCm>MeTOkIC)kW}&3Xigk`X^W1v!c1SD? zkVesAX$4{!kxgN^$df!IOw$er5uHy}(CB;p;7Myf*Z;IepHkZu4tN~+SYY8hOSmFH zEO~QAKFv6!{o??%8ceLm$_?d(YnKOSTyWae^}gWswr9dEiJG{GMjN`68U`n{)7c8Z z3VLGN8ZK08)U87vwEz^)RRO2wQ>2t1uuO6jt7Gn zvBDLAfNCq4XHPvuKy9^l1qcqoF*vy6^Plfs_RVYFP^*U@h$bX}IXOhOL`GR1r%=Y@Lb{}3azZ}c0TaHP6s0T;f!5clu_(M* z$|+iWNW1M{k8a!bs^uGo_iZEn!!`3ggdVCJhP|9OFG?Dx0dv0be=bM=S9*7RUz zrA;7+kqb~UZ-XP@cgj^61J9O$ZOUktEhzP60wc2JETL7j37E}n7}|(PCX`jNoatm~ zudTdB^PGXz%Rju0Vz;C@#+Q1f^C^3AXuCN8TJD{4-b@zPy?eiMQ}41*z2c=|!~f55 zS66PEXo+Irvc_A=(JeKBWFi(&I8Pau@6xcLb#!WF;OhT5IqMrGB-7QS3qiZ6qj_3@ zDzq`NBYdQgCEX64Pit>k`hgd{EdI(JJ;YKbN%I+c=Kv^qV8(P*gx-leCs?0VJ9nz{ zuD*Olt-mp(0oWhYR6(njolojqr;0hu*MqHN_G! zMQjmc1{J;zS+|gzbqiG!Ys*-*oXQgU2oWAw9&koF1g& zvet3aV$Rb}_)yZKildu_S{L_X-gLUJ{`h2iI)E)dIlEi8MCz(LyWCq1rqlax+o=ym z(;RM)ZolSBED#62K^{kYqx}aj9=+-Ihm$i;^y=NQ1b1ibeN?;NJ3F8=47pD4B+uNT zcJas4j=JZZXgs`-S zllSNy!||nGdi67cTJRt73=lSPIwK6vZID*AD$+nHD=9krngz75ZS(3QeSP zJ{yNQp`8r1(hk?}qRiDvqAvB+;LrNs@#3>aw-3jNF=CCFmnTTB)iON|p!p*q-#c6W z_U#kt!sQG86Fr@`NQPQ5opapv8VZ~*GEGU#)&xKOE=Hf^w1z0r(Ulur$jySw>}3&f zt)rDiKd(a(qh&R(-dgAl_P=Sqy>uEt$+u~G=g8*G$&3HzOHQDlBD^N0M=h~sjtZsu zd70*kM!r#E!yFExl$m)_DRw8@u`l9cmI@_pDW_G9kWy*X!^7Qw(*L#>o!D%TCy%$6 zRscFv?;P`YtlttZS+(R+dgO9-LSv&ilo6&OBoLXTmXk5cZFI_&g-Fo6 zQufm5@FB`N+IP`mv1CY;@;YyGl{Yx>^3nghC4Ri;(h5Mcpvkq6oI9gV%{%377Y@(^ zUawVpQfrlSL#^c+LVI5V*su+sEHI;3_~^)^eR+Qg1jk>Yi#oQ^)Qr52M9d!MB&QBi z^Dpz?_L6~UpvLo++_`iPp{NGb47VuHlOej`T{czo9{$yi==2Lud!`=-XYtPyqyq8O z<{c*uPuec3`G!|CPHY{escnyoSh1}}Cc0HkapRC;hUo`q1*a@HXX4f!5n|2@I8qST zrNCx}tpI5CaEtN0QycT~Btm_#cClacnzB|3+v2e6oUK!suA&t>gczAk&nfc6k=i*N zjMhzuE*_-XFRdW@d7bP4&J0p1nhE-0z2WyYFNO`ooMUfRkF;Ic=dluQC`2*Ea67E@ zrOL9YE&zrhp4<(S~kB=Dckj6m39AZUi}b(U_C}#m+=++@JEL z1jE^|DG?Rf0)BXj8`w`0C;lreDM;+Oh_WfD_t@UfCx{rVD4fZk~SB zllsBM&5KX^gi@1j^wNWT3A2JPVQ$OJm{R$q45%G$m$N3iJY7?J4?i#xzv`VYJe97O zPR7k^-o$&#lp0h}kp@bUX;TrH@>R+0zfIJ?JQS-2c@Mi%gzKOk^11q0r*Pnya?tJ4 zJ%57oSbb$qOQTzf;>3=fo(dl}w{y zT_M8KBr~+j%GorTfx1$w`aM;r_~(H`D0SOmgYD3+NQ1#L=#YVK?5jmi%u00{Wlp3Z zm(`lW*CN{M|12!~XRK>wlgSd?;PAp`e_HRJU;FxK1i)5Z>K8sw^DqA8erOYr^4Xx_+^LhgdzZ7>uZ&`024ZCBsa#S34 zfmwci*8$YHfG(}F;Z`-5(7n4o-Z_^(qt6TcGx>-UkEn>$FDyxIQ!_@njU*Fs{z%UF z>^jY3sAM})`zYLCTVuE#WjAz>X|yXdf3G7uSkCbiJAI7^eG)JxACIA(dD z>e7uaEH_k{GseoGerph6%B*%~kDD^ho?w)g?UmD=v%goOk$E0sa|ft&_FMuw7ND!dAf7 zqp7#Dar}y78r`V`7(hwxm2v@tRaRJ2ZMV@g_O0o^viA=0XUgU17>yL-sSszKumO6am#l>k$lC7D4Mc?&YjjRqxnGC?W&@vc*cOS*h(0}9%N zCfKGfmDh3FWc9V4V?Y?3^2Dg#3X@>!ShaJ9iceck=TUw6qSSx_Mz>8dR6tEKy$R`uk}q2)i$%z zRNmI13Eo>CStQzInZWblr%?}`ZmR`&S|TgNWwWfUkIS<#vv0DtKAU&-h_-y=1P{Am zaO~p6i+wtYnr$6nGwBVe{5uLoiqrsVX1KWt(N4Pl?0AWysq&(>PtOb;BL%tgDkqFW z7EsM7Ia{UY*t4yZ3JdA0PYL+ucY!^xES@W>+R%G%-O^LIM@zVtHaUcgZDd6g2$nhR z(`+eO0MqF4GftkjI-={Tq#F_z`@KkEVzf~EU?)cTnQrA_sb7SMax1v-lDOv4w$vV^ z;=ML)JSsAc(6WuExiZq2a^pm;Dn(rJjL+fxtH6qf;;ZiHsPAlyESTIJ+Z0VOk9^7< z$dnO&MpU%MD#3uriJ<=pz2Yv8R(eVQ7`dmh$gmOJe3}93%y8wcmeIfn84J90Va=oY z@Sv^FsXNyQ@Qo5DwA0zFaYmf^4u6DcXg3R1aT}w@Mez{VKJy2<_%}S6sy4mf=<#mo znE>;qjXh`brLBooNvrA*St(_Pi3iaoxiQA){?s3gT004&MG9DG(aC%j!gR$mP{JzdjnNx;Y#%=%8%M zXAXMi)!6^g1$A{EU2GldmIIR(9PkSUwt}7Y9TnPa;XpP@sMsZ$p61}Twz2~B@Eyf` zk#(OjnPsLsEudm0>5hBp0IStY0iUCTrE+4NS}X3mDQL-CRfia-x1a8w(5pMFM?0;L zpZXI3q>I?&@ykQq0OsFO&-^y^Ogu+~bLSu}3r2L5jM3~whI!XPX`l9`x=kfNw8NTh zX-&YMK6cVt(off*T|$wrTIRCN3TV-Y)LlvqgA>~6Y(?V=de*+-b6z53g?Zw6YXh~I z8i;^%G1n%kB8%o9KRCA_h;`|i-^MwUY-191`7`V4k58$o37QJuvMEwGJkaH#9KgCR ziw#M|FVWFWGVvg$<(mRFZwSeYJxOsniA$I1wn{*y5Y`dtIOno7-8Ikm8B<*2EVV<` z^~_bL7K%vllf0>6+T{E-zQW((+;G3)>O0XhBR*$hY4HOWHq=W`ln{C9U4KwlCoJ;R z6+dfp&&A9*=eyG;+c@jwG_A92OJpTdd1{MB3Sc3wSdB6<=cvSKN>dNL=|(t!2p=ga zX+4sg0=Asd6Ah!zT&v>-#p)kfqD!k^0P`jSQ}=qh(M*x)qjxqIw^yEAQ-6ADP2t*A zK(oFZP4)7p<-_!flWOW457D(L)seZNec(OqbWYkd+rck-j(ar0BTo+cVL#S$ zY&DKXC7JiMQiZGqJ$kFC+Q(vc*0?KPn{omOyU%)Bknt%`87Y?ML)XZhvf4s^fAb@; z`o_btx#dM=j6o!zO;%m`g1W-_cDfBybu_$fxTm)ai5$UdFs_W5B%fa26Q zx2m9HlR4SgXuGP)q8#|(EkRWiwy6D3Yqxd^~;Y05~poC>En#bF=4?U8o+6R z4s1=OqRbF5arpyq`sq^pqc3QvKRiBE|MlF4dfgc{zWl*YATaCw+5_1X;>HJiG%+%E z9WbQ@lICi5nU>asWI3gs&QlLf)lM~{tq2x5n-!Tk^-y)7m(s7xw&A9}t=tft&`xJ( z0*q=mW!Mi}hS=yfBl>W_x9^I^w_^^?rigc)1hv8-Mw9&1w&Wd<&<_dZx|&$3elF=%ko-E zdpMTF+iFd^J))YnA>7%Ho&LN!E1-UTL8=!0#_M&XopFzB_L@7eUfXAY-o^{Wgwj9%G>B!g~&zMZT!( zkLYigfPdVni-Pv()DC)k-G01mUtHl-oFJ~-zPvptkpU*0tWRepAQO4Uoj+9s6AK0( zuK-hO0;umLQ2*jgdWeZOtU$pp9vKV`zW7?13e!=PHcPxjMN-o{_a_tW9j#>pb`s!X z0&`Vc2I!FXOMiG~6YGX!i&K9hPWzTF_jlgEYX^<$yX6@NuAFw-32{;Klp62ydSuq{ zQNheQjv{+Aza7BDFpHiEKp4yyHq?cMo>{B~y0Wwg8O80h=(zp*E38c zA^^>mrhCHQjP2+x)eD@!0wR3&L}NtcP_7h9Ge9}3ck=ltrS@3vu8ljU=soKj_~^7; zhj1M-G$+(T5fxLn6|O8R;n<%CiHXg}Xkvp25d0sYVHQ0TKNFm3Ly!FXUv$)$>6|H- zNbIN6Cfm3wL((Y7ENuxcq3va2Zaa;FbnUdEv2TpN8$%O6>QsV7h7A`l?F^vi$uax$ zZ<-kNuTF#JlGLw9X)qP1qx4)+ryc(i7V=JH;TKmW&D<=Op}gsyV#|7#6}GJT5CHQk zS~U1B&Y5ILX0zuXGYgoc`{`eH)IZ(dwHFQI+O(-@j7cnpC4IvXez|>g)b*lYPITJz z&_b*+AS{51)wNjVpZcrpq5A7VTW#5~TAVIAZn+m7Y~K@iqX~MkRNh&tMrtxR6+kCb zq5!Lg=7e@4(q(l{>{urr2Z6+J|cw&T07uvSnyJ?(e(?8M+QPVe$m0eGXmh4PJt+go1m0r!x z1en**avpAh;hfndV6LDQpt*qgIRf)b1ZDs*sVdhMp*f|U%^OCEZ(PmmW#!zK*tXLr zMCe}Kk9vE4!*@P$$-)>oR~>G-BAo|xNc)Iclzf#hXhuBK_1g#1h4ehj`~~HDas`8 zsLYwnhFQ8fO+e!O_rCM%^sBO2*H6^v)_2wCf344%08@@C_J?-j*NmwMbLBNtjt5bZ zlp7}*`Xm?qM)U#iv7Pr!QLGVj#2y%EELb~-k>S|H0aVTwiqE5%80quqQa+FRb((F3 zed+ew9~tXS#oux-Uvkb;_2OSf5YI3jejsiq{y_t*vs>z& zeEwX@SOAm!`7^^zOgn%IOQ$mI>how%54$wu>N|E(cwpjjOTbGYL!w&n);viC?9Z83t^k zOLF6F?%=3wfhmhGAjZ+n_1m{>?x`q1ta%N9uRn3>GaIlOvegOKrqiBW(6!H9Jdk#_ z(dEmrqv=4@PQzM%5_IBZps(hQ?>hL^!A6a~?HLTxXQJ3ETdO6g9z%0NI}yon1y6E~ zHVSyA=hm&U+D1=iT}n5Y@q17N-RUo!|KXNc-As!H`gbl`ihBp=t_oCb20U@T#9u%? z8Ut6}FL*_pIL0({cqhKwGDgICYs(T&L8l(nC@NSVkJ@A2=;ZZDU*HAJMiMrHB=9HF zy10-)S9d$3~IZ7*-7ZFKqOK+3Z;l}SgbpP3J zf6liWgS9s&9r_u$+bE*5yihJrD`%3Tj3o3QAU(J*p+DV=Sf8RPAcI+w31S1-Purl!Vk3hvr+ zU%Y6E-)v7rQB>!cPmE1u!>#_6r>VYt{)C`B6dTW-`8xPuXIMqtR-dIX=-ZUJa`)~`J6@XR`yAd5JBlUrV&ZXXDJ58Et;PoA| zGT43Jj(=SJ2gkj_uQyIh>HV)c$Hi-t7G;u$SZGPPh{Rmr< zlML@q(3e2y>GWU%-wJbWyR@#S?2A;FOCDCb@0WUm ztpL4q(xX$_fR~Jf0|~umHEk%fm@tRo78PXUlCCb>4^h?B#nDUUnp7@f!d@%Ew7Rbu zc)Nb|@Nj$o_*L}G5uRq?^0@|4V{O}+(7B=x3d+$d`jToHo3^$xnF%8?ERP6W$I|JQ zFM)85#dWjDZQ!*@%Xe#FUE0|)hGFxCvX(D|ky`_l&((`qrAg#Zbg%N)Z{CwoED=-0 zRxVXAGTLj;ISjX`avDJMCtSHE#cIXK;(-L?`y{;zrKZBTe&)*XzJI;@`%$}lJ$-iB zG$U)3P`T7(IH8@+T7qrl0oNK@Ao`SwlBpF*rYY}3F+wZQ^+;AsaGo;4&j`o3kXFg9 z&}AAwh$URMEEy`s6QNG`hWMuseZRYIWr$dEOewaAF=AbP?U~0$T#|GeK#h2a{F$Mb z)(F%fZY2GrzVn`~pNQL?``J;-v+qs=z>shi*j$U#j8dK%#wyVzxs)>kk&Asdg-nAvMN51KuJ#tvB$Hx@SkAY1qMjK5%^wL> zy>z0#m0;XYmkfHlZ~x7niCtqKq@j021=Lf?b7`0cLgxe&&WVCimaOO$1A)BgR8ej@ zq1}2c(8jRnaMsOam6!uSN@lf+U9C!cr;N6jvADFT&@*-vqfu{U;)Cj;oqN*8pobVD zmKgcw(>qb`41ls*_7XA74#i%86 zcFJ{Gxv`O}&#?P{SWYUOvMl2m%CS9tJ()dQ ziLE%33B{>oas{{vT(O85OwJIPHG0OkJ^8idu1%lp>+e&D6T#!aoPyH_JNUuyZ>$Tdwb&(U*+=$O$v0IY40}P(3}V=Xo;gX z(=}%n`mFh4UQ#w^GMrF7R%VH;yro>3r7gi~oTHs^wPpIKdQhijy~(fn>mPehYtP6* z#00V77*VVcGoIB_4CR`$JQ13E?}RgS2p!7CZ>7MvUiq~pS{4jC`+Gst>kDvCFY1qj z4PtblH-WWU{v=jzc`tM4aZ!f|s5A7M>g0Tibw@ae6Fgs^I-s`0aeC5W zfw%EX>#v{q?cO)X-R^z#c_^}=tJeX`0+~D7S!jam(p1_hVHdTG^I>|wvPslJE(rQp2-FuWt(86O!6M#A2^QNGJ^l<`;qO*gFuNufXH41C=?(`_A zx1wNj{}c?U<6d&+CE?M;U zk!o%1i*;!|BiD)6#zWC~7O2;KFg-Z_N&n{${Q$bE)l&38D9`vqTGo?uCPuF#2_~wZ zKcKKOlueSPr{dK(Q*k#~RO@F@qgumn5}8s!5H^aC1 z_10nlix=tZpqemK5INAOi)kIzV&Jt7D;RhjaNKg%4hYf7*Ol>6WuZQr^zgmRZf8Vw zd)LKVcl{rA|L)zvss+6I)Ad4HXfc;@Skg1+Oc`dU@0qCe@eQ>oiESQ$qPXd$APb=4 z6|MLLF}?!7c%>1a?(>p`2oE!i0!iI4fivrcQRUifCe5xkm! z9i(3{SM*p^qyt<9CQEee8G^iyhK0opuCZkprdX+WYCe?(Awc%J2h(o+?O@NrFL&BT~3J|Yx({*M`wdm4hDmMYD9%kXs{J>-j*v)U7E2uR5)>}S$ zYCoM@JM@c_IPBWq+8LwAy{0DB%8O1tBV4)owSLWil~-@Bz{`N~jZM5i7ATc^3pt+w z#|oxDxqQ$D8l4n$j8$En!(naGA&<8Zq%^$ZxmkLG`{s22_}BeAwr!Yf(F17%p^r6L z-7D)!gBJC0=Y%Iev}l0qOm{YWB*BE^^X#GAcG}GhD&CbYpLxc4wKvuzVC#NgIOX?f z@iz`Sexpr8aM1MutlyzKa?e@4uC{8)C4Q^^NA$afGw2>-ozJoKng@JD4;y1+KwwC! z0AWQ9n5%EtY^B7UVFP7+SA>A}eHmJ$&&Hny_Kk$CFb8AAg*O-BM${ zJqt7$0Z6*>PiwR8`4Wo;vfy5x0Kt>__e@y9c9;N#sWPbG@+U)=2+e0=7$O==(GjcZWN1Yh7!g_4MP;^cS`+^6J4w^oC0M)Mb-?4oCl} z_wpb0UZmJua59=Hrzex15vH^}r{5bvmr(pON&3N1w=+)T{T3C)x2cJ#+qxU~-q+fC zV63-X53T5too1cyFyW>IZcb;ta)5f}6yFBJofCj*KfMeG>H0mt;C}ePg!#h=D9jZ= z1&iLi%Wbij&nq>nyJs zK8t>*`V2y2Ieijisb6dP7*;jV&<2G>ry00lVqF6LhVMDA(khFBOG(r$q~oIO+9 zJM4gpSp)2lIbaH)=6fskRQj}{9)`=nwjvtd{4OmQ(o5UuSB%|BT74QBPiqSrL2YHL z6&|x7FloWD!U_)P-{; zZcaTT^b$AfO7X&)-vscalP2^g?plZ1hZQMoZRPbEDHR}S69%d? zN)L?F-H#g0Qqwy9)`B*V00fB8!LaJl`8Exin`oM6V9)0k6kvk&x_l{qw}l_F3REc=>jn431m(Spn~Ua01kP8htvg-`3{H} zR`GMny{)A)1BrqdUa>vFy^`xRyC)D(sdjc?p^0;B8C?9BfzFlmEiil~LBDYu!0OkJ zq8CFBppj0u>38Q5padLr^v~W2Sn7p%L4~~2V7lIjGIsWg%uxU&+`u+t!?nth+RqFu zYL&?oXct`MalXZ{3_5P_r*s8K=W`gG)vxv@QeMxaxpWC+U$wSJ;RRdZ3xJ?8$&n!y zd6~6>whwR}ML@zYY)>Mf+JVZ66GYCe7}+AY;OTecucJ>f?zHUy(2&ix;XEih`VC!M z6#xVe6C9*7f(V5tacD*LRok2zUsdq%^PC_cOFa?H9Ee~X`I#$fnd^2G0V*yRfCak(T(B{jLMj`2vCwl#1vt^Q z0D>XIDd-Z2U>;pS!Xs>l6aZc1iQdlwFx)Xc_;GvYf(Ii{ApnbQehL8Ux?BOSD|UOb z%b$*}1kP1HI(wn(VUd1{0a|ol^0NRfYSX4qJ>aHo%I^igkHGIEa1=-2{{!nx^HTM} R5-I=y002ovPDHLkV1iR9(MA9O literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/waitEveal_icon@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/MyCenetr/waitEveal_icon.imageset/waitEveal_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e41afc4e028796f7cd28286bb3ca9e5539d7791e GIT binary patch literal 23169 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 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Satisfaction_icon.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Satisfaction_icon.imageset/Contents.json new file mode 100644 index 0000000..4583514 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Satisfaction_icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Satisfaction_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Satisfaction_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Satisfaction_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Satisfaction_icon.imageset/Satisfaction_icon.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/Satisfaction_icon.imageset/Satisfaction_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6122bcbdde1080d16d189b36732dd4f95000f88f GIT binary patch literal 2398 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 Aga7~l literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/Contents.json new file mode 100644 index 0000000..8b742c3 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "cancalSuccess.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "cancalSuccess@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "cancalSuccess@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/cancalSuccess.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/cancalSuccess.png new file mode 100644 index 0000000000000000000000000000000000000000..c136ed4f8dcff667ed426bf85fc87e873a61a092 GIT binary patch literal 5197 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

!xOB--FFw39{Sp`j0g?H?NSBnG`oD zL3`vln2L-wVL}0i@MmC{96H2K6Rl;^q@VB?GCzl%8+i8k1rR14yr>&`@dd#e=Vaji&^IQ8tA)-!*IcbeCh-E@z{rolNOT zzM4$JImzEhn&}tB_+%wjobOir@VnzqxQ!Bj-#R%{zN$DJ0YcQdggO+}3ZbqM?sp@} zZ+MRJENANiIFZlXJQ%hE81ECym!Q^bx&(ubHq7JM|7e6KBPkA!@@}sd)9lGNwKE{{ zRFaxJ2;R%RXg~uD*h>ZWi>&(kIuef~fAC3$^Z)n9fdl^sGPW`qAzYj000000NkvXX Hu0mjf9Dwcz literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/cancalSuccess@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/cancalSuccess.imageset/cancalSuccess@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b3777ebabbfc6691791855f3c6307db64eac2c5b GIT binary patch literal 15056 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Π5 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

j2KVK6_LNV?e=gX>lqR2hzY$kR8OQ_YE) zMcHHI>nK=0xfRsAf$!!9tEvt&BZ7V1*2L^;xURryAhiVnkjNrOnSm`^#$mrciXgkw zux=a=woQd{%TJ(_ck1Ei?I5I1*|$c<)|K+u;Fook?TaX}k|?ptbuoBt>js7p>s)%*+ zHzRp|ArtH)sQeCmG8XjIAdLFYnFQ~1k zC^Qxo`!)_ym%$1}lx^DNS?}>wW?}z=bj8VLG{}H}?*nN70s{~jfWQC*1|Tp1fs+vU YKSsUEzADZdC;$Ke07*qoM6N<$f*B|e?T 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 W*lShe@fj^(u00001b5ch_0Itp) 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

@^u$E^2pTcB16Ccw5pcA~; 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 V(Ex^^;-vrp002ovPDHLkV1mLz&Ts$# literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/Contents.json new file mode 100644 index 0000000..17ad99c --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "doctorHot.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "doctorHot@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "doctorHot@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/doctorHot.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/doctorHot.png new file mode 100644 index 0000000000000000000000000000000000000000..568c73ecd27db503e949b2d262be92b7f58bc068 GIT binary patch literal 477 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRS!3HG%PBB{nq!^2X+?^QKos)S918M+Y68XZ1O_`(B`M9P`?^;~^VVSLD*>;wQ%c86)Q`gl* zN!9H?y)^wAQ|?lsEe(z=C$CQ5XS{B`?X?p!5h6lfdb@&b!d*+k6^&*}T)44Qe14ky zDhK1rPd&TRji#@(ooDebRMnkPG;1B_^IFU0zTM~f_nJI+=KK|?$~GePCwoFK1m)+CnQx^ZetiI$2|J>INeDmZ|TtPwW>FVdQ&MBb@0Ky5g AQvd(} literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/doctorHot@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/doctorHot@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ea88b586d021ea4858479f198f5b96167b729d11 GIT binary patch literal 894 zcmV-^1A+XBP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR915}*SB1ONa40RR918vpp3L`KV7DyVjNON==$98R_AX~IdLI@&~!gfJ~o4`T_vdK0wq8`p|s?EA-;mOGoE0k!P{L>Af z-@SvKL1||ciWV+vjgs~46o0t!_z}$GBn{yHRik}f#WzQHwO*zAefN!o?dnq2gK@tKqSuM7O9FMACin ztX-f259Yi`W~F~<7>s&Hm%2Oad9c>CN(_q6DX2!k5l7`tIw%g%(D4O%uz~+HvjO{W4O+_gdZj>-+lN6;`SMxumNLL?|LK_&-V3)a=+ZFah}sxczx+%Z4=qF*DyNRjP$`&A>h1);WLl@=-t^89o_4Pg& zgLuaNq0sL&m`9Q6WXks`3-nKknP~ht?XGjy+EyCE0A0p;1?uhHSI<9=0+g(YzhOKn UWn&D8xBvhE07*qoM6N<$f*Wgy4*&oF literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/doctorHot@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/doctorHot.imageset/doctorHot@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f9791852b47877caf07d9bcc3350dc8e7f6cf39c GIT binary patch literal 1379 zcmV-p1)TbcP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR918=wOK1ONa40RR91DF6Tf04?sn9{>OZ%}GQ-R9FeMSY2owRTRGG-1*rg zrnMn9Ghfp_SRxTKVzD7#U>hps2yy6iX|HzQ0$ z1_CyjIPXHm65^)}Jls=KALw+tvl-#MXEQ4ro83CtD}>%yZ^m>SWd|D1dYC#y?-YFF z)-suC%K-$~P`MsW9F8OOX&nuKH;S3u{`gqD-xAr?t?*c9gm}2=_U{fFh)Y zeAj()=;8Wtes77a%W@yE1nlvGN+XQwH=+`qC|45m>v~|=tPWi7+>}gbp6f=`?`Waz zxpJt7sD1Y-I!gB=#kEt9)sD0fnJ4}`PJ3!|qqV9B<9ALo*;~|g>bFDF$gX8_`wYbA zNv0CDGOwM2M^_8c6L(yY%+2JUHUzv+L^5blfpL)fKHDS0UAmyw#K#(v6*D_uLBNlw zvbvHIF*qlJCd!LMdvm_kkdYD6J~?Qkc$-X93zhl2dy^jPniQqDMGaXooqJ6J9xrQc zwOSByu&B=xLKx+8#kdlE<7btum>zn`lJZTCrmctwl!{7#7UyoUN`Kuz<_`|u3ka`r zmJ=3U9IM)AGAgWZM1TLk)sNIcJvxdikT0fC-p+#BZlh%oUZql?<7W~^M{5AF{PTr= zDx7_uYA!{sPQsw{&`NyUVe7N?K1k(qm@?dva4Xg0gzpkSkX+3Kh8%%>zFLX2G*Ec_ zsWp5QW*4)U>e;vgIVf7Iqupa){2CuGrkx{b;~9fYSjXCKHf<_TsZ%bjI1zze+_ueL zXLk(?B}OD-7m>B!NO(DYXWWuCeB0#7Sw<{mcHbvN(Gy@X3LjeSc^H$80`> zmVu3xMT0(OKe+Kyh_AERTYY6r(7;3db7-kriilWQQdrpmV`Ed{Ne$!UGg`xl8>q|X z5~Y)I+@SKOp@TzA!~s;V1sxOlALuCGOY-s?Yu#c~%6{z6II4_$%+p_fA7!da#vho_ z*UF(2`xgtPi2oLg9GX4Zp6)TCqV#!R=w02D`S0TP4Fi~Vob{b$@iNKVu9U<(SxhUW z5{(p_0SvkdkofWubCrG*obthVZ`JtczsHHV-;gXanoZ~WB*G5RI!zUOKZ$I3q7z_f z!eyNqHjAyoQUuBw|chi3hHYc?JLg literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/Contents.json new file mode 100644 index 0000000..cddcf1b --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "foundDoctor.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "foundDoctor@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "foundDoctor@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/foundDoctor.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/foundDoctor.png new file mode 100644 index 0000000000000000000000000000000000000000..44b9062b0991016a53180a5dc454584eab7d5f2d GIT binary patch literal 810 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&Rm5z%<3v#WBP} zFgMuOLo`st?)kqn=Rd!c?mlyZqbtnu;whsRl})kTYZOWr&*)a-h~AR%SV<`(F!!>8 z(5;q4Y4dk?R9_3GS~uvOXfE#y@Cfp>FR zYJ%c9G&Fmr9STaF_BmW9NU~GyOxVI+$^L~?(sdk}mwi(_spwQ}z3E~4%2fW-_U9jj z2?#kR%rmVuX?>&-Q5CPxS-LIe*#Buib9Z!9>Bb&EZou@YXk(envkR|urf9ELoH1J_ zD#7(*;$7yw6LTM3kl=bayGC$P5$hVmKP>{GJVy*4TK#6}*m&BZ^u3U!e)BsS>GI`K zQ?>u?p3u8hbo0@$zJJ?$4HIlEO#Koqo|-Ign3_{;5PpaCJ_Q8l;%l#pAOvj<3Z#F(|J!+-?OcCe$CxJHc$T1ul4+ynP0c~R4U)uF2QrEn15H@O8u2dp%sBYVZJj9=SZ3}v^?B)0hiTDAKd3%(Io)#PuG*6yTW?7|KjL!fyOpir zokI`r+}82RxhpqoN!r!QO$%Q>|0uTNtIGBb2iIp!?+9a!UvS)}uJp-$*?5_GDQ}Wb lPOo5-I#B3kBkuC;qWp4I^^<>2mtFy-Q%_evmvv4FO#tlxTeScH literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/foundDoctor@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/foundDoctor@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..68c7f7e07bad718faf13ec9b015f7e2a706e78c0 GIT binary patch literal 1690 zcmV;L24(q)P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AD{yO1ONa40RR919{>OV0C0!Z_5c6|1W80eR7ee_S8Iq=RUAL(+;iv7 z%sTr}vo%aVESj?7T5II4td%G&N+1gwnTw{o14dF2LG&pilt}4=Bxb;!}b9*8vklbUW_@1x3c zjmIcggoz@LQcKRqwvBMM29TLU8OV&giZRHse}UjIAT_7)M$$h}O%H_J%-Q|3o==%& z@sY%AH|Nf@EE(a%vOFnMJnY=p>C9#7MD}GfITp5L3!JorN1Rqki9H54@n0Y~RBVyX zy?3~(Y4>aQdZxKfWIe*K6()F63o(l`8pRdcQY&V{O9|N8=B`%WP$bH)NFk3_rbyc` z_105n`J^Yp=AXt~v@okR?MU@5JREDf5%0gSPTTe#gv~-2!@tYXJBK#xQ}8i=7knWU zjenS&AU*H2M_K!^%4hBuwx0Z33=WNW;-IbS8a7jleggAXnXq{%!Cmu6n21dFoD}Na z?itMp$6^VLb5*x^2d{9B;II!5Y%mboBAp>D#9KILXFB@MH5Nm|P(g#5STl^bPDn68 ziVqm`Gb5!j!g(x6H4vPHtP^4+Gi*Hm{|KVM_{qgkb!8%GpFr@gil?t4x;J8Be<67U zEuL!3azX?t`X?l!P5WtmpvMP-n@zi_n$IYuKSObt3L|jNlv^c5nkxNvSIvrBfl3%G z32qiB%h@Z^*&F5*<%+3%EQGuw^oNJ4n~)Vt%aq{Vv8VdrcCW(xcX=2D9*{1XZTmT1 zX0m&4Ud?=58a6)@80V80ZA<;qU@846<9r1%Q6L1ODW72|2<3|oyhNx!QPX#I)ifQQ zyhqS;S>R^j2K{BIIyJYA5~~djMkArRdNjig;Eu0rEl#@0^oe70R+r3ZlL<@-9#1A_ zDkYatPL@(vet&3s^Y3N@lkY_=Hk~7n4kritkJr9nx)onK274RPPptyMgwDEubk7cM zp^S17_;Woye11cC4YBCUFzia$cOI{Z5RuAUkEnr`eKXc3^DxEVah<4AL+&NJBD%;M z$ry#(_?*{_e4e~>=j>PY8zp6(dxT|Q2GEYvy%FTF&l^Br~URv!?pk>3y& zDi<6KZF79*%~OGazv0fs2(D;5K}GWgKW4qi+?CI?Tz3l}8{>eKBFRex@ zJ%Xb7h=g)b&nHa>%jmLP?eylt;_<(gQSvP1R)eoMe!~0*ahZk1wXU`teh?N|Ylhj* z`@NM!(>*98(L#%CCW-_ba3_SGQExAr!vN)Ut7Y3$HLI|MK&qe-koYLxpQvIPuGX^< z7?)AA{Z^Wi7vqD8y72^dB(FSy=d}{8@`J?Sz{-myx*Vnz?KB-|IbymPRH{m?-8aYU zdqTXy9Vccwm~zDLhA7#>V1~uzE;1YAC4r!C+=_T!W1c&P&aXw~+hVLzt{6N7Lp_5F z-!mz)TrsR+wrNlNQ$tlj8XqW)>h+{ACI3Au%LKKeSCq#ud^-ds?pqoI)NXi6gf kn@rijIH*!dB%Zha19RoKL)_rU?EnA(07*qoM6N<$f|1q?>Hq)$ literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/foundDoctor@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/foundDoctor.imageset/foundDoctor@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f1adfe84fb1cf9493e7023a752989026c77510 GIT binary patch literal 2259 zcmV;^2rT!BP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FQ5Ye1ONa40RR91F8}}l0O(Z4_W%G0JxN4CRA>dgS$k|0#~J@-cK7_` ze73KrMo~#6vsy*W%kZmXA*zXKwjjd4Q-mU7`+bZiNF){Wzd`60 z8of!D>Jp)XkM-iBf&Jp5vdH zW;zAqtI>d3$a(k?L*So9pYB(>P265hsfOaY-CN`TlOjke!L4ywGg1|A+Z3U zvjRsXx)J1kibPv8tuUec7IdE$0#VIcL?L|4hmG|#LgiV-A)xyTNimEekV5o)#T+KY zIuDfBe%Etpeby=cIf9lHOMQlp;LOE8~Rtj-#`Oqiw^AcIGh zX@(3Xi&@~7z=osIOcMa;~+SI@^UB=}5r<5W_ieEQPtz)p_ zKNpUP2dv4a-6_m0cJ_77V_n?>8>`VdYe?`S1YnlChBq}Zc%-^B@cU!UR2}ik@V}0U zn^S4CAnq7=bCzxv&Lhp7Z&_ldF1ZxlVxU(LU3HKqN7g}^g${-()K*9 zJ+XVJYxeM{su7a!#VY$XO!)F4w9FgwHI6TMVRtLDME-tBULJn5W$wCOM|D^7)QzUn z?&1EA<`3t=b{vQF{RV9zbdag2|sPocxMZG z;c!twdh2oC@#XdOol?<6>`pkm=U}An3ERM9{p}S%hHjRPz_Atxi@gj_f!>EE{Z>=z zx#o)cZrg{gd$6p&FPjZt@VozavUEVD*xo4Zxb#M~t{F{C@`yp6?5xZEY!A)#W2I#_|Q92Ay261!?em z&{#62bzLjs9I^U~Y3PqXU%Kj|pDW)emd6*)!x;b0X9wJd%GDS)ck7n*xF2wv=L_DV zk#L?SWi}jc{Ml~AOqwtFV%B<)^v-1}d}eha{*=v^FZiEV*4k&zBiW4PpD*5#gI8Y4 zX4eLd@Q0Fq z>*!Q$2Oc(#Q5>dUL=SAjd*FsUy6(^P<N7ukNqYbFF#Dia6%JXltrDw5XY^-k?zvL!Q{`rupxz{kToUyg5P_ty=Z8Ls8J+u zWwP$VNpvMZ&(Dkuw#=JbD(da*Go=z8h}};X9~-A6=mLgZ3`6jBT%2^JDofrwB$j$! zcYA_w>}y}Fr1&NTZbt}ifRpr1z&K}DUtTMa^1)w*Z@c8eb0tLwW3zGNa}4ufjjI5$ zeU6BTR5f24X)JAdV zLmUYrJ6T4oRBH6duEbmEFDJ5zPwINeh(d7bWZ@}L6hE+ zCh3hfZrRgoR3TqCKq=Ql#{A21%QyOl9C-u@Akg+kP2P%yBDbi2 z>Pcu?L&L=rt`jjGb>?k8paQe76oMYwt9 zxw#q|r!T}tmZJ}3(sU|(7`?GRla^~8>2{tS`SD$xt5s|xFe#gHJ$}D!DjJXNfQO&L z&7{>l7gxAHl@gA+axvniiymEP^DsJZ_matl&Qi4EtA~jjVE!N%LvFg*8>P1k=-Twt hO(qB0-!;L{{2%9?-Ej|l=dS<&002ovPDHLkV1j;(LjwQ+ literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/Contents.json new file mode 100644 index 0000000..a328960 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hospatilAddress.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hospatilAddress@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hospatilAddress@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/hospatilAddress.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/hospatilAddress.png new file mode 100644 index 0000000000000000000000000000000000000000..e2ea61e108ba229339009e54f9829198f81ecb7f GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0vp@KrFz)1|-ie{%Q%N7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TW!7cL6h;EdWwzxXXJkP}xmS7sn6{ zQQx4A-b{re-`)i|PbuJ%m0Gl6)+A$>mI6(VC|Rjj`WYPss~1jd(pj|7e!;S)rez%M z1t(Sg1BJNMIR(3%E;tyS-}iop`o9NvtKV1O|9tU6timfX$L|Ni^0$OG0J zn-^&uk6Uj(`E1(%mQ@}CeC^Loe68K*DX=YMW@@v!nYVp+q}Eg|9~~2+&K7}mhgk-` zmz9DY6n#TOf0Y+Z`}FhA>}ft~ThlgIa!%4?65tV#OWc2;d0PR`&k!5A{g-Uy&NCfw zmUwmTL9^fT&5faXf9n3XUVa(Us2|i}+{yS|tI4z{y-|D5fp1z;jD^m#%J0EYX~h{5*8Gru1tqx$R617TwqFw3w=_=gVf*9N)U`Bhx+)2b;@TTl)$k z<%_GH9huquop<-9ymhauq+Ty;yLV68BJ_p{i=yAd(g6E|yENm@JS^LNnITId;(n{k zgfLf!Ii)oZlt1YP>P`Rcu!q%{bCdD%OSg}^?1|NzezG{D$xN#Ex`Tp28|OyFO@DZo zw>mxa*>O$9Ge+;ao?6NddwyFfn;$j%WFKDO|L4KD_~MI-_1CK#66EeVOrDyw@rP#V uuY*-g*Is{}pJ4E#h0~DZn&Jvi-#_;GZoG9Hbevj2k?rZ~=d#Wzp$P!gzV-qD literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/hospatilAddress@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/hospatilAddress@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c5886bf70b090b3025531e94531193d06509f4 GIT binary patch literal 1225 zcmV;)1UCDLP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR918lVFJ1ONa40RR91AOHXW0H;_MEdT%nGf6~2R7ee-mfLGwRTRcMC+Rem z(hw9vLQEhth%^i~H%%IdFG?MJ5Nf?3Vx=JTsV_>4DEWaI@r@38j#7ZM*01+p}g$ai;lmseI+7CfIny5ZsB zLx6vcW8dva0CID85Oagr!?UxqQ%Z0so30r0CzTTvgSlTE4u{d8)6*41r5}6eM!RAS za4b|DDxoXp!GN<)C6{eJn~iRkvDa-rY+dT8Vsm2Gov_>Hv)SlK4|)9dBN+Ql3UMyj z66GL37jj2J_x-H!MKYP#r=41@b{@dLZD>tRP0#i9^`&jTpe>ut?g8u=D`<9gI=#`{ z-2A1pw6t^y%TF{A3W8kc@s^gB(;FExl?Uu33Cm^-p@gJ^xlw*+KPil8TxfKjb9Hs~dV72O zuT=OrwuWy86)JM1k+ z_`b%HBqE`c_vqy9q!`%~JCd_hDsA)n`406y0Pl(3iKY`hD<}A;6T2?L@FclZFM^#v zFn6(i0q_GreIF_D0H nb7+JgLRja?e>(W&HzN8M-I40Mpb{iX00000NkvXXu0mjf_d^_4 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/hospatilAddress@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/hospatilAddress.imageset/hospatilAddress@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f1331e3968175d92fdcdcd20a2932a1b21be3181 GIT binary patch literal 1880 zcmV-e2dDUnP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91C!hlW1ONa40RR91FaQ7m0POUMIsgC$!bwCyR9FeMnQ3fPRTRfNGu<~W z)mGZ7Eh&~#nA$?Y7CtmWiXW6kX<}lG;uee=6_*brY9xja0*V@mU&IAtj6sRSEka2R zcA0L}F2sd`mg&%1id9?eO8uS5d-e4(ZyVa1+_~F1|MS1+-h1ACZ(I>!q|(yTdE?{b zUR2j!x^&6wa=EgpUqg;3UnHNOnwt8}?RK|OKN=Mk)mB$mcY(U2dteEISv7~O=< z?c@@&9sMcf8p&TWi9=0IO&!#2B|G2|OP4NP5FH);6ySG}Gawit*=|B7LNYo5@@HdX zV|&}%+fQ5RTaj}W7Z=|T@D6g8fH@(hH!cJf3_mz8wzRaoPup;ohUC0nZ$e~bRjDYR{M_U5 zZ1MSgf9uCR`i_Evf@nOppZ?0ZB&OPhU_SK)DJdz3`}_MR)qW{wkgKe$^b8LVKa0YX zgb1zNoYo0BO9(d?SFKuAck<-P={-1uTzq`|ZFuW#a@3r%(Sgefk;?`L2b%+dz$tZj znp|F9UQ$d<%qMs)QysKZGV5TNKvtGy41E`UZVE>y8+ma^VNz1kM*{-`V`4i}ek3I( zCO(ZozTM?ij8AcJn%U5`K%8OrgY;ibJ%|2M>cwP_c*ZJ;40FmC9?0$x`QT|SDJi)g zQdIygv;%~kc;yGmU6i%W&CTca##gLZkxG~-!QeBDt#yF=D>`c$8yn9CJtwoIBi9Z9 zazgANTi~(U+S)(#q||mpL&E^|Z&$Bg?Hd^x*@xcUR;wcRnQ*S~LHDdjLWlBbDzYLc z9>c()*x1-D5c^XlVpeu{caP-cQ{=~M zYHI#5wV)dmdC?PnnV?xhMuy9Umz#aDm`1kJX{aZl$m~3E;zYnu$YenDMBgU4Y~h6$ z-CmSTrz3zYXAgU!#>Bqmkmw7J4T2Jmyl#YVvO*Oway$FL@|t6YCHgp`-HM!G2roCn zsb+whvBB!<>IqHTaaHsoX6qm!mnugi#*P&x5scb)WX)u-H*Pkrj^VjzH;u~zs4Ac< zuhO-{Y0BP~Cx~TY61}plO;jv}5x8O5vSsoT6Lu;qE4vnZH`)O}u2W8H4V92LQ5A%7 zIS`8|ErY146RIQ-F9s)1@GR25j2{=z$qA~0q@lck0UAf%mYbVvYme%|M2~&6js93O za@de~S|1k|cgD>_Ti!Fj(u3*S087_Kt~6WpV|Lo;J%Hgm%!mn&kmHtfP@XD5cM*+` zVEnY1_f!JN>|yV1Roiw-kw;A}au7qR6*q zWo5azG_-Vebs2_+ii(Pa)YR1H!F&ZB`5IuE@az|@t*!D7^Z#S3u&}U*7n@^rS{`)_ z$-WRnt>gpbYO;hRAu2aoIo0Lld&xIz#MWOkdNbgA3#v9QVzDUuOqYHI94&d7)rX zN+E=UrGuY7CiJRSe)Sr+B)7Pii0N1!j0o2IX3vmX_v++(w$wdWG3;vqD2)KFSI0)MH;pP6P-o zT`X@J1aGmk_w=B4+p;=%ZXe6JFO-hq+7YE+VtJ3w)$$51_{YRfC}PqV(sMG<)6+AW zo}T^_GuuE;kiOYU%0BC7RUYO`XO|JKAvsa#?d=U@W@gG~hIK{&;q(hRPUp+Sv`@|S z4VP6_VrH*1!*`U~s@-9if&<>W>({T}V+CR>mhqJ{jmOHzfUUWb1ETD+DgymI9UUEg zvqDZl_>x|v9FTcdprOVUkM*&f>v)I#F_etH&vegeh52sQ%gv=5BOBRSTudK=*l{Bd zNudwM%%{(HuL|2KPVi=&lQmqd)%J$c|Lv( znQS2_#7Msob}9%Nze^+BH80S!3>;@ SE^;~m0000+EeSZ7w{B)^T9;{QVBAtScZ?E7pL z7vsnEO^v$BGG($J=jJ3nvzNCwK5j70V%4f!dZ$0>_B}qWI!!kG)c0C*-^-DgO{~s; z_CM2qY|fNqv%)tYZO)51t;t-=>vG=YY_&z@p@nCcF)oO;_#StCt6o>roIhTZp7g9` zXb+HRvyPm$mu~{Y-@ZjJ<~YyxZIk>XhHEc&*&IcjSNSpIzqdg~#nb9r{%CDcooiD2zQ_{an^L HB{Ts5Q4Y6H literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/line_selected.imageset/line_selected@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/line_selected.imageset/line_selected@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..07355302141ffd3f70fdf75855b375b3dc78b621 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-O!3HFy;(L356k~CayA#8@b22Z19GBDx&op0O z1}z|)gMqO8Iyc=t*vP`f&S<^UsfaFTE7BHth52tE>2bv^y; z`jUL*?=t7bzcg=eyB_fCkHUp-3J3oiPfIdoe_;HkX36E3U$!@03fp}1%ZwQR<(F^Q zZ{9yKJi>8F&`Q&gI;I@i(%+|(-dEVvF+Gi+IH6nXoBv)zE^Ur;Z*3ViuXyVvI9ZMJ z!JPL7^R0a{A2+ZHyog*doqxmkbRolL>1`_S7Nqqo{d#usBk3zOEqlM0R2MH(?+~tz zzxMd+#)(|o3{&D9p6YxqynC;we8Uf$&dTLUq4_2o911?qdbs&(6L;tByzReZg7!+j z-&Dt3ov#(~vUkfCz6m~R_l@c~9)tt6^%u{JFXEkh>2Ys(#KD5R^+6}*F<0_ff1j?( zc;h#>*L`)v*PA3H5*iQQyZ$1K!S>hey`R_IXQ@&SIKb4~x?D4*dxh;vaU-Dz3;!`& zPd{zB?)5#jZ#<6MxF${K%?;YQj-gyg`@QmkG{gTAjNevHxZM7|-n8aIhKWw;{V)xt z^P97aZ@gx(t}+V=VEAqOQ)e%`MMKVhrN3Lglxa-#xZ`-2_orpYgDy`A+2fHv_}ESh USFUV4ECNbpp00i_>zopr0OrU$c>n+a literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/Contents.json new file mode 100644 index 0000000..3ad2c98 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "mustKnow_Nomal.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mustKnow_Nomal@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mustKnow_Nomal@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/mustKnow_Nomal.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/mustKnow_Nomal.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6b46c213d7ff192d59d52c3dee6ed50d1d5b5e GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1&TfmH9gB0%lVEGHEEX32rF+@YO zchY{Z!vP}4CRa~RQcTcn@#8%Ccrb+#|?UfBd1ksJguy=oPR#Q{qV!f za=(6NMusVKG!@DmU!OT^-RVttY)&j}O|)S9eE81$@6v%HcQ?Pwj$6RS_U77~-~WEb zFI%6MaNv-K`{Ij%+i&j;2o1ee_DH2gpfTuH=GLh4BPM5!&3c&mq9-0aK{E~UkcY#XE2vTWP3 z{bk9ks(IIoW52V?39i3eAhUdJ=B!q4y{<>rZQCPs^4OXWe%AZWXerKO^WRwLIVhYx MUHx3vIVCg!0Jf^Z%m4rY literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/mustKnow_Nomal@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Nomal.imageset/mustKnow_Nomal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cdfc51b375263e08a0330f153ba59c8b29357fc3 GIT binary patch literal 991 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 ARsaA1 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Selected.imageset/mustKnow_Selected@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Selected.imageset/mustKnow_Selected@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..83ad1fe7fdbb1b25c03a75d866a2b1cbe3b1f7b6 GIT binary patch literal 1451 zcmV;c1yuTpP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR919H0XL1ONa40RR918~^|S0A#)Nq5uE|6-h)vR7ee-R$XjVMHHSh_uj4T z-GU@47@(zAYr>B&hJ?2Kb-P$8L_>Mkel%EFv+YWu z6r(d!|(Gy^>0u3ISo=bmGJk$M^ft-;VG4tc*i)f|v$^nVF+gJ9pj+v0=Sx zXlRS}+yOSG6a=PoDwP_yJ9LzJRr~&8RV;lmpIGx?ro&14LzM77BhTH9P*^KJ?RtGO zCUb%bg~Hl$6-%EBw?hnvf=jhzvr9?S&&qX|C@yZeyk*;1XdpG_H$mj6a-7GwSd30p z+LTBr6$F1Um-{BSrcYNU&}hwN*0Qeq0rR&IR?lnYs7+K~zZ{w5+~wTJcoe)UmwQw> zbYLMd!P|vkK{(?B)+R!7>D1^&RW6^i8qm@Jy(II7)fu&azlmTG_rY#T)UCVU&Z1bs z2v%&OC4r?a;A3!#;FBIlLWBpeZ`UuozF)kuF75^f0 zH5XvPH-QBI?{!kKT#7LTu4#?xtXwf1C}jP3Ajf9II0!# z*8+g@MtD?gJFJ`|xaTg|IICu<>I+7&ViTJJCob+zI|eNcZ#m8P?p;UVZ+NP+b4?U{ zrK{^NxYld%us;_PwPL^s*4ji!THD)KBaYjx2DJ2KI(-wD=W+7=2AuKU2-Y?yySs-~ zIq2hZ`8;lY#9Bg;>(2h9jWL-MjKx+FuZUoG6(ZVNGDw@2xSlT|HVVJy`xEC(b zCUy@>-YtWf&6KGB)+TQU$$MjJ+zN_u%TV?`oosxE@7^6lHt7AetLvJK&s)N)X|6X` z;7{jrD-5XtYG}YkeCPeiRQg?+tT;&nIUnFXGDx_o15#hMW-_xcvkFC|Awmm?iLG!5 zmv9PqXkFQ%49KbgJZf+K{LC1V!#+5{_aV5J8p(SrqT>@>Nh0% z%pq*2wntQ%`r&xBKcd1N*k_{azNH-fdi0ry>+=jedJOs1J`Ey{ZUVU9Zj`n4^|4N&$svg3KF-gi2^wT)XuS!AT;8g0x*u5I%oO7hn z$*_&@vJ9@>9((E|5yNq=<2Nc#eY}T8@x9|WPDl``{{eJ4W`w<7Bw7Ff002ovPDHLk FV1mXBrlJ4< literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Selected.imageset/mustKnow_Selected@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/mustKnow_Selected.imageset/mustKnow_Selected@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3fcf38c75408c4573426eaf65c662958ed2f0c96 GIT binary patch literal 2462 zcmV;P31Rk$P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91Dxd=Z1ONa40RR91DgXcg0Mr_#3jhEK2uVaiR9FecSzT;Y#}z(j?!CLV z0bwA8hG6{DDxna;3u(Yves;YC#X?n8DG5!bmPY-NT8TEQ(j-kQ<)Law^U{#24{cS_ zm$bnTX$ne&?AXRxeww5Ypg@y|*w_YIXhTc`{@Hu)OusYs-CZwxH`q1GNLMp==KOqj z=FFKh=Q7Q*w7lK9P=BazW!K%riZVvi8bh?4nHGsiW9TC$x`44$80$7c@P=BV{@K5N z+m+d!|U}1;~Afr;+mOcSERlrB&IJVE^{bBIEW*leF;Fc`|5lywa zC@F@jsi&vLnDAjm{3v@~lT|KCCnf^J{4X+einTthl{yU==ZN!@OKTDfwL`bDuh$r* zwh+^5O#5d!k@TV!fH|DiMnB8!{NZdmJstzWc2@=3eEj$_9vj zeu@eB9x10rY#0;rjv@d4v+3>cmdm>i=;!f zV6a$9logg9o2SK5s+SZu*o_nTdj~SvAC%C>HmwWOdNs3dfWU=9XhOOIw=~RfTc6~5 zBEikwUC)v0?G}?GZH9yK@$_(e`v)@aMnnMl7<+DmyldY-sz=A4ipJvVH9bA^N45SY zmh2&Hh8Fm*rK+~plIyWC@o1Nzu)q2B*I%qtYTv1J`f8jk>BnY$O4adt<$0~-P=iY~ zKSuX=Wz5cKbFTXi_Nj|JZv}Rq&q4T={%rQ35X6;+-mbe`qxM3=UF>=eT$kANq+b*! z@w?*E#PM}XrF%vO^<2r6l-&}aNWPPQiO zfsV$m-i;MVY}c9g_W$Czeo3$hCc!2cRee6c5{s0wGor&weli)m%Wrulw}6d)4nB67 zovAo&G5x|Lyh???66G;uO!1=1@kAqff-pp zlbI}+WqBcE!Nl0E^0DY$FbEd=4r~GQCdHaI+GQ7;V(y8E%j>l#PRuiGzQ&G=;{#?g z+X7yZ0bLJ?%s4R?i|7%0qg!DPbZ3Fs@O5WwGe(v05ymN9b7{Rj%ef z?0iJ4Vhg;cA(vYo$NX`!_5}nOZ?g+ipJlPU#{AvNijg50;Ae5YMgcY#L6RCtB!;l0 zIRp#{QFy86`(KLTr~jlvK+k60;` z5nAC9-iV}9?dS7Iy74_03ovQV>lHe2_=G#nyGEN=WssHQX=Q#Q_ih=BD?|6*d!&vy zOQC)QSKQ;6VSBw*b#)|<6zP*Op%Gf)iIXS&h;{3c;&~DuXwyF6e{CR@dQZj*-X9mK zU*e8(pIq)>@U1pEK=dOaiYrrhpy#3BcgDfxF3=5n^y=j0j&Qkiak&d|xyxj#=9MD( zNW%RLOWrye8{=|k=$XP;)R4Nlr|bKy+~;AZ$lT}&tmSUGcbC%KtoCFg!t8~aByk`Z z6NI}5+S+~{>9b28y^Q9=7jzi@NpeAWlJHl*fPh#p5b^!LwbcP#qEmDWhS4C{S1NZJ z(2Lu*UvvBbHkW@>HU{oROJK$OrqV8@d~?>evZ2H3f=6@d!m*tDaer|0{A@5!<+E`Db9*4jfzJ9^$$?1Cq*OFJ6=_E07>c~>eE z6AM)6ViUQBa@c6IOXQN-3EQ8$L~is!FoVg|IIBlt=uOtCi(@ZIjl)ayvdgDcNav9< zw2`?s`T8*66&OQKinjvX%}b3(V5KhpY@l|e23OcCiDW|Lz7>_yw)DvdO%)r1+IRwy z<-~-fYF^b^KZ6W&e?(KQE=sCKRWc^Fi)ec@g7gQVECs(;_<2x5R%{Abd9?OXoZgx-(1=|E7tBb>4>5xuVtgCG$kB_WzrEt%=K;(Aq;BK;eM;enSe0~9 cB)d}mKesA=*l{*MtN;K207*qoM6N<$g358A#sB~S literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/Contents.json new file mode 100644 index 0000000..49d2c93 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "myQuestion.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "myQuestion@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "myQuestion@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/myQuestion.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/myQuestion.png new file mode 100644 index 0000000000000000000000000000000000000000..c047b3b402e3c85c6e7071fa2055cb149a7372a5 GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^fIGYcoFh_YZ&^E?xo-U3d z8lt5^`}LUaF**V4;3M2 z_F~;5K|DgjLW|y(&wsx6*`!swmzV#2_xEefdws@@g)iE2q;~(A)9Adw>Uj8}_V(uD zKg-v!U7T;YqQf;a*)?uS&6A>I$EQ9|zOn7fYTn0;*NkpFJpBE_>B&whtbary#OJ?vkq}?-z<7Zun_HM0%dFnRIrEe6@OW z@7??J^VpmvAKWgPe$xyx)4{hQGMfrdzW8cv3L}*VG$2+q}jCS&+=04ldLu6cNh9Sw3_P}=H1b3 zHpTWQ^RWdN4+#G@5mj616369zE~#O=QDedV()FL_1T}Vl^||VM-0MOS8i`m_3IYI(x)KioSqR@9u%(9Z_N Nq^GN&%Q~loCIEw6@wxy2 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/myQuestion@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/myQuestion@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..996110d55e6d1c0a8ae299bf708a0ad26717091a GIT binary patch literal 1144 zcmV-;1c&>HP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91A)o^Q1ONa40RR918~^|S08jD!Hvj+w;z>k7R7ef2S50VDM-={M?$5Kq zrV_L*w7M!5TB#7NaamlIKwG*hxDjL0BJIZPViUOW1#GRNRw|}R%&slcZmL^BMRX@3 zTIj+;F_cn&uoN|U@7_Cp-;LMAAig`#9(eD~ojd28?|kQ+nRy0_WcP8`9RWM@99uZu z;T+te*UvRH29^fyT7%PhhNJaQ&9%~?(O`VsMKd81Yw-macXHAHE{aCZY{0J^cXEfX zY#$CJ#^j;A-3TxmhZxG}T%RgJ!1D&Vn2aGyTWbl3)={@B2(T}mDwy7Hk_optvp7Qr zYA$bWNGk$D&r{6M`DGgZk4E3*xLd%O%1WZO)VXUz^n?VkE3l~fFpxEIj5_tC-~1(y z$++u4gkDm7gmk}JC7l8rhFFoN*sgSJs){~j)uv5M)(6ba!ubgoBSmMj)!gFq&m-Tv zn@s$##-g(ds~Lfijm<1p#4^}QXjlMl&N+-~Egim#dpKtrxHK~9hLgmFtoXBJ^aS%= zS?E8q%&F?7r6`A#EBgk_Ofd>j4+AVU(%)) zdu8Zbx2m=rFOtd)X=6SDvBY|)75WZg(TmSAw&Y!95Q>h@)`cCokmjf{k1Gpcs`3nn zU(0Y_wwdOhi0P5Mq>J;%ATS1rOao# ze5&v(MiixrkF7dg0vMifTLOb039?HJ`G^-2rD1Mt+F2VW!j$HQr(JL0@C)ac`LZB= zZziN9VYK&2#tn^ah7ZG-0LW51(l!W^5jL~=jv)Il`4r+(plzk2=n8}7#^I;oN%uRS zKVp5fEp362H`N6}baD7HKap=S%0?-cZReem;=4CuLQjWC>=im zqMWSqJ9ON=#lSAoX{RD&WQXcI%&scBOV@aoPXD13@{$atS|L7r8o@l{lOZUeB0000< KMNUMnLSTY7rw*F{ literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/myQuestion@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/myQuestion.imageset/myQuestion@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1f516dc5425a3988955cf804fe8255f05d063329 GIT binary patch literal 1746 zcmV;@1}*uCP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91DgXcg03};<=l}o)JV``BRA>dwS#4-nRT%%B`!d_i zXt|c=d_fHR(5t3IC?xbrVj`g*EDSR@!w?cGUpD)@=}gch6LM`6O0ZCo4EwSV36c4d zk)R(ciB)R8v6hkP{{R2Ir{8n7v)v66+C4Y+z@KyPJ?H;C&+mCV&plUR5G~lJ{ReMg z8Z@doHA}~ssDO~y@t~#u&#guPg&P$1Gk;(Dz^A#F)!D(qsbfFY?a~jZ5U&!%QqRN4 zSaVK(!-1$NbwXT37lFO!`*=UML|wM3^#Q4C(N8OdT_qzhwUDR&!v%oVw0ESA2upzO zZXAzeywX&oPRo=5QrD)Z66_&A#MB}|xFiv5Y~t83;Rqlq;OiR!=5JlBu6i}iI`m?^ z9+bEPp=cGcnjiFdmSJG-<+&>=bQ_*emFBU0AM;w}+Vm{u!VwybV$+dWUzClC=wLh_ zWO$y^5q^h{sY!rD5w`gku)1*|fIi-v zUsBh2v!=dH|KfYt&i~wz)-$~hnC_8TMW3W0UeGF_F+TSuV{Ot4xn^CFYtc`>u|roS zSvM?2GZXcro>G&X`R~_KLukV>9xakC1<8dVZqca?xjCw6RiV`vM?Ox$NBf8}e6y}q z*EO@S$h?Bm48tvy{f8qkT0o>Kj8c)P(8;i1c3y*{zD3XGvsUK8L>7`!Oz<&G_Qs2W z=@!hIx0axTHaI3BnU<7>0g{T3?6#i9xy}NvTSlJ3LOu^AehElCW_D#>KA$_n8beY_ zY0m%P0*LTS7gl6olm#Y?F2hJ+_}V+VlnOsaFawE_xK@w-u_u_c){HRRIdIX??^5p_ zEPY~*XBa|Fb-VRp7TkGMab~g-ir46wBFDY8%Tz(s-LQc$#$j^0!0rd08i+|S4aN4R zRu`}=U_oaYHX$WqB!>v<8mm-YI0c8S=)!nRV@S?O0=9EQ8B+tXLW{IBYL@L$X*Wg7Gj)zwMlwobTavwnp81I&7B?n9NN!Ym+}RaF z(7{G*%baZQcVTG|d zy+6|UjN$gE6bP5z5E)KG%PMU=0(4c4gY;IGszVDR5rTFy?U)G=qm)9|%DIYf4L!v2 zTqSvv%p*JJV$2T6Aa65mQa0_khnooy6aO(DS>LAThT1XoW!uIl8rJe$^?igOCVC2D)}q2)ZQ!iS)Pn#5?az*kuEbU7O_ChCYa}V z9(7s{BeJ4EN~NpD%_=FCiLJ+;jWz0%-e(;Qv2upohm^^X}plMsHsi^5F^7M$NZD0VfHd?@LwRI(y-Al*5He9|w4%Qk^Wh@;*XOt!rGWnq0~gUYTUW2eqoe zjkbYGUpKvj2%;o{I_{6c4%Z+u10sz5i};T3?fdB!lbj5Zh(TAMTi74hE&*lY5m8V+ zFBAi8FAvPVVy>~PQBIO*=o)c5qlR+h>OynTDsLUl7K+~swKZwNhV ocIL6SJVfWF8gn+a literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/Contents.json new file mode 100644 index 0000000..3ffc957 --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "pictureQuestion_Left.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "pictureQuestion_Left@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "pictureQuestion_Left@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/pictureQuestion_Left.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/pictureQuestion_Left.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ecb14eaa8f0ac71c1b8b02d21931a96b2f5727 GIT binary patch literal 2326 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 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/pictureQuestion_Left@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/pictureQuestion_Left.imageset/pictureQuestion_Left@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4f8643b8e1755276e1d9b465bef28677c79ed1 GIT binary patch literal 6239 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 FV1mgoGhhG! literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionDetailBack.imageset/questionDetailBack@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/Question/questionDetailBack.imageset/questionDetailBack@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a30a513060f0f1a9a39ed8765107e2541a42b9c7 GIT binary patch literal 262512 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

p?JdMT2AKcH;{%@vzab!aYtMz-bQHfeQndS885d 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

M+d)LYR#Zu+-T*kTNsc)6&X(PH;1J$ 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∋ZWJzOqq`X2u+3wGfy2a*zGKk zeKXc&^3CD)bqY+M-o!Z{+<}W*c_(G_X!`Lqc(5DOcxQ5xr}P6V=Z7+3lVlX6 z!r?ce9D(H?=%h65bok;x>kABahx?qpNh}36o_PJw`h(9)}U zC=ZRrCBAY#t1IN54yHiu|G)mnzw7^f=~2eDqSkl`^#|gLe-zu?ZGY3)`TU}Mexcv1 zd)>W$_;CNCq1x$<4+-+Wc|x2Tjq3vgn~HH-=0^AzZu@+oKp%jD$$wIl_>#&m^+M6F zKO7OIe^t`{l+sWyJ(;fO1`a=%aPy15>IRb3X;bSrndV(T zT!1$gyI2vN(uJAfcSwATC3ceI{`ORjBQ9p`ZzAA#{_SthTYKkz$KL#Hm%D3!%YVZ) zc4t;orK;TQ+bWWH(bN#Fr(L{g$NC&kL5yr zH(TeO{VD#&{bha^`^SR6kBruz!GmRVOE-7h1~s6$=cqjAb@5xNgZc6Iy{-4TSy*%# z0=EQ0{Y$JHo4SLywrh!dK=-^MX=pK&P~eB7N}4-!rh$pZ2#J-%&*Q5xzeh zepvy#^H>>ZA{(2??GL}BOX>WG`^`#fx`9L1 zKdd=xS;b~OYdzlf3Y-2?MG88rN4LgqYMzsTM1JI?@|DwKYc8*gS*d7_&^zyEbAmh9 zx?ATbyV&+n9D2<)_HF)xG4&O%oF!Uo_xw$JVuh7P_*<+J&DDSNwqMM9t_IlJV79;Q zcMhLX3^Suz^>@t4Nt9>O>++5J6;H7@Sbl$2YA@6+tVg;f{hS;}MoIetD!Dk%0&X!d zaQFPczno$Tx8{aahgj=>!y!kHM-XE^?U!SXkjY9J6@Q_3L2-(?s(g2 zp?{%)cRp;u@y1Tgy~*Te1m9ZExgU5uKaeR#y0a6Hn$v4IU{uI!*E~Js!ypp*pd}x$ z=mVOBj6>796Eg<9-ptH*8@kW~FBS3!9SWT_P24#*!e5K@CX25iamKvy?!Bm;d!{4NADiY z2QxzLpE}fRJ&fASz)k7dSxHPEZOxEI+J<>8mh{o>GjAyg_)pK}_(%`7;5puD$^^;Z zrl@?!^f0g+$0Eq9+|z8rZQd=D6ZTNbQJ8Vo95|bo z{snWecI7RObMl#Yh3r~X&wVVye10+PDD%#-xPp4B-%8~3^4{M<6`qP!+g(9T{Pq!A z{yIicrK#2XYMeOfD4m6oj-1#2qlyN%@b(%cSK`KwvfD68_}+H`2zkinwr0n|41Crj z0W|W$5DS=I{wt(W%3o$pl4-vp>sbExI4}VW&WjlzVe7kqfQtJiY~#$0TSoz6*p*3u z;EYKWM^qZfoU!(235{fHfQG~hG^02DC2|GtS=R1W8@fp5`f343&xISZM!cnaa>O>a zs)_9@lqmGXfxTREtx$WPvq(n_aHojy56gaozxdvDEE1uC&1z8+#b;J z4#=?n)MI+wXXBt(}=ZxIu;SAo`v5znXz@I|0i`jh=D`w?gR&i2JE7!DRCvoX3v@0CD{1X_% z`m#L_=wM}FAMHu>>@?o_G&$Pk4(*X{&QKQ*sQ^$wufN!lNMCYJ4cU1*7Gn7OJ>*Cp zWAM5u4S61?F{A3VnelP`Rt%^Z6XYuC5SNuZ_q|%i3qZnxFZ}2wDW@3X*wsejIEnA` z2Hc}~9QX|DOk!f?_TB<>@6LmjQ4q=2)`qwbK@7ETz=7<;k5WDxumGaaOdZiQc0NFu z+>j1tf8e5^hcRw4n)#5UcK`ZhJ~S|cTo%`Q<@7^>Cr_FPH!Mr|U`3o05KxjXFsF2!eqfRROo-^LkI6j|%Lg~4T-&`-Gr9csFg!q~#uWO$YARpg5|@V;o}Qu{)L>rQ1$<< zsJ+bG52~_X>S?&_)8lL?ZVY|O?!PP3eM8?p=3@6;yo?cM8uQEsuC*Rwf#i0+@ys7j z;0GVf@MT^v+yg!OjkF&AvX>c!8<=m`8|`|h(uHQ}<8!o|3ie)Y>C$`!@e_Muc?&~? z7g&ZT&M{viOxWE1pFMCA7Z=0M+Ew|kaC`GlU@s1JO2<}%xC-~ z(ZGH~OUu{4HNf`d-YxxXznYYe4JPcn&-oL?n+I*w2vUhR7)Pxl0UBD(bC{|zeX6ncyA~nSfH?36hUK%J83#+l z1kEm{nmRL0Io}Is3G7NPv#2}!IXN6JRH@c7YB|;&ta4qO@rCsXBR_Sgx}SI{`#w8~ z=2{uZw{I*S6%8taHYi(jYE0j`_Iy={fT(KxtW~zc=n|dot(n;6xt_79++I4HM2*pl zZ{eeNdJqZaaIXTf=g7GMk$!VMI$vsm^`l~P@b~?8Z3PX{rL$o@U(G|d01_aL2Kq4V z56<|9sI$4S;pC{p?6YO??`@m*Ab}s;KP1vaEqXn#tdfr zwWE`3j}p0XK2f`tPq!e!-%MFIvZ|bBasGL0zI_)s6KgO zkD!HjKh_UR!ICkR=N|YuG|!9B z1;Q6*Q%3qco%Hi?)jAgfGb0~D+#lQGMghaKX8+fLkT_np~IBRhZ80W z0(U^N!0`kB{oo||{F^Jq5$lM(Yx)BMZ4xm)An=C@bEhwEK7b)l{gF0jcCa5VL`PaG z&Yc`iNZH*0@2Ab0My}-E$i)C6*u3WeU5uxQUGB?)SSt7FZ9j^C&k)}W9IU04tHyVYhP}k z%iuh1zkCB-;a(QbL1Rm}uz#2JgWM0{Tk6}5QTCqF3;kxD<*Jasp?(4F9u9uhXnyCA z>9eF(C6F#CSx>=D#AG=YkkcQzn@QeGue2w+=oKx!DOpcD}rF*>7jemAJpBB zpD;qlIo))hU|wES&_n}HaM3l?_nunHk=MoA=-VLE`v8x4VmUX>IhYjqNCv!WIPuUx z3(3(&q1>MD`h!fP6HM9Z2_fS9QGjAKtuq(b08dg6_-6xfS>Gbc%u^H29sR-K+}G*} zV!m{pE9FSC-%l+=sKYu2ci>)IMK%va?(VtAC7W{g3|>L=hFlHi?70k&>IY#hnZ0dipMCGB5ZpP=Xi&@dy4pd3Jhwx} zgX83_<5qfceO=rP;x;rRcwGw;W9+$hGKY6Cjhi>%De)C!yZ~SXFVyrpD^93SH&YEf z)-g_-7$Vf~9H6{s;PAK6y>*L&f79IRJ1CKcn0q$Rt0r}d>2irN8jqK2W8R0s5aUt) zw!_M`dA#a0zjKWh(^~I1ela)qsdO;Mco7{BZ$o+}&cY~inpt%=>2;n>IC*i7{jCQI zXdqo3{KFZ8Ne{oZIyrz#zj3s9Fgg$4vEp!KAJ@j!>)A1YT!GazAAADFj~!^V`aL>& z%A9q=!{>2ZMV7v!>dz8tI;D%yC*2tH{8on2=R*ZW^MiQu=Yxl7!XLg^@12+59Z-Yl zc}Uwote^U+$p<|7U}$<{(&%r5wC?R?e%PO9rGKMksOQ5XExW%Z;`LgyA9Sn_nx>DHd zDdW@;r}so*>#Q1Z3_h`ABz3MwFcE9MvG~)N`p#`Cuh{xWcp1eI+V+CTyx%77GVdF{ zVDqNs&Aa~X;(R-wq`uv&G|{evMDXi+1(aL8j_I^6-UG$zqg6EXlF@Tq9@z2#A3GwC z7c1;jp5f z@y);vaMvMLx}O8%cnf6PEdU88x}jH-`**MlA7lbtyYIH~{m?aELz* z!Jm=m=B&waKo|whv$rAou3Zsk1syK^XpD~QlVlJZ+xz37o(G4V0N0ONqu1O;UTeu) zpbeXP`Nvv4T#*#GcRT*gANI8P^n)XILf1XeK7<9g3;G@sYjK>_<@ zky%>#U}ey=XMJtDOpz*RBfUPK3ySIBB7vsQhV0uVbsbh-%BK&4PMvd4iVqG6m+#il zB`GJ_@C=;Z$y-~#pFNyhm+iE zaz%m#%^8YCU(Kc>-hPlTq85G>EVI1a`DYFm5guXQNd66*n?o<`)@mdgzNQ_kfwHF0 zT-L%Z4@#IfYb%V_=1-~r?FC}eE1$tgf=+}1qONu4Wo-?^dh zQg{1Ty$4TDc{|=1^P;By0GT%KG&h>f9nb-!_g$~{;Vdj>^OxhJewxl^R>a)5K8L2F>YpeG&WN;cN&fQTkpiRGvxbP=+`&= zc|hJgx#wwDThJ%SfrQXzR9|L8$3o`@gE)8+dQ88Dxu4$axwEUsN?Bs!;cbp&-{a^~ zuXi_HR+G85>EocRpS|UsXFeGei2+R~{D7VhOEgbGvVih|iarF9#`(>Su0lJM4+-)^ z{`p{myzuw8N}|Sw^FfJqa)-UB{1v46Fo?Jo>JM7nLV9!`r{3+~^(WpBCi0<*$fEu$ zz39QZ_@E;Fc6I^v3Wl}oA`^^x-Z$BbIib1xVPB-y&kMK!i<^z}H(@%OP*O7JBqY(}2*yNIXLHIFdFD`hvAqu*D_YFIT`09|j zBh{{dttalp>EVoP`)M`zqhuo<+ZyX$Yh})g!7*H?iJ9wmANolu zaqxcVa&QFXc$oxGV$~uh+#H!n01eo*(PT@I1k3DPV0L^<-}|O~L#Kv`iq9OO^r5SV z_d!Mcr>u=Jmpi6Y#As+nZ|e$~*S#&yb3tgl2RR-;<%(~fxps5RjY%tSJtfO^Ti${af1=uMPPB6iUx~ygu@>XHx-?|py|fGJMf+ea%88RI z!X%i-<_C}JIhTuZa0*8TJ42TE=E^XCl6M=^lb=V_dJS;?p=TEWXRPWf?w-rDzSbck zU5z`0;34n&w_%D^h*>^$D&i;I#0(?ZQCna)op_#KJ4bwqG;AmiaUPTKG+1L~J2v^j z?e(+fLQkEei!}REexO`mRb1zyhA}T5yIvGd)e%Ik?9AMW)QI)02VaqS(Lf(Rs;Sl( z1yF3ou7+4&b6UMMJR?7tYUeyp?Y3)m0hu8t`#w+6c?`jB%bA&9H zjD!`>pXw{(a#1sg`(y|?9tJ1{TUWVmu#3iJI02?T+tkH`nWJ&A)>kTp?~GPyq^-ST z@Q`A-q%Oucm@blxkhjgCja9CcEG(Mmy7BcrduHHwSZ%>B^|YTM16E)dHIiK?+AggIKHJhna{!08}8c zB%@OGAuw4_*$BpWOgY8e*$DANDDMs2k75H$$8!2xMkK5YpbtnM7ES!blDS6#0mZ0C z%9kHz-+Se(HTddUV{+KUTZ9JfUv4xmL>Ucf&U5kfL3q~)%(3Z!$br~_Je;<0;xX1{1f{I9%_5763~3G(n#jw-cn})Q;c)b=M_xrRmx9*1g%p}Z@$5*ht_kXzlBFHog;&;O?%9QX%#BS~f?Cwm0)!G?a|pDO*J!<`DmZ+_elCguYSOAWz`W;Lnd-=>k7 z4;K1?0v~25s4ukk2MGDMSsF`I={r5e7D=m&W^~+w7a?DxJ@&8b+?ceHogL=Gm;6S~ zYyiMBqIKNGTcwoVID{7kioy2VhuwugPpOIJ8@9f2 z;R`(UbJnJf8yCReB-Ko{^9@k~hYU-@#a4W37B>ny^9vK^)R!QOE^l(U{q}VY>X8`G znFv%s_Nn!`QzAq{0RC@;@_h&=VL0|?$PY%2Ih_?%9|R-vv%Kn zb#KcA8T*OvjfvXLxw>xV`8Tm#iIbeu;o1k@s?VNI8t!q9G5ydPu{+(PpelO-U|e{> z`wUh#PdWe^3cfK(NM~}zRk-zB2TTcjR`Sg^UYFv}bBqAVCbkZ?i7Wrc%6F}Ayld;0JGq2kB?!UFxnQ$t770;aYcfPBRQm;ARpgN*dd@^~)L~G|;5A=Rk z?ISU(ns!FR!BtfRd%9G={e&U!2$9jb_r58-WXb`1&UAyDZ+ny*XYTl>+1x28LYwPc zjAsRXCReaEHs1DNn}7#!rclzxb z4o?OzIso=-#AC74hfp#;%i}p`;Li#>gPozz8~9Ly->mS5 zAE!fopfRZXp-Yne5Cgn9UbKXi&Tr9Z7B{~I6K#t1gB4~pGNTEXVtM4>VZm0;n+~QA zbosCapRn}D#LWjS=nI49gr;Pl#hnWe9AWBKNv zeT9)h18_5px7)^UF3l6)V{nBv{phQBk^&a9>fS?K?4A!{2RD1-G|@&1z1;b>-$Z7? z!+7$x_vSS>tC^Zt1*@2O-{4xshOxw_ zRud<0)Le$&P%-r%GuUoK6Xkbqyz@`-HihKEw0`HxFn^0B|2z+gUD2O-JN`}K@risy z-341<_0@RpnG)R}%r6~tPs6p;sD^htPEJwFwVv}5plr)nKrwW4A%b%;e!eOc{%D$D znBiAj`YsIK(YuPcC?8_iSR}QY#dy9}oQzt9F+ROCMOY8q=La$ckN}^G0V*~E`<~5; zNrn@{*IY(}bc>R>;kQH9y^Uk)1?tW_pQzY{< zQr;7fmo8aF*~KcO5S30wMpu<{Sa#~=+;9zpD>jcrl(R-+)tW*^71=JBqmxKG>OS55 z7gJ58FG!mcW;fxi<^0s4T89W zb|y(7hv&X2S#0L|sX44rj4UcLT+0s@kF$Bb=9#MwkI`H_I6=j~`S#&+V(rDm>^Jox z_SW|G%6ta}W>z3)yOkVr-|V;hAI-xRw8!?c#zJqkbn?V_Ao2mQ^6kCYlI8oD?LDbh zG0Y>ALh_GJ^%ux%ax(``_C1jBka5~Rx|8*!i{xtFUc{!%ejo_2_;IZd?lp*?+V33x z7Y^a}lD#96@vV-rN_Q@{bK}glo9n#KQO^ghZG7#{aNYh6eBpErf#v$v2J_wukVfmm z9F8OM)+k7!)=GAWatcA?Tb;d7V;AsfB3B{L^1q5vL_0-!`o&v2ujp1d8-y2~TSBjPIOdR~U;Q^4{tioC5C2xQ z%!~=*xUMhhHl}P0aBzLKmmNvm$+CYI$u3!RH%_ z-VY-rfS(ft!iD^yhEo2(Au8^~A6V39b>ig%4cYo)_`{dcLzfRmtY^Fc;@=N`u;+si zbg=>W<}oXT-J2;B&HW*d*P^%wbydebi0gHooDl9Se-&!(&f~+SQSo$obPo!lHvrG- z>3kSO&nH(KV(lc|mrdf&T>Qr1YFMH%`87Kmbb$7}L<1p@jx*bKAowHt%x~`=#oIy@ zb|YhJ|4&pReZz7q&a&E@8ZMqXu6qN{)$K7jy~%Kn3$+GF{$ONRw>l3|uq5=zbf2nQ zqZ}~#^~E8Cs%s4AMdY}jp&%}G`aWTfqGgRM9*jk%A8d`8B18Z@*ydh*-0p|WM?dZ( z2ZdC|2%S0@700eWa8Ip?Q|!*$K8hcikiLXV+4{g5e^cfSCE>m1O~0os{cF#&s z>#8LA%`11uc9Um|1*FB|J^P|y$;=CoU(w|GppNE1thAx^p+0`~vc)!lrBJT*@K13& z(u4p=Uw$4Fp#yqoDx&9n(;E(X)1wj;!K7{2nTxU1X+~Idcs)3=Ly(~!NDR-cAsc=g zQl`BWPvF4=FoT7iCaffE^UR8&gQ-W}5bS()K*DFo-eYu~7<-}4E2iqgzJ7Gdc)l5F zjaM~+qtQJ3M(g0(+o|9f@hlKdt6?YV`#)S1g2*+ho0I&U+;cB4LJaTk;Be_qfPFU6 z<&lvND4ZDFYhm8LvQl{dAZ`@kdU%h~8BGOIx~#z54;&}COmR(-QbpFGvjMjE-WGv9 zj$bBnaGCqa9vm8Ht|J8otGLgj8xul4rbqgTIdRKi1JXP_+jj9o9tjBO;QHdp?cla= z<=FFc&zge+MmgUT<5Pp*Qew~ekMUSmBG&WCaA{vaI-5PF9U+=>&J4v*Q21rbM8OeV znDN`kC@OyI7;8=~&>Nwo74DrU66Lv;YG$&%HpQIY8VLd~k=bW_1&Gnd%?IzR_SYOQ zPM6LK?tKRoJ_cHu8|NnY78)cG<`k%r*>Q@@SoK_+Ffrpsq>C7eCsLFtf9ISapybgS zKqVcoLryj^7oIq-V{0Z=D5mm`MpGjhUAYe?CKpNfHr8++Dp%fN& z$yc&@=5Ka`)nx{^eYqZ=@hXOcXN)f86ZlEf*x{U8E^zVW8TfrXzrPW^>#`>jJnu8f z25W|5OfJ(iSO$3?vcw(pMTzqoooMPz!3+GQb)GZR$Gn&=!J(7a501rt+n?*qJ*hUP$HhReZcTKN4vmT=ePS4sz14G*pe5S*(_ zA|AChM?+|!^T?iz3K%D7<|vHl=z)N%If%KMn@;+QZWvJH1|NN~XP>IkwSdfj?WN^W z1ASCcevMnj?0@>7|MGu8@Ii_HU6>w5Y2>f*C?U<02RtLc;ga_FFvcICG`Tq8&xb9O z_Xj-H*&ORkz-#fP2=yYL^|enj_6LHkg6H3dIdlw0!3HMu70)5eZ zvHx@3cl~*SbUWJmM-z+ZEnL2_@tx9T&hE)PuwF%bC1b0$a4G8?(N^U(+1t! zE?vv4Nl3z{|OU(L4Gjb~dTbny0oSKazv@ zQ^pO-{|$Ck_%CmENxRW+v7P@D`)rYn{TdI~FYMa;z5Nf()xgmiKyRhb$rc!nrx)Lx ziIv}aTL*~m?SS5WlQRa~hY-QFrh|ncFnC*hW4nH$S1z)Uhj1Dy^838et#uZ2njWr; zq%WJk?A-SnA5k{X+O1v<;;+~tn;`Gzy&Vl3hja6#Hrl!If9w3#dHY-US2=LJ;mF&P z%{q7B5sa3uHnPsEPh2s5MH4Eohj&Nv<|c1{&Kn%dT*fW9nbNS!1$`HBFmzof6uxkQ z+I2+(A@_}$Ovfg{le1b$edyShk#P;%Us>dy1Z8G>1+M+qnj#; zUF5olQ>C4u+Ky5m?$zGes3x~Lt$AZX_8N`PEBWk6khMW>Eys0#bN;G2^N_$_zE*-W z`}vhO^iJj5uaNt&(1fQe=O=FQAz0+%r+iBIxuRUtZ@-N&KbmPm!F_%k?mVp>ed6C@ z#jkm~A3_`abQk4emeF#LB*6jPI`>{Zu;XmK&Dq$-H};+1{;%xzU9F96`y2CsNMrK$EetiL9$Y=X;!+Sh;QT3Yg||-8tD)V=L_PFZ6Nwpv`}HaUwBN?N-{lAg*>Z z_Z50tnQpIekYV;Wql*P~t35f}3w|S8|7^j)pRe#!wc9k9r%t?lZ{6Me!{e{q^aWCi zd?1tGdO;65A9V1+3qv2U47UHMthWu0^M>d{o?v-b6FY6}zj6fP!Ev47lG}d;NOA8; zmQ4OJPWTwcM}NiU7C(ObWeJ^r9J{^PMP^GiJ#$hVmm@eYkmqX_hW!cLwD5nBWT37ydVLgbs@A0eQeL-mHlEVjj7Bu-2T0XHeAd!3L6+iXA z<&S_$y08M(TDkua^WED^l(KE1ski@L-_F{NnQfnadd>AbO8+W8aNn6LinI(|VHnVcBks@bfZarD#`Vav# z2S_sl=%`l85zyFgvdI(jRYoB;lXPgFEcw3gDk;1` zbt!yY9_9_%niXQMZIvNJ$2s@M`d182U1(lZ0_m7H7}finn_|8)J38xz`Vv~1PvIXT zm$Pf6b|b8{|81G(lgn=9-;o%!0Yzyw+6%UxENg3qIcJEIGN)ydU=NVumQi%_-lMTe zXC&YnzNe{clK1TPVf{yek)T(L$IopfMo8op32|{s7vimB zjMB{HJ!*qnb~go#+l0`3yB)v!)+>Ht;ElWAKN#+~_To0QtkF8a-fQ-be&+jX*JT`+ z)=mHH0={GK!EJpIp5397VT&%$tC&ue9|dln|$=?b14u@g^#xF0l7@t^@{Crz=$4xqu#Qf^UZ;U4Fuu+1O);PByfhBKJZZ-HxpK|w&U zPUv!;i_v>7W!T17i3;#$QqCDJ;570&9s67lUVr3J&LrCI26A>{s?TPzor#(an|M~1FhsWZ;oGP^5s^3*h8;C>;GtW|u5X-TJ6EQoqked4@SF^|ZFi!fT$=YcOAz1SXK(RC!U zfuwi{ugRASC0KmBl%LGo|Ha%)&FT6tU3&km7jHc0#cHTaq=O!ts$E*No zdNWCOx<Yq?v`ZC1*k!VP*vjGI>Wr=`vGiKcGZ@1%a}88kZ=baJj~m-W>UF7yn4VRY{}{UB zxsQWtt}6|$l5m~z#WJ^dVn_K1>h)fUOG?7G-DvWM1=L4Ek$hdv=^Si&7$qoOgUcj7 zHAx;VbGc~H!I%jU;}Ljb?&qYH7sB->2G;o5#|jXW?NvG^JM0k80uUQq%;(z3P5)Cj zXABZ}>R|hVp-~-~XN}+nJMBC0>)9*{d*h+F*X)%Wpe^xe%|njbIj&5|PMtQ%X2X33rz}8aMvTl1B9c(A ze!=(a0~~rft$J|)>BXDnwxIZRiSP^zlGb$`HJaxBxTWe2XTIN)KPr@R7pTedUMZF+ z+9?O-IjEzw9#*r>#a)<2FBzHV+&JWv!c@%gtgvV8$>^q|0U13N6rvo`S?uVbX|9)| z+{|?cR<7ND-~$;fFGUysr%U=Er+s=W)?v3HDwOb7Jrqv%B?LbqQw)$wZ#cwbA03u$#~fZq{91DBt7NKMQ-AcW z2yT_m-5CxkH!oi^FdnRzxYrUsS7W-^NTxTDoCohW%t1E{)8ghBOVNChyhn`K#5GMr zSW|mQ`JOj%XVbhJr&dy+UB{5Y5pWMmrf*QXz4*F#0~9%Z9$uw_Zx6E+qsj%bN3e?c z6!{h;on4F_lCJJQr{D--jAKsi#x?6pJx}7mvmh$mTGt{D$1H1LXM;fbL2_g>5j9vd zd)D(@n0xO%0J7V%Iz*u*O+2KE@e56%%L zF?dUG(L+?fjT(IEsxwJ708|tGr~Yu0KqDCAY-1&EjJ@$$13Br_b{ZHyIa9fe28EXh zc{cMP@Oi-K#T>88Nby}tX-nDRVq?wlXGqJ-$_=-ptiJR|Y291<0*<<&xbz_mi(>n& zHs|`*@kJ080hDXb1Fmlb4H2BiFzxC} zCa2VFc@B_B--(Q_@roDAnL%OvwxWP{$=vLiQ-1xgptV${r1T`JU&s@6p>%Irek4%N zFY2MfJ1TTS8Z_I?gQQn3+etaIOTY+CJb2u$ojG>4w{dd-GE~iH#&eBq(JJ(cGd~U1I*lG=Eyrk zjgXrULs5kpGsRf}YYOCfq43M`?8OIXUzgT8HHOmoDK-Gb|NggGQ}sy&ACUd7OpbF& zc@d<_&8j4DmYL3sQ7L<;iHD)hTUnXo`{^w~w}C_yz1cB?RS6gMZQNQ)gPYqcYhE7- zK8o^mJxj6Ow2FeZkfpgKLa>`*I~st~Dn8&5a8+j~vRef^LpZjYe$tbR&!us>)r