| | |
| | | 131732BA2A405EF800F722AF /* CalendarDateTimeTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 131732B82A405EF800F722AF /* CalendarDateTimeTCell.swift */; }; |
| | | 131732BB2A405EF800F722AF /* CalendarDateTimeTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 131732B92A405EF800F722AF /* CalendarDateTimeTCell.xib */; }; |
| | | 1319386B2AC2EC8300FC63F1 /* WeChatTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1319386A2AC2EC8300FC63F1 /* WeChatTools.swift */; }; |
| | | 1324D3562B8DE4CA00F168A8 /* WorldCupRecordVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1324D3552B8DE4CA00F168A8 /* WorldCupRecordVC.swift */; }; |
| | | 1324D3582B8DE50000F168A8 /* WorldCupRankVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1324D3572B8DE50000F168A8 /* WorldCupRankVC.swift */; }; |
| | | 1324D35B2B8DE5EA00F168A8 /* WorldCupRecordTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1324D3592B8DE5EA00F168A8 /* WorldCupRecordTCell.swift */; }; |
| | | 1324D35C2B8DE5EA00F168A8 /* WorldCupRecordTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1324D35A2B8DE5EA00F168A8 /* WorldCupRecordTCell.xib */; }; |
| | | 13272DCB2A40076300AC6481 /* YardBookingTimeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13272DCA2A40076300AC6481 /* YardBookingTimeView.swift */; }; |
| | | 13272DCD2A40076900AC6481 /* YardBookingTimeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13272DCC2A40076900AC6481 /* YardBookingTimeView.xib */; }; |
| | | 13272DD02A4034A300AC6481 /* YardDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13272DCE2A4034A300AC6481 /* YardDetailVC.swift */; }; |
| | |
| | | 133E223C2AFB37020045B544 /* StoresInfo_2_View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133E223B2AFB37020045B544 /* StoresInfo_2_View.swift */; }; |
| | | 133E223E2AFB370D0045B544 /* StoresInfo_2_View.xib in Resources */ = {isa = PBXBuildFile; fileRef = 133E223D2AFB370D0045B544 /* StoresInfo_2_View.xib */; }; |
| | | 133E22402AFB85330045B544 /* CustomPointAnnotation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133E223F2AFB85330045B544 /* CustomPointAnnotation.swift */; }; |
| | | 13426D632B8F0CFE0032338B /* WorldCupRankTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13426D612B8F0CFE0032338B /* WorldCupRankTCell.swift */; }; |
| | | 13426D672B8F20AB0032338B /* WorldCupContentDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13426D652B8F20AB0032338B /* WorldCupContentDetailVC.swift */; }; |
| | | 13426D682B8F20AB0032338B /* WorldCupContentDetailVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13426D662B8F20AB0032338B /* WorldCupContentDetailVC.xib */; }; |
| | | 13477DC22B8C9F28002E69FB /* MeQRCodeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13477DC02B8C9F28002E69FB /* MeQRCodeVC.swift */; }; |
| | | 13477DC32B8C9F28002E69FB /* MeQRCodeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13477DC12B8C9F28002E69FB /* MeQRCodeVC.xib */; }; |
| | | 13477DCA2B8CA1C1002E69FB /* MyQRCodeTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13477DC82B8CA1C1002E69FB /* MyQRCodeTCell.swift */; }; |
| | | 13477DCB2B8CA1C1002E69FB /* MyQRCodeTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13477DC92B8CA1C1002E69FB /* MyQRCodeTCell.xib */; }; |
| | | 1347D1BA2AB4457A0052082A /* GamesDataSourceSubListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1347D1B92AB4457A0052082A /* GamesDataSourceSubListVC.swift */; }; |
| | | 1347D1BC2AB448C20052082A /* CourseUnAssignView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1347D1BB2AB448C20052082A /* CourseUnAssignView.swift */; }; |
| | | 1347D1BE2AB448CC0052082A /* CourseUnAssignView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1347D1BD2AB448CC0052082A /* CourseUnAssignView.xib */; }; |
| | |
| | | 1355ABFE2A4C15C7002B25E4 /* RechargeRecordVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1355ABFC2A4C15C7002B25E4 /* RechargeRecordVC.xib */; }; |
| | | 135772AC2AB1B11400EA3544 /* YardBookingDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135772AA2AB1B11400EA3544 /* YardBookingDetailVC.swift */; }; |
| | | 135772AD2AB1B11500EA3544 /* YardBookingDetailVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 135772AB2AB1B11400EA3544 /* YardBookingDetailVC.xib */; }; |
| | | 13675FF72B8CBDD400085A66 /* WorldCupMenuVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13675FF62B8CBDD400085A66 /* WorldCupMenuVC.swift */; }; |
| | | 13675FF92B8CC05D00085A66 /* WorldCupContentVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13675FF82B8CC05D00085A66 /* WorldCupContentVC.swift */; }; |
| | | 136B63982A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 136B63962A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.swift */; }; |
| | | 136B63992A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 136B63972A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.xib */; }; |
| | | 136E0EE92AB30DD200EDBB8F /* QRPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 136E0EE82AB30DD200EDBB8F /* QRPreview.swift */; }; |
| | |
| | | 137B866B2AB3F03F00C4D01B /* GamesVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 137B86692AB3F03F00C4D01B /* GamesVC.xib */; }; |
| | | 137B866F2AB3F87000C4D01B /* GamesPayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137B866E2AB3F87000C4D01B /* GamesPayView.swift */; }; |
| | | 137B86712AB3F87800C4D01B /* GamesPayView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 137B86702AB3F87800C4D01B /* GamesPayView.xib */; }; |
| | | 137D2C362B8F5B8E001E34BF /* WorldCupContentApplyVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137D2C342B8F5B8E001E34BF /* WorldCupContentApplyVC.swift */; }; |
| | | 137D2C372B8F5B8E001E34BF /* WorldCupContentApplyVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 137D2C352B8F5B8E001E34BF /* WorldCupContentApplyVC.xib */; }; |
| | | 137D2C392B8F5F67001E34BF /* WorldCupModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137D2C382B8F5F67001E34BF /* WorldCupModel.swift */; }; |
| | | 137D2C3C2B8F630F001E34BF /* WorldCupContentApplyInputVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137D2C3A2B8F630F001E34BF /* WorldCupContentApplyInputVC.swift */; }; |
| | | 137D2C3D2B8F630F001E34BF /* WorldCupContentApplyInputVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 137D2C3B2B8F630F001E34BF /* WorldCupContentApplyInputVC.xib */; }; |
| | | 13801CBE2A4D20D20041454D /* ChooseStoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13801CBD2A4D20D20041454D /* ChooseStoreView.swift */; }; |
| | | 13801CC02A4D20DB0041454D /* ChooseStoreView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13801CBF2A4D20DB0041454D /* ChooseStoreView.xib */; }; |
| | | 13801CC42A4D26D90041454D /* CommonSingleTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13801CC22A4D26D90041454D /* CommonSingleTCell.swift */; }; |
| | |
| | | 138D8B932A4000D2009DCA9E /* YardTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138D8B912A4000D2009DCA9E /* YardTCell.swift */; }; |
| | | 138D8B942A4000D2009DCA9E /* YardTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 138D8B922A4000D2009DCA9E /* YardTCell.xib */; }; |
| | | 138ED7982AF3A5BE0001F2EF /* CustomPointAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138ED7972AF3A5BE0001F2EF /* CustomPointAnnotationView.swift */; }; |
| | | 13921C002B8C838700BED781 /* FindItemCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13921BFE2B8C838700BED781 /* FindItemCCell.swift */; }; |
| | | 13921C012B8C838700BED781 /* FindItemCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13921BFF2B8C838700BED781 /* FindItemCCell.xib */; }; |
| | | 1393B3922A4ACDB200B73072 /* CourseExerciseSubListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1393B3902A4ACDB200B73072 /* CourseExerciseSubListVC.swift */; }; |
| | | 1393B3932A4ACDB200B73072 /* CourseExerciseSubListVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1393B3912A4ACDB200B73072 /* CourseExerciseSubListVC.xib */; }; |
| | | 1393B3962A4AD03A00B73072 /* CourseExerciseTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1393B3942A4AD03A00B73072 /* CourseExerciseTCell.swift */; }; |
| | |
| | | 13B6BB9E2ABAE000006D0C0E /* SignUpCourseVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B6BB9C2ABAE000006D0C0E /* SignUpCourseVC.xib */; }; |
| | | 13B6BBA12ABAE44E006D0C0E /* CourseSignUpTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B6BB9F2ABAE44E006D0C0E /* CourseSignUpTCell.swift */; }; |
| | | 13B6BBA22ABAE44E006D0C0E /* CourseSignUpTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B6BBA02ABAE44E006D0C0E /* CourseSignUpTCell.xib */; }; |
| | | 13BBFBBE2B8CAE440027A17A /* WorldCupVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BBFBBD2B8CAE440027A17A /* WorldCupVC.swift */; }; |
| | | 13BBFBC12B8CB00F0027A17A /* WorldCupHeaderVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BBFBBF2B8CB00F0027A17A /* WorldCupHeaderVC.swift */; }; |
| | | 13BBFBC22B8CB00F0027A17A /* WorldCupHeaderVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13BBFBC02B8CB00F0027A17A /* WorldCupHeaderVC.xib */; }; |
| | | 13BEEAE52A4D8DFB00685667 /* WelfareExchangeRecordListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BEEAE42A4D8DFB00685667 /* WelfareExchangeRecordListVC.swift */; }; |
| | | 13BEEAE72A4D927100685667 /* WelfareExchangeRecordSubListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BEEAE62A4D927100685667 /* WelfareExchangeRecordSubListVC.swift */; }; |
| | | 13BEEAEA2A4D92A200685667 /* ExchangeRecordTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BEEAE82A4D92A200685667 /* ExchangeRecordTCell.swift */; }; |
| | |
| | | 13EAF3882AB442A4000A6F07 /* GamesDataSourceTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EAF3862AB442A4000A6F07 /* GamesDataSourceTCell.xib */; }; |
| | | 13EC6DDC2A493D23009FC09A /* WelfareCoinCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EC6DDA2A493D23009FC09A /* WelfareCoinCCell.swift */; }; |
| | | 13EC6DDD2A493D23009FC09A /* WelfareCoinCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EC6DDB2A493D23009FC09A /* WelfareCoinCCell.xib */; }; |
| | | 13ECD42E2B8DD82C00187EE9 /* WorldCupTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13ECD42C2B8DD82C00187EE9 /* WorldCupTCell.swift */; }; |
| | | 13ECD42F2B8DD82C00187EE9 /* WorldCupTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13ECD42D2B8DD82C00187EE9 /* WorldCupTCell.xib */; }; |
| | | 13F88AFD2B8F29F10055317B /* StudentInfo_4_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F88AFB2B8F29F10055317B /* StudentInfo_4_TCell.swift */; }; |
| | | 13F88AFE2B8F29F10055317B /* StudentInfo_4_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13F88AFC2B8F29F10055317B /* StudentInfo_4_TCell.xib */; }; |
| | | 13F88B002B8F3DA80055317B /* WorldCupIntroVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F88AFF2B8F3DA80055317B /* WorldCupIntroVC.swift */; }; |
| | | 13F88B052B8F46EA0055317B /* WorldCupListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F88B032B8F46EA0055317B /* WorldCupListVC.swift */; }; |
| | | 13F88B062B8F46EA0055317B /* WorldCupListVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13F88B042B8F46EA0055317B /* WorldCupListVC.xib */; }; |
| | | 13F88B092B8F4A0B0055317B /* WorldCupHeadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F88B082B8F4A0B0055317B /* WorldCupHeadView.swift */; }; |
| | | 13F88B0B2B8F4A1A0055317B /* WorldCupHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13F88B0A2B8F4A1A0055317B /* WorldCupHeadView.xib */; }; |
| | | 13FB93B92A5C028D009F558A /* FinanceTrafer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13FB93B82A5C028D009F558A /* FinanceTrafer.swift */; }; |
| | | 13FBB8D62A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13FBB8D42A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.swift */; }; |
| | | 13FBB8D72A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13FBB8D52A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.xib */; }; |
| | |
| | | 131732B92A405EF800F722AF /* CalendarDateTimeTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CalendarDateTimeTCell.xib; sourceTree = "<group>"; }; |
| | | 131938692AC2D9B700FC63F1 /* WanPaiDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WanPaiDebug.entitlements; sourceTree = "<group>"; }; |
| | | 1319386A2AC2EC8300FC63F1 /* WeChatTools.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeChatTools.swift; sourceTree = "<group>"; }; |
| | | 1324D3552B8DE4CA00F168A8 /* WorldCupRecordVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupRecordVC.swift; sourceTree = "<group>"; }; |
| | | 1324D3572B8DE50000F168A8 /* WorldCupRankVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupRankVC.swift; sourceTree = "<group>"; }; |
| | | 1324D3592B8DE5EA00F168A8 /* WorldCupRecordTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupRecordTCell.swift; sourceTree = "<group>"; }; |
| | | 1324D35A2B8DE5EA00F168A8 /* WorldCupRecordTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WorldCupRecordTCell.xib; sourceTree = "<group>"; }; |
| | | 13272DCA2A40076300AC6481 /* YardBookingTimeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YardBookingTimeView.swift; sourceTree = "<group>"; }; |
| | | 13272DCC2A40076900AC6481 /* YardBookingTimeView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = YardBookingTimeView.xib; sourceTree = "<group>"; }; |
| | | 13272DCE2A4034A300AC6481 /* YardDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YardDetailVC.swift; sourceTree = "<group>"; }; |
| | |
| | | 133E223B2AFB37020045B544 /* StoresInfo_2_View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoresInfo_2_View.swift; sourceTree = "<group>"; }; |
| | | 133E223D2AFB370D0045B544 /* StoresInfo_2_View.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StoresInfo_2_View.xib; sourceTree = "<group>"; }; |
| | | 133E223F2AFB85330045B544 /* CustomPointAnnotation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPointAnnotation.swift; sourceTree = "<group>"; }; |
| | | 13426D612B8F0CFE0032338B /* WorldCupRankTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupRankTCell.swift; sourceTree = "<group>"; }; |
| | | 13426D652B8F20AB0032338B /* WorldCupContentDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupContentDetailVC.swift; sourceTree = "<group>"; }; |
| | | 13426D662B8F20AB0032338B /* WorldCupContentDetailVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WorldCupContentDetailVC.xib; sourceTree = "<group>"; }; |
| | | 13477DC02B8C9F28002E69FB /* MeQRCodeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeQRCodeVC.swift; sourceTree = "<group>"; }; |
| | | 13477DC12B8C9F28002E69FB /* MeQRCodeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeQRCodeVC.xib; sourceTree = "<group>"; }; |
| | | 13477DC82B8CA1C1002E69FB /* MyQRCodeTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyQRCodeTCell.swift; sourceTree = "<group>"; }; |
| | | 13477DC92B8CA1C1002E69FB /* MyQRCodeTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyQRCodeTCell.xib; sourceTree = "<group>"; }; |
| | | 1347D1B92AB4457A0052082A /* GamesDataSourceSubListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamesDataSourceSubListVC.swift; sourceTree = "<group>"; }; |
| | | 1347D1BB2AB448C20052082A /* CourseUnAssignView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseUnAssignView.swift; sourceTree = "<group>"; }; |
| | | 1347D1BD2AB448CC0052082A /* CourseUnAssignView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseUnAssignView.xib; sourceTree = "<group>"; }; |
| | |
| | | 1355ABFC2A4C15C7002B25E4 /* RechargeRecordVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RechargeRecordVC.xib; sourceTree = "<group>"; }; |
| | | 135772AA2AB1B11400EA3544 /* YardBookingDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YardBookingDetailVC.swift; sourceTree = "<group>"; }; |
| | | 135772AB2AB1B11400EA3544 /* YardBookingDetailVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = YardBookingDetailVC.xib; sourceTree = "<group>"; }; |
| | | 13675FF62B8CBDD400085A66 /* WorldCupMenuVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupMenuVC.swift; sourceTree = "<group>"; }; |
| | | 13675FF82B8CC05D00085A66 /* WorldCupContentVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupContentVC.swift; sourceTree = "<group>"; }; |
| | | 136B63962A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchStoreDetail_1_TCell.swift; sourceTree = "<group>"; }; |
| | | 136B63972A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchStoreDetail_1_TCell.xib; sourceTree = "<group>"; }; |
| | | 136E0EE82AB30DD200EDBB8F /* QRPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRPreview.swift; sourceTree = "<group>"; }; |
| | |
| | | 137B86692AB3F03F00C4D01B /* GamesVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GamesVC.xib; sourceTree = "<group>"; }; |
| | | 137B866E2AB3F87000C4D01B /* GamesPayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamesPayView.swift; sourceTree = "<group>"; }; |
| | | 137B86702AB3F87800C4D01B /* GamesPayView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GamesPayView.xib; sourceTree = "<group>"; }; |
| | | 137D2C342B8F5B8E001E34BF /* WorldCupContentApplyVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupContentApplyVC.swift; sourceTree = "<group>"; }; |
| | | 137D2C352B8F5B8E001E34BF /* WorldCupContentApplyVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WorldCupContentApplyVC.xib; sourceTree = "<group>"; }; |
| | | 137D2C382B8F5F67001E34BF /* WorldCupModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupModel.swift; sourceTree = "<group>"; }; |
| | | 137D2C3A2B8F630F001E34BF /* WorldCupContentApplyInputVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupContentApplyInputVC.swift; sourceTree = "<group>"; }; |
| | | 137D2C3B2B8F630F001E34BF /* WorldCupContentApplyInputVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WorldCupContentApplyInputVC.xib; sourceTree = "<group>"; }; |
| | | 13801CBD2A4D20D20041454D /* ChooseStoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseStoreView.swift; sourceTree = "<group>"; }; |
| | | 13801CBF2A4D20DB0041454D /* ChooseStoreView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ChooseStoreView.xib; sourceTree = "<group>"; }; |
| | | 13801CC22A4D26D90041454D /* CommonSingleTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonSingleTCell.swift; sourceTree = "<group>"; }; |
| | |
| | | 138D8B912A4000D2009DCA9E /* YardTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YardTCell.swift; sourceTree = "<group>"; }; |
| | | 138D8B922A4000D2009DCA9E /* YardTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = YardTCell.xib; sourceTree = "<group>"; }; |
| | | 138ED7972AF3A5BE0001F2EF /* CustomPointAnnotationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPointAnnotationView.swift; sourceTree = "<group>"; }; |
| | | 13921BFE2B8C838700BED781 /* FindItemCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindItemCCell.swift; sourceTree = "<group>"; }; |
| | | 13921BFF2B8C838700BED781 /* FindItemCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FindItemCCell.xib; sourceTree = "<group>"; }; |
| | | 1393B3902A4ACDB200B73072 /* CourseExerciseSubListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseExerciseSubListVC.swift; sourceTree = "<group>"; }; |
| | | 1393B3912A4ACDB200B73072 /* CourseExerciseSubListVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseExerciseSubListVC.xib; sourceTree = "<group>"; }; |
| | | 1393B3942A4AD03A00B73072 /* CourseExerciseTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseExerciseTCell.swift; sourceTree = "<group>"; }; |
| | |
| | | 13B6BB9C2ABAE000006D0C0E /* SignUpCourseVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SignUpCourseVC.xib; sourceTree = "<group>"; }; |
| | | 13B6BB9F2ABAE44E006D0C0E /* CourseSignUpTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseSignUpTCell.swift; sourceTree = "<group>"; }; |
| | | 13B6BBA02ABAE44E006D0C0E /* CourseSignUpTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseSignUpTCell.xib; sourceTree = "<group>"; }; |
| | | 13BBFBBD2B8CAE440027A17A /* WorldCupVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupVC.swift; sourceTree = "<group>"; }; |
| | | 13BBFBBF2B8CB00F0027A17A /* WorldCupHeaderVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupHeaderVC.swift; sourceTree = "<group>"; }; |
| | | 13BBFBC02B8CB00F0027A17A /* WorldCupHeaderVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WorldCupHeaderVC.xib; sourceTree = "<group>"; }; |
| | | 13BEEAE42A4D8DFB00685667 /* WelfareExchangeRecordListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelfareExchangeRecordListVC.swift; sourceTree = "<group>"; }; |
| | | 13BEEAE62A4D927100685667 /* WelfareExchangeRecordSubListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelfareExchangeRecordSubListVC.swift; sourceTree = "<group>"; }; |
| | | 13BEEAE82A4D92A200685667 /* ExchangeRecordTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExchangeRecordTCell.swift; sourceTree = "<group>"; }; |
| | |
| | | 13EAF3862AB442A4000A6F07 /* GamesDataSourceTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GamesDataSourceTCell.xib; sourceTree = "<group>"; }; |
| | | 13EC6DDA2A493D23009FC09A /* WelfareCoinCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelfareCoinCCell.swift; sourceTree = "<group>"; }; |
| | | 13EC6DDB2A493D23009FC09A /* WelfareCoinCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WelfareCoinCCell.xib; sourceTree = "<group>"; }; |
| | | 13ECD42C2B8DD82C00187EE9 /* WorldCupTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupTCell.swift; sourceTree = "<group>"; }; |
| | | 13ECD42D2B8DD82C00187EE9 /* WorldCupTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WorldCupTCell.xib; sourceTree = "<group>"; }; |
| | | 13F88AFB2B8F29F10055317B /* StudentInfo_4_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentInfo_4_TCell.swift; sourceTree = "<group>"; }; |
| | | 13F88AFC2B8F29F10055317B /* StudentInfo_4_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StudentInfo_4_TCell.xib; sourceTree = "<group>"; }; |
| | | 13F88AFF2B8F3DA80055317B /* WorldCupIntroVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupIntroVC.swift; sourceTree = "<group>"; }; |
| | | 13F88B032B8F46EA0055317B /* WorldCupListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupListVC.swift; sourceTree = "<group>"; }; |
| | | 13F88B042B8F46EA0055317B /* WorldCupListVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WorldCupListVC.xib; sourceTree = "<group>"; }; |
| | | 13F88B082B8F4A0B0055317B /* WorldCupHeadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCupHeadView.swift; sourceTree = "<group>"; }; |
| | | 13F88B0A2B8F4A1A0055317B /* WorldCupHeadView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WorldCupHeadView.xib; sourceTree = "<group>"; }; |
| | | 13FB93B82A5C028D009F558A /* FinanceTrafer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FinanceTrafer.swift; sourceTree = "<group>"; }; |
| | | 13FBB8D42A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchStoreDetailFeedbackVC.swift; sourceTree = "<group>"; }; |
| | | 13FBB8D52A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchStoreDetailFeedbackVC.xib; sourceTree = "<group>"; }; |
| | |
| | | 13D7D6222A4EBBCF000136BD /* SearchStoreTCell.xib */, |
| | | 136B63962A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.swift */, |
| | | 136B63972A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.xib */, |
| | | 13477DC82B8CA1C1002E69FB /* MyQRCodeTCell.swift */, |
| | | 13477DC92B8CA1C1002E69FB /* MyQRCodeTCell.xib */, |
| | | 13ECD42C2B8DD82C00187EE9 /* WorldCupTCell.swift */, |
| | | 13ECD42D2B8DD82C00187EE9 /* WorldCupTCell.xib */, |
| | | 1324D3592B8DE5EA00F168A8 /* WorldCupRecordTCell.swift */, |
| | | 1324D35A2B8DE5EA00F168A8 /* WorldCupRecordTCell.xib */, |
| | | 13426D612B8F0CFE0032338B /* WorldCupRankTCell.swift */, |
| | | 13F88AFB2B8F29F10055317B /* StudentInfo_4_TCell.swift */, |
| | | 13F88AFC2B8F29F10055317B /* StudentInfo_4_TCell.xib */, |
| | | ); |
| | | path = TCell; |
| | | sourceTree = "<group>"; |
| | |
| | | isa = PBXGroup; |
| | | children = ( |
| | | 1375464A2A581716001FA77A /* HomeModel.swift */, |
| | | 137D2C382B8F5F67001E34BF /* WorldCupModel.swift */, |
| | | ); |
| | | path = Model; |
| | | sourceTree = "<group>"; |
| | |
| | | 13EC6DDB2A493D23009FC09A /* WelfareCoinCCell.xib */, |
| | | 136FD9AB2A4C2F0500933B7C /* RechargeItemCCell.swift */, |
| | | 136FD9AC2A4C2F0500933B7C /* RechargeItemCCell.xib */, |
| | | 13921BFE2B8C838700BED781 /* FindItemCCell.swift */, |
| | | 13921BFF2B8C838700BED781 /* FindItemCCell.xib */, |
| | | ); |
| | | path = CCell; |
| | | sourceTree = "<group>"; |
| | | }; |
| | | 13F88B072B8F49F20055317B /* View */ = { |
| | | isa = PBXGroup; |
| | | children = ( |
| | | 13F88B082B8F4A0B0055317B /* WorldCupHeadView.swift */, |
| | | 13F88B0A2B8F4A1A0055317B /* WorldCupHeadView.xib */, |
| | | ); |
| | | path = View; |
| | | sourceTree = "<group>"; |
| | | }; |
| | | 13FB93B72A5C0270009F558A /* Category */ = { |
| | |
| | | 8DFA9B812A31729000E99281 /* Home */ = { |
| | | isa = PBXGroup; |
| | | children = ( |
| | | 13F88B072B8F49F20055317B /* View */, |
| | | 137546492A58170A001FA77A /* Model */, |
| | | 8D4905A62A31A6D400E38513 /* CCell */, |
| | | 8DFA9B822A3172A300E99281 /* VC */, |
| | |
| | | 8DFA9B842A3172BE00E99281 /* HomeVC.xib */, |
| | | 8D4905AB2A31AE7100E38513 /* JoinMemberIntroduceVC.swift */, |
| | | 8D4905AC2A31AE7100E38513 /* JoinMemberIntroduceVC.xib */, |
| | | 13F88B032B8F46EA0055317B /* WorldCupListVC.swift */, |
| | | 13F88B042B8F46EA0055317B /* WorldCupListVC.xib */, |
| | | ); |
| | | path = VC; |
| | | sourceTree = "<group>"; |
| | |
| | | 13BEEAE62A4D927100685667 /* WelfareExchangeRecordSubListVC.swift */, |
| | | 133A61812A4E6FF70066C4E6 /* WelfareExchangeRecordDetailVC.swift */, |
| | | 133A61822A4E6FF70066C4E6 /* WelfareExchangeRecordDetailVC.xib */, |
| | | 13F88AFF2B8F3DA80055317B /* WorldCupIntroVC.swift */, |
| | | ); |
| | | path = VC; |
| | | sourceTree = "<group>"; |
| | |
| | | 130E40242A4EC029003A3D75 /* SearchStoreDetailVC.swift */, |
| | | 13FBB8D42A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.swift */, |
| | | 13FBB8D52A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.xib */, |
| | | 13477DC02B8C9F28002E69FB /* MeQRCodeVC.swift */, |
| | | 13477DC12B8C9F28002E69FB /* MeQRCodeVC.xib */, |
| | | 13BBFBBD2B8CAE440027A17A /* WorldCupVC.swift */, |
| | | 13BBFBBF2B8CB00F0027A17A /* WorldCupHeaderVC.swift */, |
| | | 13BBFBC02B8CB00F0027A17A /* WorldCupHeaderVC.xib */, |
| | | 13675FF62B8CBDD400085A66 /* WorldCupMenuVC.swift */, |
| | | 13675FF82B8CC05D00085A66 /* WorldCupContentVC.swift */, |
| | | 1324D3552B8DE4CA00F168A8 /* WorldCupRecordVC.swift */, |
| | | 1324D3572B8DE50000F168A8 /* WorldCupRankVC.swift */, |
| | | 13426D652B8F20AB0032338B /* WorldCupContentDetailVC.swift */, |
| | | 13426D662B8F20AB0032338B /* WorldCupContentDetailVC.xib */, |
| | | 137D2C342B8F5B8E001E34BF /* WorldCupContentApplyVC.swift */, |
| | | 137D2C352B8F5B8E001E34BF /* WorldCupContentApplyVC.xib */, |
| | | 137D2C3A2B8F630F001E34BF /* WorldCupContentApplyInputVC.swift */, |
| | | 137D2C3B2B8F630F001E34BF /* WorldCupContentApplyInputVC.xib */, |
| | | ); |
| | | path = VC; |
| | | sourceTree = "<group>"; |
| | |
| | | 13B6BBA22ABAE44E006D0C0E /* CourseSignUpTCell.xib in Resources */, |
| | | 13EAF3882AB442A4000A6F07 /* GamesDataSourceTCell.xib in Resources */, |
| | | 139A39EE2A41349800737AFB /* YardBookingTCell.xib in Resources */, |
| | | 13ECD42F2B8DD82C00187EE9 /* WorldCupTCell.xib in Resources */, |
| | | 8DA51DFC2A32C6D00085F4BA /* StoresChooseView.xib in Resources */, |
| | | 138D8B942A4000D2009DCA9E /* YardTCell.xib in Resources */, |
| | | 8D6810EC2A3710D8004486DE /* StudentChooseView.xib in Resources */, |
| | |
| | | 131732BB2A405EF800F722AF /* CalendarDateTimeTCell.xib in Resources */, |
| | | 8D5732BE2A3724A900B2F8E3 /* AddStudentVC.xib in Resources */, |
| | | 136FD9B22A4C354000933B7C /* WelfareRedeemGoodsDetailVC.xib in Resources */, |
| | | 13F88B0B2B8F4A1A0055317B /* WorldCupHeadView.xib in Resources */, |
| | | 1394B95A2B047A1B00937CC6 /* LogOffVC.xib in Resources */, |
| | | 1324D35C2B8DE5EA00F168A8 /* WorldCupRecordTCell.xib in Resources */, |
| | | 13272DCD2A40076900AC6481 /* YardBookingTimeView.xib in Resources */, |
| | | 1304B85D2A4EB0F8000D4F2E /* SearchBannerCCell.xib in Resources */, |
| | | 136FD9AE2A4C2F0500933B7C /* RechargeItemCCell.xib in Resources */, |
| | |
| | | 8D79A59B2A3967A90029874B /* StudentUpdateInfoView.xib in Resources */, |
| | | 1387B6722A4AC9C000BF2F2E /* CourseBookingTCell.xib in Resources */, |
| | | 137B86712AB3F87800C4D01B /* GamesPayView.xib in Resources */, |
| | | 13BBFBC22B8CB00F0027A17A /* WorldCupHeaderVC.xib in Resources */, |
| | | 13A501972A4D772F00FF6763 /* CoinStoreHeadView.xib in Resources */, |
| | | 8DC99C8A2A3701D800D0F04E /* CouponChooseView.xib in Resources */, |
| | | 137801872A3B01FA00414959 /* ActivitySignupDetailVC.xib in Resources */, |
| | |
| | | 13B6BB9E2ABAE000006D0C0E /* SignUpCourseVC.xib in Resources */, |
| | | 138D4CFC2A47ECAC005233E7 /* CourseInfoScheduleVC.xib in Resources */, |
| | | 1393B3972A4AD03A00B73072 /* CourseExerciseTCell.xib in Resources */, |
| | | 13F88AFE2B8F29F10055317B /* StudentInfo_4_TCell.xib in Resources */, |
| | | 13D084572A406672005B05D5 /* CalendarPickerView.xib in Resources */, |
| | | 8D8400DB2A2F1432003AF6A2 /* Assets.xcassets in Resources */, |
| | | 8DFA9B862A3172BE00E99281 /* HomeVC.xib in Resources */, |
| | | 13A7F72D2AB7E0EC000B3436 /* CourseEXPVC.xib in Resources */, |
| | | 13477DC32B8C9F28002E69FB /* MeQRCodeVC.xib in Resources */, |
| | | 13EAF3822AB43657000A6F07 /* GamesIntruduceView.xib in Resources */, |
| | | 8DFA9B922A317DE900E99281 /* WelfareVC.xib in Resources */, |
| | | 13F88B062B8F46EA0055317B /* WorldCupListVC.xib in Resources */, |
| | | 13B640C12A54108B00EA33ED /* UploadImgCCell.xib in Resources */, |
| | | 8D8DEDF32A31DDC500F2C7FA /* CouponCCell.xib in Resources */, |
| | | 138D8B8F2A3FFE36009DCA9E /* YardListVC.xib in Resources */, |
| | |
| | | 8DF184412A3327EE0095687B /* Common_1_CCell.xib in Resources */, |
| | | 13A501922A4D6EA600FF6763 /* CoinStoreCCell.xib in Resources */, |
| | | 8D6D58D52A3997250003CFE6 /* StoresInfoView.xib in Resources */, |
| | | 13477DCB2B8CA1C1002E69FB /* MyQRCodeTCell.xib in Resources */, |
| | | 8D5C150C2A31885B00A8BCC9 /* CommonAlertView.xib in Resources */, |
| | | 1376A6A22A4A7E1E00D4C851 /* CourseChargeTCell.xib in Resources */, |
| | | 13D7D6242A4EBBCF000136BD /* SearchStoreTCell.xib in Resources */, |
| | | 1393B3932A4ACDB200B73072 /* CourseExerciseSubListVC.xib in Resources */, |
| | | 13426D682B8F20AB0032338B /* WorldCupContentDetailVC.xib in Resources */, |
| | | 130CE4542A4823AC00394384 /* StudentMedalCCell.xib in Resources */, |
| | | 8D5B80B72A31C4C700B86520 /* PaymentView.xib in Resources */, |
| | | 139A39F42A41388200737AFB /* WelfareFreeVC.xib in Resources */, |
| | |
| | | 13CCC4BD2A4A820100DEDF19 /* StudentCourseDetailHeadView.xib in Resources */, |
| | | 8D5C150D2A31885B00A8BCC9 /* AgreentView.xib in Resources */, |
| | | 130EC1822AD3F6C0003CA9BA /* CommonAlertSheetView.xib in Resources */, |
| | | 137D2C3D2B8F630F001E34BF /* WorldCupContentApplyInputVC.xib in Resources */, |
| | | 137D2C372B8F5B8E001E34BF /* WorldCupContentApplyVC.xib in Resources */, |
| | | 1304B8562A4EAA81000D4F2E /* CustomerContentDetailVC.xib in Resources */, |
| | | 137801A42A3C644200414959 /* CourseVideoDetailVC.xib in Resources */, |
| | | 13921C012B8C838700BED781 /* FindItemCCell.xib in Resources */, |
| | | 8D630BF92A31801300F0B7A8 /* SearchVC.xib in Resources */, |
| | | 8D6810E82A370EFB004486DE /* CouponTCell.xib in Resources */, |
| | | 8D6D6AF32A32D6F800DCA2C6 /* CourseListVC.xib in Resources */, |
| | |
| | | 8DC3BE112A3803B500C91B7F /* ActivityListVC.swift in Sources */, |
| | | 1378018A2A3B08A600414959 /* CourseOnlineListVC.swift in Sources */, |
| | | 13D7BA8F2A4BC3E90007E4B7 /* CommonSingleImgCCell.swift in Sources */, |
| | | 13426D632B8F0CFE0032338B /* WorldCupRankTCell.swift in Sources */, |
| | | 131732B72A405DED00F722AF /* YardDetailDateTimeVC.swift in Sources */, |
| | | 13D084552A40666A005B05D5 /* CalendarPickerView.swift in Sources */, |
| | | 8DF184442A332CCD0095687B /* StudentInfoTCell.swift in Sources */, |
| | |
| | | 8DFA9B762A316E9A00E99281 /* LoginRegOrForgotVC.swift in Sources */, |
| | | 132876622A49A18700FC9122 /* StudentExchangeVC.swift in Sources */, |
| | | 13EAF3802AB4364F000A6F07 /* GamesIntruduceView.swift in Sources */, |
| | | 137D2C3C2B8F630F001E34BF /* WorldCupContentApplyInputVC.swift in Sources */, |
| | | 8D6810EA2A3710CE004486DE /* StudentChooseView.swift in Sources */, |
| | | 1384F6DF2AB97E5700A8B620 /* ExperienceCourseVC.swift in Sources */, |
| | | 13ECD42E2B8DD82C00187EE9 /* WorldCupTCell.swift in Sources */, |
| | | 13CCC4BB2A4A81F900DEDF19 /* StudentCourseDetailHeadView.swift in Sources */, |
| | | 13FBB8D62A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.swift in Sources */, |
| | | 8DFA9B8B2A317DAA00E99281 /* CourseVC.swift in Sources */, |
| | |
| | | 1387B6662A4AB66300BF2F2E /* CourseBookingListVC.swift in Sources */, |
| | | 8DAEB54E2A305A0100814766 /* Colors.swift in Sources */, |
| | | 132876682A49A4CB00FC9122 /* StudentReportVC.swift in Sources */, |
| | | 13426D672B8F20AB0032338B /* WorldCupContentDetailVC.swift in Sources */, |
| | | 133A61882A4E7A200066C4E6 /* CustomerSubListVC.swift in Sources */, |
| | | 137B866F2AB3F87000C4D01B /* GamesPayView.swift in Sources */, |
| | | 1350BF172ADFD1D9007FC49F /* RatingBar.swift in Sources */, |
| | |
| | | 8DAEB5522A305B2D00814766 /* Fronts.swift in Sources */, |
| | | 13B6BB9D2ABAE000006D0C0E /* SignUpCourseVC.swift in Sources */, |
| | | 138D4CFB2A47ECAC005233E7 /* CourseInfoScheduleVC.swift in Sources */, |
| | | 13F88B002B8F3DA80055317B /* WorldCupIntroVC.swift in Sources */, |
| | | 13272DD02A4034A300AC6481 /* YardDetailVC.swift in Sources */, |
| | | 1347D1BA2AB4457A0052082A /* GamesDataSourceSubListVC.swift in Sources */, |
| | | 8D8DEDED2A31D82100F2C7FA /* PaymentResultVC.swift in Sources */, |
| | | 8D6810E72A370EFB004486DE /* CouponTCell.swift in Sources */, |
| | | 13675FF92B8CC05D00085A66 /* WorldCupContentVC.swift in Sources */, |
| | | 133E22402AFB85330045B544 /* CustomPointAnnotation.swift in Sources */, |
| | | 133A618C2A4E7AF90066C4E6 /* CustomerContentTCell.swift in Sources */, |
| | | 1387B66C2A4AC61F00BF2F2E /* CourseBookingFuncView.swift in Sources */, |
| | |
| | | 8D7D87172A380970003209D6 /* ActivityInfoTCell.swift in Sources */, |
| | | 8D5C150E2A31885B00A8BCC9 /* CommonAlertView.swift in Sources */, |
| | | 139A39F62A4139E000737AFB /* WelfareWeeklyListVC.swift in Sources */, |
| | | 1324D3562B8DE4CA00F168A8 /* WorldCupRecordVC.swift in Sources */, |
| | | 133435032A40407200F23951 /* CalendarItemCCell.swift in Sources */, |
| | | 13CE11D42AF25C6400F6ACA4 /* UCCateDecorationView.swift in Sources */, |
| | | 8D7017892A3308DC00473C40 /* Common_1_TCell.swift in Sources */, |
| | | 13D7BA922A4BCE480007E4B7 /* WelfareBillListVC.swift in Sources */, |
| | | 1376A6A12A4A7E1E00D4C851 /* CourseChargeTCell.swift in Sources */, |
| | | 13BBFBBE2B8CAE440027A17A /* WorldCupVC.swift in Sources */, |
| | | 137D2C392B8F5F67001E34BF /* WorldCupModel.swift in Sources */, |
| | | 13AFABC12A4AE3DC001FEA16 /* StudentRemarkListVC.swift in Sources */, |
| | | 8D6D58D12A39906F0003CFE6 /* ActivitySignupListSubVC.swift in Sources */, |
| | | 134BD50A2A5FF72900786819 /* OBSUploader.swift in Sources */, |
| | |
| | | 134BD52D2A6008BA00786819 /* YYPaymentResultModel.swift in Sources */, |
| | | 13B640C02A54108B00EA33ED /* UploadImgCCell.swift in Sources */, |
| | | 130E40262A4EC029003A3D75 /* SearchStoreDetailVC.swift in Sources */, |
| | | 1324D3582B8DE50000F168A8 /* WorldCupRankVC.swift in Sources */, |
| | | 1394B9592B047A1B00937CC6 /* LogOffVC.swift in Sources */, |
| | | 1347D1BC2AB448C20052082A /* CourseUnAssignView.swift in Sources */, |
| | | 13DA7D4F2AAF03F90085ABF9 /* CommonScanQRCodeVC.swift in Sources */, |
| | |
| | | 133A61832A4E6FF70066C4E6 /* WelfareExchangeRecordDetailVC.swift in Sources */, |
| | | 1378019F2A3BF98900414959 /* CourseOnlineTCell.swift in Sources */, |
| | | 8DCF25BA2A38136D00DC6899 /* CityChooseSubTypeView.swift in Sources */, |
| | | 13477DC22B8C9F28002E69FB /* MeQRCodeVC.swift in Sources */, |
| | | 8D2BCD3E2A3847F600A360C6 /* ActivityDetailApplyVC.swift in Sources */, |
| | | 8DFA9B852A3172BE00E99281 /* HomeVC.swift in Sources */, |
| | | 13D7BA982A4BD9040007E4B7 /* WelfareCouponsListVC.swift in Sources */, |
| | |
| | | 8DFA9B912A317DE900E99281 /* WelfareVC.swift in Sources */, |
| | | 8D6D58D32A39970C0003CFE6 /* StoresInfoView.swift in Sources */, |
| | | 139A39FD2A413C7900737AFB /* WelfareWeeklySubListVC.swift in Sources */, |
| | | 137D2C362B8F5B8E001E34BF /* WorldCupContentApplyVC.swift in Sources */, |
| | | 13D7BA952A4BD4760007E4B7 /* BillInfoTCell.swift in Sources */, |
| | | 130CE4532A4823AC00394384 /* StudentMedalCCell.swift in Sources */, |
| | | 1378018D2A3B0BBD00414959 /* CourseOnlineHeadView.swift in Sources */, |
| | | 13BBFBC12B8CB00F0027A17A /* WorldCupHeaderVC.swift in Sources */, |
| | | 1393B3922A4ACDB200B73072 /* CourseExerciseSubListVC.swift in Sources */, |
| | | 1304B8512A4EA5ED000D4F2E /* CustomerContentQATCell.swift in Sources */, |
| | | 13801CC72A4D294D0041454D /* ChooseNumberView.swift in Sources */, |
| | |
| | | 1319386B2AC2EC8300FC63F1 /* WeChatTools.swift in Sources */, |
| | | 13801CBE2A4D20D20041454D /* ChooseStoreView.swift in Sources */, |
| | | 137801932A3B0D3C00414959 /* CourseOnlineCCell.swift in Sources */, |
| | | 13675FF72B8CBDD400085A66 /* WorldCupMenuVC.swift in Sources */, |
| | | 1324D35B2B8DE5EA00F168A8 /* WorldCupRecordTCell.swift in Sources */, |
| | | 136FD9AD2A4C2F0500933B7C /* RechargeItemCCell.swift in Sources */, |
| | | 8D630BFB2A3180B000F0B7A8 /* BaseTabBarVC.swift in Sources */, |
| | | 137801862A3B01FA00414959 /* ActivitySignupDetailVC.swift in Sources */, |
| | |
| | | 13BEEAE72A4D927100685667 /* WelfareExchangeRecordSubListVC.swift in Sources */, |
| | | 138D8B932A4000D2009DCA9E /* YardTCell.swift in Sources */, |
| | | 1304B8552A4EAA81000D4F2E /* CustomerContentDetailVC.swift in Sources */, |
| | | 13F88AFD2B8F29F10055317B /* StudentInfo_4_TCell.swift in Sources */, |
| | | 135772AC2AB1B11400EA3544 /* YardBookingDetailVC.swift in Sources */, |
| | | 1378019B2A3BF5C000414959 /* CourseOnlineSubListVC.swift in Sources */, |
| | | 13477DCA2B8CA1C1002E69FB /* MyQRCodeTCell.swift in Sources */, |
| | | 13A501962A4D772F00FF6763 /* CoinStoreHeadView.swift in Sources */, |
| | | 13D606B42A4C29C2004F2A7A /* RechargeCenterVC.swift in Sources */, |
| | | 8DAEB5502A305AEF00814766 /* Def.swift in Sources */, |
| | | 13F88B092B8F4A0B0055317B /* WorldCupHeadView.swift in Sources */, |
| | | 8D8400D42A2F1430003AF6A2 /* SceneDelegate.swift in Sources */, |
| | | 13F88B052B8F46EA0055317B /* WorldCupListVC.swift in Sources */, |
| | | 138D4CFF2A47EF4C005233E7 /* CourseDatetimeCCell.swift in Sources */, |
| | | 139A39FA2A413C6500737AFB /* WelfareWeeklyTCell.swift in Sources */, |
| | | 8DA51DF72A32BE270085F4BA /* Enums.swift in Sources */, |
| | | 130E402A2A4EC33C003A3D75 /* SearchStoreDetailHeadView.swift in Sources */, |
| | | 13921C002B8C838700BED781 /* FindItemCCell.swift in Sources */, |
| | | 134A750A2A5D0D64006D14AE /* RefreshModel.swift in Sources */, |
| | | 1304B8582A4EAEBA000D4F2E /* CommonBannerView.swift in Sources */, |
| | | 8D86DE852A3307A400A754EF /* CourseSubTypeView.swift in Sources */, |
| | |
| | | @main |
| | | class AppDelegate: UIResponder, UIApplicationDelegate { |
| | | |
| | | var window: UIWindow? |
| | | var orientation:UIInterfaceOrientationMask = .portrait |
| | | var window: UIWindow? |
| | | var orientation:UIInterfaceOrientationMask = .portrait |
| | | |
| | | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { |
| | | sleep(2) |
| | | Services.startNetworkMonitor() |
| | | YYPaymentManager.shared.configuredWeChat(appID: WeChatAPPID, universalLink: WechatUniversalLinks) |
| | | YYPaymentManager.shared.configuredAlipay(appScheme: APPScheme) |
| | | AMapServices.shared().enableHTTPS = true |
| | | AMapServices.shared().apiKey = AMapKey |
| | | |
| | | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { |
| | | sleep(2) |
| | | Services.startNetworkMonitor() |
| | | YYPaymentManager.shared.configuredWeChat(appID: WeChatAPPID, universalLink: WechatUniversalLinks) |
| | | YYPaymentManager.shared.configuredAlipay(appScheme: APPScheme) |
| | | AMapServices.shared().enableHTTPS = true |
| | | AMapServices.shared().apiKey = AMapKey |
| | | |
| | | Services.querySystemImg(type: .launch).subscribe(onNext: {data in |
| | | if let img = data.data{ |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: img)) { image, _, _, _ in |
| | | if let img = image{ |
| | | LaunchImageHelper.changeAllLaunchImageToLandscape(img) |
| | | } |
| | | Services.querySystemImg(type: .launch).subscribe(onNext: {data in |
| | | if let img = data.data{ |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: img)) { image, _, _, _ in |
| | | if let img = image{ |
| | | LaunchImageHelper.changeAllLaunchImageToLandscape(img) |
| | | } |
| | | } |
| | | } |
| | | }).disposed(by: JQ_disposeBag) |
| | | return true |
| | | } |
| | | } |
| | | }).disposed(by: JQ_disposeBag) |
| | | return true |
| | | } |
| | | |
| | | // MARK: UISceneSession Lifecycle |
| | | // MARK: UISceneSession Lifecycle |
| | | |
| | | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { |
| | | // Called when a new scene session is being created. |
| | | // Use this method to select a configuration to create the new scene with. |
| | | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) |
| | | } |
| | | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { |
| | | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) |
| | | } |
| | | |
| | | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { |
| | | // Called when the user discards a scene session. |
| | | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. |
| | | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. |
| | | } |
| | | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { |
| | | |
| | | func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { |
| | | if UIDevice.current.userInterfaceIdiom == .pad{ |
| | | return .all |
| | | }else{ |
| | | return orientation |
| | | } |
| | | } |
| | | } |
| | | |
| | | func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { |
| | | print("---->") |
| | | return YYPaymentManager.shared.handleApplication(application, open: url, sourceApplication: sourceApplication, annotation: annotation) |
| | | } |
| | | func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { |
| | | if UIDevice.current.userInterfaceIdiom == .pad{ |
| | | return .all |
| | | }else{ |
| | | return orientation |
| | | } |
| | | } |
| | | |
| | | func application(_ application: UIApplication, handleOpen url: URL) -> Bool { |
| | | print("---->1") |
| | | return YYPaymentManager.shared.handleApplication(application, handleOpen: url) |
| | | } |
| | | func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { |
| | | print("---->") |
| | | return YYPaymentManager.shared.handleApplication(application, open: url, sourceApplication: sourceApplication, annotation: annotation) |
| | | } |
| | | |
| | | // NOTE: 9.0以后使用新API接口 |
| | | func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { |
| | | print("---->2") |
| | | return YYPaymentManager.shared.handleApplication(app, open: url, options: options) |
| | | } |
| | | func application(_ application: UIApplication, handleOpen url: URL) -> Bool { |
| | | print("---->1") |
| | | return YYPaymentManager.shared.handleApplication(application, handleOpen: url) |
| | | } |
| | | |
| | | func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { |
| | | print("---->3") |
| | | return YYPaymentManager.shared.handleApplication(userActivity) |
| | | } |
| | | // NOTE: 9.0以后使用新API接口 |
| | | func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { |
| | | print("---->2") |
| | | return YYPaymentManager.shared.handleApplication(app, open: url, options: options) |
| | | } |
| | | |
| | | |
| | | func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { |
| | | print("---->3") |
| | | return YYPaymentManager.shared.handleApplication(userActivity) |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | extension AppDelegate{ |
| | | func registerAndLoginSuccess(){ |
| | | let snapView = sceneDelegate?.window?.snapshotView(afterScreenUpdates: true) |
| | | func registerAndLoginSuccess(){ |
| | | let snapView = sceneDelegate?.window?.snapshotView(afterScreenUpdates: true) |
| | | |
| | | let tabBar = BaseTabBarVC() |
| | | let homeNav = BaseNav(rootViewController: HomeVC()) |
| | | homeNav.tabBarItem = UITabBarItem(title: "加入玩湃", image: UIImage(named: "tabbar_home"), selectedImage: UIImage(named: "tabbar_home_s")!.withRenderingMode(.alwaysOriginal)) |
| | | let tabBar = BaseTabBarVC() |
| | | let homeNav = BaseNav(rootViewController: HomeVC()) |
| | | homeNav.tabBarItem = UITabBarItem(title: "加入玩湃", image: UIImage(named: "tabbar_home"), selectedImage: UIImage(named: "tabbar_home_s")!.withRenderingMode(.alwaysOriginal)) |
| | | |
| | | let clouseNav = BaseNav(rootViewController: CourseVC()) |
| | | clouseNav.tabBarItem = UITabBarItem(title: "玩湃运动营", image: UIImage(named: "tabbar_course"), selectedImage: UIImage(named: "tabbar_course_s")!.withRenderingMode(.alwaysOriginal)) |
| | | let clouseNav = BaseNav(rootViewController: CourseVC()) |
| | | clouseNav.tabBarItem = UITabBarItem(title: "玩湃运动营", image: UIImage(named: "tabbar_course"), selectedImage: UIImage(named: "tabbar_course_s")!.withRenderingMode(.alwaysOriginal)) |
| | | |
| | | let welfareVCNav = BaseNav(rootViewController: WelfareVC()) |
| | | welfareVCNav.tabBarItem = UITabBarItem(title: "使用福利", image: UIImage(named: "tabbar_welfare"), selectedImage: UIImage(named: "tabbar_welfare_s")!.withRenderingMode(.alwaysOriginal)) |
| | | let welfareVCNav = BaseNav(rootViewController: WelfareVC()) |
| | | welfareVCNav.tabBarItem = UITabBarItem(title: "使用福利", image: UIImage(named: "tabbar_welfare"), selectedImage: UIImage(named: "tabbar_welfare_s")!.withRenderingMode(.alwaysOriginal)) |
| | | |
| | | let searchVCNav = BaseNav(rootViewController: SearchVC()) |
| | | searchVCNav.tabBarItem = UITabBarItem(title: "搜索玩湃", image: UIImage(named: "tabbar_search"), selectedImage: UIImage(named: "tabbar_search_s")!.withRenderingMode(.alwaysOriginal)) |
| | | tabBar.viewControllers = [homeNav,clouseNav,welfareVCNav,searchVCNav] |
| | | sceneDelegate?.window?.rootViewController = tabBar |
| | | sceneDelegate?.window?.rootViewController?.view.addSubview(snapView!) |
| | | sceneDelegate?.window?.makeKeyAndVisible() |
| | | let searchVCNav = BaseNav(rootViewController: SearchVC()) |
| | | searchVCNav.tabBarItem = UITabBarItem(title: "搜索玩湃", image: UIImage(named: "tabbar_search"), selectedImage: UIImage(named: "tabbar_search_s")!.withRenderingMode(.alwaysOriginal)) |
| | | tabBar.viewControllers = [homeNav,clouseNav,welfareVCNav,searchVCNav] |
| | | sceneDelegate?.window?.rootViewController = tabBar |
| | | sceneDelegate?.window?.rootViewController?.view.addSubview(snapView!) |
| | | sceneDelegate?.window?.makeKeyAndVisible() |
| | | |
| | | UIView.animate(withDuration: 1.5) { |
| | | snapView?.alpha = 0 |
| | | snapView?.transform3D = CATransform3DMakeScale(1.5, 1.5, 1.5) |
| | | } completion: { _ in |
| | | snapView?.removeFromSuperview() |
| | | } |
| | | UIView.animate(withDuration: 1.5) { |
| | | snapView?.alpha = 0 |
| | | snapView?.transform3D = CATransform3DMakeScale(1.5, 1.5, 1.5) |
| | | } completion: { _ in |
| | | snapView?.removeFromSuperview() |
| | | } |
| | | |
| | | // YYSocketManager.instance.startSocket(host: Socket_Url, port: 8888) |
| | | } |
| | | // YYSocketManager.instance.startSocket(host: Socket_Url, port: 8888) |
| | | } |
| | | |
| | | func needLogin(){ |
| | | UserViewModel.clearToken() |
| | | UserDefaults.standard.setValue(nil, forKey: "currentStuId") |
| | | if JQ_currentViewController() is LoginVC{return} |
| | | let loginNav = LoginNav(rootViewController: LoginVC()) |
| | | loginNav.modalPresentationStyle = .fullScreen |
| | | JQ_currentViewController().present(loginNav, animated: true) |
| | | } |
| | | func needLogin(){ |
| | | UserViewModel.clearToken() |
| | | UserDefaults.standard.setValue(nil, forKey: "currentStuId") |
| | | if JQ_currentViewController() is LoginVC{return} |
| | | let loginNav = LoginNav(rootViewController: LoginVC()) |
| | | loginNav.modalPresentationStyle = .fullScreen |
| | | JQ_currentViewController().present(loginNav, animated: true) |
| | | } |
| | | } |
| | | |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "bg_long@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "bg_long@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "btn_exchange3@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "btn_exchange@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "btn_setting_find@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "btn_setting_find@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "icon_age@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "icon_age@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "icon_hot_1@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "icon_hot_1@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "icon_reset@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "icon_reset@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "icon_time_1@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "icon_time_1@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "icon_winner@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "icon_winner@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "rank_1@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "rank_1@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "rank_2@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "rank_2@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "rank_3@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "rank_3@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
| | |
| | | |
| | | class CommonWebVC: BaseVC, WKNavigationDelegate { |
| | | |
| | | private var type:AgreentType! |
| | | private var content:String! |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var cons_webHeight: NSLayoutConstraint! |
| | | @IBOutlet weak var view_btns: UIView! |
| | | |
| | | init(type:AgreentType,content:String? = nil) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.content = content |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view_btns.isHidden = true |
| | | webView.navigationDelegate = self |
| | | private var type:AgreentType! |
| | | private var content:String! |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var cons_webHeight: NSLayoutConstraint! |
| | | @IBOutlet weak var view_btns: UIView! |
| | | |
| | | if type != .other{ |
| | | title = type.titleStr |
| | | Services.queryProtocol(type,progress: false).subscribe(onNext: {[weak self] result in |
| | | if let text = result.data?.jq_wrapHtml(){ |
| | | self?.webView.loadHTMLString(text, baseURL: nil) |
| | | init(type:AgreentType,content:String? = nil) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.content = content |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | webView.loadHTMLString(content?.jq_wrapHtml() ?? "", baseURL: nil) |
| | | } |
| | | } |
| | | |
| | | override func setRx() { |
| | | webView.scrollView.rx.observe(CGSize.self, "contentSize").map { (size) -> CGFloat? in |
| | | if let size = size{ |
| | | return size.height |
| | | } |
| | | return nil |
| | | }.subscribe(onNext: { [unowned self](height) in |
| | | if let height = height{ |
| | | self.cons_webHeight.constant = height |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | } |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view_btns.isHidden = true |
| | | webView.navigationDelegate = self |
| | | |
| | | @IBAction func readAction(_ sender: UIButton) { |
| | | switch type { |
| | | case .user: |
| | | UserDefaults.standard.set(object: true, forKey: "agreent_2") |
| | | UserDefaults.standard.synchronize() |
| | | case .safe: |
| | | UserDefaults.standard.set(object: true, forKey: "agreent_3") |
| | | UserDefaults.standard.synchronize() |
| | | case .privacy: |
| | | UserDefaults.standard.set(object: true, forKey: "agreent_1") |
| | | UserDefaults.standard.synchronize() |
| | | default:break |
| | | } |
| | | navigationController?.popViewController() |
| | | } |
| | | if type != .other{ |
| | | title = type.titleStr |
| | | Services.queryProtocol(type,progress: false).subscribe(onNext: {[weak self] result in |
| | | if let text = result.data?.jq_wrapHtml(){ |
| | | self?.webView.loadHTMLString(text, baseURL: nil) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | webView.loadHTMLString(content?.jq_wrapHtml() ?? "", baseURL: nil) |
| | | } |
| | | } |
| | | |
| | | @IBAction func cancelAction(_ sender: UIButton) { |
| | | navigationController?.popViewController() |
| | | } |
| | | override func setRx() { |
| | | webView.scrollView.rx.observe(CGSize.self, "contentSize").map { (size) -> CGFloat? in |
| | | if let size = size{ |
| | | return size.height |
| | | } |
| | | return nil |
| | | }.subscribe(onNext: { [unowned self](height) in |
| | | if let height = height{ |
| | | self.cons_webHeight.constant = height |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | |
| | | } |
| | | |
| | | @IBAction func readAction(_ sender: UIButton) { |
| | | switch type { |
| | | case .user: |
| | | UserDefaults.standard.set(object: true, forKey: "agreent_2") |
| | | UserDefaults.standard.synchronize() |
| | | case .safe: |
| | | UserDefaults.standard.set(object: true, forKey: "agreent_3") |
| | | UserDefaults.standard.synchronize() |
| | | case .privacy: |
| | | UserDefaults.standard.set(object: true, forKey: "agreent_1") |
| | | UserDefaults.standard.synchronize() |
| | | default:break |
| | | } |
| | | navigationController?.popViewController() |
| | | } |
| | | |
| | | @IBAction func cancelAction(_ sender: UIButton) { |
| | | navigationController?.popViewController() |
| | | } |
| | | |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .darkContent |
| | | } |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .darkContent |
| | | } |
| | | |
| | | override var shouldAutorotate: Bool{ |
| | | return false |
| | | } |
| | | |
| | | override var shouldAutorotate: Bool{ |
| | | return false |
| | | } |
| | | |
| | | func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { |
| | | switch type { |
| | | case .user,.safe,.privacy: |
| | | view_btns.isHidden = false |
| | | navigationItem.leftBarButtonItem = UIBarButtonItem() |
| | | default: |
| | | view_btns.isHidden = true |
| | | } |
| | | } |
| | | func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { |
| | | switch type { |
| | | case .user,.safe,.privacy: |
| | | view_btns.isHidden = false |
| | | navigationItem.leftBarButtonItem = UIBarButtonItem() |
| | | default: |
| | | view_btns.isHidden = true |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | import JQTools |
| | | import SVProgressHUD |
| | | import QMUIKit |
| | | import OSLog |
| | | |
| | | let SHAKEY = "BT7NPhA0f775uzcUuftWjCE1TYZlWmHZ" |
| | | let WechatUniversalLinks = "https://www.weparklife.com/" |
| | |
| | | let locationTool = JQ_LocationTool.instance() |
| | | |
| | | var sceneDelegate:SceneDelegate? = { |
| | | var uiScreen:UIScene? |
| | | UIApplication.shared.connectedScenes.forEach { scenes in |
| | | uiScreen = scenes |
| | | } |
| | | return (uiScreen?.delegate as? SceneDelegate) |
| | | var uiScreen:UIScene? |
| | | UIApplication.shared.connectedScenes.forEach { scenes in |
| | | uiScreen = scenes |
| | | } |
| | | return (uiScreen?.delegate as? SceneDelegate) |
| | | }() |
| | | |
| | | |
| | | |
| | | func LogSuccess(_ items:Any...,separator:String=" ",file:String=#file,function:String=#function,line:Int=#line){ |
| | | #if DEBUG |
| | | let file = (file as NSString).lastPathComponent.split(separator: ".").first!; |
| | | print("✅✅✅ SUCCESS: \(file) \(function) [Line: \(line)]: \(items)",separator); |
| | | if #available(iOS 14.0, *) { |
| | | let logger = Logger(subsystem: "WanPai", category: function) |
| | | logger.error("\(items)") |
| | | }else{ |
| | | let file = (file as NSString).lastPathComponent.split(separator: ".").first!; |
| | | print("✅✅✅ SUCCESS: \(file) \(function) [Line: \(line)]: \(items)",separator); |
| | | } |
| | | |
| | | #endif |
| | | } |
| | | |
| | | func LogError(_ items:Any...,separator:String=" ",file:String=#file,function:String=#function,line:Int=#line){ |
| | | #if DEBUG |
| | | let file = (file as NSString).lastPathComponent.split(separator: ".").first!; |
| | | print("❌❌❌ ERROR: \(file) \(function) [Line: \(line)]: \(items)",separator); |
| | | if #available(iOS 14.0, *) { |
| | | let logger = Logger(subsystem: "WanPai", category: function) |
| | | logger.error("\(items)") |
| | | }else{ |
| | | let file = (file as NSString).lastPathComponent.split(separator: ".").first!; |
| | | print("❌❌❌ ERROR: \(file) \(function) [Line: \(line)]: \(items)",separator); |
| | | } |
| | | #endif |
| | | } |
| | | |
| | | func LogInfo(_ items:Any...,separator:String=" ",file:String=#file,function:String=#function,line:Int=#line){ |
| | | #if DEBUG |
| | | let file = (file as NSString).lastPathComponent.split(separator: ".").first!; |
| | | print("⚠️⚠️⚠️INFO: \(file) \(function) [Line: \(line)]: \(items)",separator); |
| | | if #available(iOS 14.0, *) { |
| | | let logger = Logger(subsystem: "WanPai", category: function) |
| | | logger.error("\(items)") |
| | | }else{ |
| | | let file = (file as NSString).lastPathComponent.split(separator: ".").first!; |
| | | print("⚠️⚠️⚠️INFO: \(file) \(function) [Line: \(line)]: \(items)",separator); |
| | | } |
| | | #endif |
| | | } |
| | | |
| | | func LogResponse(_ items:Any...,separator:String=" ",file:String=#file,function:String=#function,line:Int=#line){ |
| | | #if DEBUG |
| | | print("返回数据") |
| | | print(items); |
| | | print("返回数据") |
| | | print(items); |
| | | #endif |
| | | } |
| | | |
| | | //提示框 |
| | | //提示框 |
| | | func alert(msg: String) { |
| | | SVProgressHUD.showInfo(withStatus: msg) |
| | | SVProgressHUD.showInfo(withStatus: msg) |
| | | } |
| | | |
| | | func alertError(msg:String){ |
| | | SVProgressHUD.showError(withStatus: msg) |
| | | SVProgressHUD.showError(withStatus: msg) |
| | | } |
| | | |
| | | func alertSuccess(msg:String){ |
| | | SVProgressHUD.showSuccess(withStatus: msg) |
| | | SVProgressHUD.showSuccess(withStatus: msg) |
| | | } |
| | | |
| | | func showHUD(_ text:String? = nil){ |
| | | SVProgressHUD.show(withStatus: text) |
| | | SVProgressHUD.show(withStatus: text) |
| | | } |
| | | |
| | | func hiddenHUD(_ delay:TimeInterval? = nil){ |
| | | if delay != nil{ |
| | | SVProgressHUD.dismiss(withDelay: delay!) |
| | | }else{ |
| | | SVProgressHUD.dismiss() |
| | | } |
| | | if delay != nil{ |
| | | SVProgressHUD.dismiss(withDelay: delay!) |
| | | }else{ |
| | | SVProgressHUD.dismiss() |
| | | } |
| | | } |
| | | |
| | | extension UIButton { |
| | | func localGradientColor(cornerRadius:Double,bounds:CGRect? = nil){ |
| | | self.layer.sublayers?.removeAll(where: {$0 is CAGradientLayer}) |
| | | self.jq_gradientColor(colorArr: [UIColor(hexStr: "#FD8802").cgColor,UIColor(hexStr: "#FE7703").cgColor], cornerRadius: cornerRadius, startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 1), bounds: bounds) |
| | | } |
| | | func localGradientColor(cornerRadius:Double,bounds:CGRect? = nil){ |
| | | self.layer.sublayers?.removeAll(where: {$0 is CAGradientLayer}) |
| | | self.jq_gradientColor(colorArr: [UIColor(hexStr: "#FD8802").cgColor,UIColor(hexStr: "#FE7703").cgColor], cornerRadius: cornerRadius, startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 1), bounds: bounds) |
| | | } |
| | | |
| | | public func openCountDown(_ t:Int = 59,defultTitle:String = "获取验证码"){ |
| | | var time = t //倒计时时间 |
| | | let queue = DispatchQueue.global() |
| | | let timer = DispatchSource.makeTimerSource(flags: [], queue: queue) |
| | | timer.schedule(wallDeadline: DispatchWallTime.now(), repeating: .seconds(1)); |
| | | timer.setEventHandler(handler: { |
| | | if time <= 0 { |
| | | timer.cancel() |
| | | DispatchQueue.main.async(execute: { |
| | | self.setTitle(defultTitle, for: .normal) |
| | | self.setTitleColor(UIColor(hexStr: "#63BDDB"), for: .normal) |
| | | self.isUserInteractionEnabled = true |
| | | }); |
| | | }else { |
| | | DispatchQueue.main.async(execute: { |
| | | self.setTitle("\(time)s", for: .normal) |
| | | self.setTitleColor(UIColor.gray, for: .normal) |
| | | self.isUserInteractionEnabled = false |
| | | }); |
| | | } |
| | | time -= 1 |
| | | }); |
| | | timer.resume() |
| | | } |
| | | public func openCountDown(_ t:Int = 59,defultTitle:String = "获取验证码"){ |
| | | var time = t //倒计时时间 |
| | | let queue = DispatchQueue.global() |
| | | let timer = DispatchSource.makeTimerSource(flags: [], queue: queue) |
| | | timer.schedule(wallDeadline: DispatchWallTime.now(), repeating: .seconds(1)); |
| | | timer.setEventHandler(handler: { |
| | | if time <= 0 { |
| | | timer.cancel() |
| | | DispatchQueue.main.async(execute: { |
| | | self.setTitle(defultTitle, for: .normal) |
| | | self.setTitleColor(UIColor(hexStr: "#63BDDB"), for: .normal) |
| | | self.isUserInteractionEnabled = true |
| | | }); |
| | | }else { |
| | | DispatchQueue.main.async(execute: { |
| | | self.setTitle("\(time)s", for: .normal) |
| | | self.setTitleColor(UIColor.gray, for: .normal) |
| | | self.isUserInteractionEnabled = false |
| | | }); |
| | | } |
| | | time -= 1 |
| | | }); |
| | | timer.resume() |
| | | } |
| | | } |
| | | |
| | | func jumpPage(model:String,page:String = "",type:String = "",id:Int? = nil){ |
| | | |
| | | var storeModel:NormalSimpleModel? |
| | | if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ |
| | | if let deserModel = HomeStoreModel.deserialize(from: storeStr){ |
| | | storeModel = NormalSimpleModel(id: deserModel.storeId, name: deserModel.name) |
| | | } |
| | | } |
| | | |
| | | |
| | | switch model { |
| | | case "加入会员": |
| | | if page == "成为会员"{ |
| | | let vc = JoinMemberIntroduceVC() |
| | | JQ_currentViewController().jq_push(vc:vc) |
| | | } |
| | | |
| | | case "首页banner": |
| | | if page == "成为会员"{ |
| | | let vc = JoinMemberIntroduceVC() |
| | | JQ_currentViewController().jq_push(vc:vc) |
| | | } |
| | | case "首页": |
| | | if page == "常见问题"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerListVC(page: 1)) |
| | | } |
| | | ///=============== |
| | | |
| | | |
| | | case "加入玩湃": |
| | | if page == "主页"{ |
| | | JQ_currentViewController().navigationController?.popToRootViewController(animated: true) |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | JQ_currentViewController().tabBarController?.selectedIndex = 0 |
| | | var storeModel:NormalSimpleModel? |
| | | if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ |
| | | if let deserModel = HomeStoreModel.deserialize(from: storeStr){ |
| | | storeModel = NormalSimpleModel(id: deserModel.storeId, name: deserModel.name) |
| | | } |
| | | } |
| | | } |
| | | |
| | | if page == "课程列表"{ |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: CourseDetailVC(id:id ?? 0)) |
| | | }else{ |
| | | JQ_currentViewController().jq_push(vc: CourseListVC(selectStore: storeModel)) |
| | | } |
| | | } |
| | | |
| | | if page == "赛事活动列表"{ |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: ActivityDetailVC(id: id ?? 0)) |
| | | }else{ |
| | | JQ_currentViewController().jq_push(vc: ActivityListVC()) |
| | | } |
| | | } |
| | | switch model { |
| | | case "加入会员": |
| | | if page == "成为会员"{ |
| | | let vc = JoinMemberIntroduceVC() |
| | | JQ_currentViewController().jq_push(vc:vc) |
| | | } |
| | | |
| | | if page == "线上课得积分"{ |
| | | if type == "详情"{ |
| | | let vc = CourseVideoDetailVC(id: id ?? 0) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else if type == "列表"{ |
| | | let vc = CourseOnlineSubListVC(classificationId: id ?? 0) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else if type == "主页"{ |
| | | let vc = CourseOnlineListVC(position: 1) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | } |
| | | } |
| | | case "首页banner": |
| | | if page == "成为会员"{ |
| | | let vc = JoinMemberIntroduceVC() |
| | | JQ_currentViewController().jq_push(vc:vc) |
| | | } |
| | | case "首页": |
| | | if page == "常见问题"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerListVC(page: 1)) |
| | | } |
| | | ///=============== |
| | | |
| | | if page == "看视频得奖励"{ |
| | | if type == "详情"{ |
| | | let vc = CourseVideoDetailVC(id: id ?? 0) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else if type == "列表"{ |
| | | let vc = CourseOnlineSubListVC(classificationId: id ?? 0) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else if type == "主页"{ |
| | | let vc = CourseOnlineListVC(position: 2) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | if page == "预约场地"{ |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: YardDetailVC(id: id ?? 0)) |
| | | }else{ |
| | | JQ_currentViewController().jq_push(vc: YardListVC(selectStore: storeModel)) |
| | | } |
| | | } |
| | | case "加入玩湃": |
| | | if page == "主页"{ |
| | | JQ_currentViewController().navigationController?.popToRootViewController(animated: true) |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | JQ_currentViewController().tabBarController?.selectedIndex = 0 |
| | | } |
| | | } |
| | | |
| | | if page == "智慧球场"{ |
| | | JQ_currentViewController().jq_push(vc: GamesVC()) |
| | | } |
| | | if page == "课程列表"{ |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: CourseDetailVC(id:id ?? 0)) |
| | | }else{ |
| | | JQ_currentViewController().jq_push(vc: CourseListVC(selectStore: storeModel)) |
| | | } |
| | | } |
| | | |
| | | if page == "成为会员"{ |
| | | JQ_currentViewController().jq_push(vc: JoinMemberIntroduceVC()) |
| | | } |
| | | if page == "赛事活动列表"{ |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: ActivityDetailVC(id: id ?? 0)) |
| | | }else{ |
| | | JQ_currentViewController().jq_push(vc: ActivityListVC()) |
| | | } |
| | | } |
| | | |
| | | case "开始课程": |
| | | if page == "主页"{ |
| | | JQ_currentViewController().navigationController?.popToRootViewController(animated: true) |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | JQ_currentViewController().tabBarController?.selectedIndex = 1 |
| | | } |
| | | } |
| | | if page == "线上课得积分"{ |
| | | if type == "详情"{ |
| | | let vc = CourseVideoDetailVC(id: id ?? 0) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else if type == "列表"{ |
| | | let vc = CourseOnlineSubListVC(classificationId: id ?? 0) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else if type == "主页"{ |
| | | let vc = CourseOnlineListVC(position: 1) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | case "使用福利": |
| | | if page == "主页"{ |
| | | JQ_currentViewController().navigationController?.popToRootViewController(animated: true) |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | JQ_currentViewController().tabBarController?.selectedIndex = 2 |
| | | } |
| | | } |
| | | if page == "看视频得奖励"{ |
| | | if type == "详情"{ |
| | | let vc = CourseVideoDetailVC(id: id ?? 0) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else if type == "列表"{ |
| | | let vc = CourseOnlineSubListVC(classificationId: id ?? 0) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else if type == "主页"{ |
| | | let vc = CourseOnlineListVC(position: 2) |
| | | vc.title = page |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | if page == "充值中心"{ |
| | | JQ_currentViewController().jq_push(vc: RechargeCenterVC()) |
| | | } |
| | | if page == "预约场地"{ |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: YardDetailVC(id: id ?? 0)) |
| | | }else{ |
| | | JQ_currentViewController().jq_push(vc: YardListVC(selectStore: storeModel)) |
| | | } |
| | | } |
| | | |
| | | if page == "积分商城"{ |
| | | if type == "主页"{ |
| | | JQ_currentViewController().jq_push(vc: CoinStoreCenterVC()) |
| | | } |
| | | if type == "指定商品"{ |
| | | JQ_currentViewController().jq_push(vc: WelfareRedeemGoodsDetailVC(commodityId: id ?? 0, goodsType:nil)) |
| | | } |
| | | } |
| | | if page == "智慧球场"{ |
| | | JQ_currentViewController().jq_push(vc: GamesVC()) |
| | | } |
| | | |
| | | if page == "本周福利"{ |
| | | if type == "限时折扣(主页)"{ |
| | | JQ_currentViewController().jq_push(vc: WelfareWeeklyListVC(page: 0)) |
| | | } |
| | | if type == "赠送课时(主页)"{ |
| | | JQ_currentViewController().jq_push(vc: WelfareWeeklyListVC(page: 1)) |
| | | } |
| | | if type == "指定折扣"{ |
| | | JQ_currentViewController().jq_push(vc: WelfareWeeklyDetailVC(id: id ?? 0)) |
| | | } |
| | | } |
| | | if page == "成为会员"{ |
| | | JQ_currentViewController().jq_push(vc: JoinMemberIntroduceVC()) |
| | | } |
| | | |
| | | case "探索玩湃": |
| | | if page == "门店列表"{ |
| | | let vc = SearchStoreListVC() |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | // JQ_currentViewController().navigationController?.popToRootViewController(animated: true) |
| | | // DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | // JQ_currentViewController().tabBarController?.selectedIndex = 3 |
| | | // } |
| | | } |
| | | if page == "社区世界杯"{ |
| | | JQ_currentViewController().jq_push(vc: WorldCupListVC()) |
| | | } |
| | | |
| | | if page == "常见问题"{ |
| | | if type == "列表"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerListVC(page: 1)) |
| | | } |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerContentDetailVC(id: id ?? 0, type: .QA)) |
| | | } |
| | | } |
| | | case "开始课程": |
| | | if page == "主页"{ |
| | | JQ_currentViewController().navigationController?.popToRootViewController(animated: true) |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | JQ_currentViewController().tabBarController?.selectedIndex = 1 |
| | | } |
| | | } |
| | | |
| | | if page == "公告发布"{ |
| | | if type == "列表"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerListVC(page: 0)) |
| | | case "使用福利": |
| | | if page == "主页"{ |
| | | JQ_currentViewController().navigationController?.popToRootViewController(animated: true) |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | JQ_currentViewController().tabBarController?.selectedIndex = 2 |
| | | } |
| | | } |
| | | |
| | | if page == "充值中心"{ |
| | | JQ_currentViewController().jq_push(vc: RechargeCenterVC()) |
| | | } |
| | | |
| | | if page == "积分商城"{ |
| | | if type == "主页"{ |
| | | JQ_currentViewController().jq_push(vc: CoinStoreCenterVC()) |
| | | } |
| | | if type == "指定商品"{ |
| | | JQ_currentViewController().jq_push(vc: WelfareRedeemGoodsDetailVC(commodityId: id ?? 0, goodsType:nil)) |
| | | } |
| | | } |
| | | |
| | | if page == "本周福利"{ |
| | | if type == "限时折扣(主页)"{ |
| | | JQ_currentViewController().jq_push(vc: WelfareWeeklyListVC(page: 0)) |
| | | } |
| | | if type == "赠送课时(主页)"{ |
| | | JQ_currentViewController().jq_push(vc: WelfareWeeklyListVC(page: 1)) |
| | | } |
| | | if type == "指定折扣"{ |
| | | JQ_currentViewController().jq_push(vc: WelfareWeeklyDetailVC(id: id ?? 0)) |
| | | } |
| | | } |
| | | |
| | | case "探索玩湃": |
| | | if page == "门店列表"{ |
| | | let vc = SearchStoreListVC() |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | // JQ_currentViewController().navigationController?.popToRootViewController(animated: true) |
| | | // DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | // JQ_currentViewController().tabBarController?.selectedIndex = 3 |
| | | // } |
| | | } |
| | | |
| | | if page == "常见问题"{ |
| | | if type == "列表"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerListVC(page: 1)) |
| | | } |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerContentDetailVC(id: id ?? 0, type: .QA)) |
| | | } |
| | | } |
| | | |
| | | if page == "公告发布"{ |
| | | if type == "列表"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerListVC(page: 0)) |
| | | } |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerContentDetailVC(id: id ?? 0, type: .notice)) |
| | | } |
| | | } |
| | | default:break |
| | | } |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: CustomerContentDetailVC(id: id ?? 0, type: .notice)) |
| | | } |
| | | } |
| | | default:break |
| | | } |
| | | } |
| | |
| | | // |
| | | // Enums.swift |
| | | // WanPai |
| | | // |
| | | // Created by 杨锴 on 2023/6/9. |
| | | // |
| | | // |
| | | // Enums.swift |
| | | // WanPai |
| | | // |
| | | // Created by 杨锴 on 2023/6/9. |
| | | // |
| | | |
| | | import Foundation |
| | | import HandyJSON |
| | | |
| | | enum BannerPositionType:Int{ |
| | | /// 首页 |
| | | case homeTop = 1 |
| | | ///线上课得积分 |
| | | case onlineCourse = 2 |
| | | ///看视频得奖励 |
| | | case video = 3 |
| | | ///常见问题 |
| | | case qusition = 4 |
| | | /// 首页 |
| | | case homeTop = 1 |
| | | ///线上课得积分 |
| | | case onlineCourse = 2 |
| | | ///看视频得奖励 |
| | | case video = 3 |
| | | ///常见问题 |
| | | case qusition = 4 |
| | | } |
| | | |
| | | /// 登录类型 |
| | | /// 登录类型 |
| | | enum LoginType{ |
| | | case pwd,smsCode |
| | | case pwd,smsCode |
| | | } |
| | | |
| | | /// 支付方式 |
| | | /// 支付方式 |
| | | enum PayType:Int,HandyJSONEnum{ |
| | | case free = 0 //特殊状态:免费 |
| | | case wechat = 1 |
| | | case aliPay = 2 |
| | | case coin = 3 |
| | | case courseNum = 4 |
| | | case integral = 5 |
| | | case free = 0 //特殊状态:免费 |
| | | case wechat = 1 |
| | | case aliPay = 2 |
| | | case coin = 3 |
| | | case courseNum = 4 |
| | | case integral = 5 |
| | | } |
| | | |
| | | enum PayStateType:Int,HandyJSONEnum{ |
| | | case unPayment = 1 |
| | | case paymented = 2 |
| | | case unPayment = 1 |
| | | case paymented = 2 |
| | | } |
| | | |
| | | enum ItemType{ |
| | | case course |
| | | case activity |
| | | case course |
| | | case activity |
| | | } |
| | | |
| | | /// 获取短信验证码类型 |
| | | /// 获取短信验证码类型 |
| | | enum GetSMSCodeType:Int{ |
| | | case login = 1 |
| | | case register = 2 |
| | | case updatePwd = 3 |
| | | case forgotPwd = 4 |
| | | case login = 1 |
| | | case register = 2 |
| | | case updatePwd = 3 |
| | | case forgotPwd = 4 |
| | | |
| | | var titleStr:String{ |
| | | switch self { |
| | | case .login: |
| | | return "登录" |
| | | case .register: |
| | | return "注册" |
| | | case .updatePwd: |
| | | return "修改密码" |
| | | case .forgotPwd: |
| | | return "忘记密码" |
| | | } |
| | | } |
| | | var titleStr:String{ |
| | | switch self { |
| | | case .login: |
| | | return "登录" |
| | | case .register: |
| | | return "注册" |
| | | case .updatePwd: |
| | | return "修改密码" |
| | | case .forgotPwd: |
| | | return "忘记密码" |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | enum AgreentType:Int { |
| | | |
| | | case user = 1 |
| | | case safe = 3 |
| | | case privacy = 2 |
| | | case other = 4 |
| | | case matchStore = 5 |
| | | case useStore = 6 |
| | | case user = 1 |
| | | case safe = 3 |
| | | case privacy = 2 |
| | | case other = 4 |
| | | case matchStore = 5 |
| | | case useStore = 6 |
| | | |
| | | var titleStr:String{ |
| | | switch self{ |
| | | case .privacy:return "隐私协议" |
| | | case .safe:return "运动安全告知书" |
| | | case .user:return "用户协议" |
| | | case .matchStore:return "参与门店" |
| | | case .other:return "" |
| | | case .useStore:return "可用门店" |
| | | } |
| | | } |
| | | var titleStr:String{ |
| | | switch self{ |
| | | case .privacy:return "隐私协议" |
| | | case .safe:return "运动安全告知书" |
| | | case .user:return "用户协议" |
| | | case .matchStore:return "参与门店" |
| | | case .other:return "" |
| | | case .useStore:return "可用门店" |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum SystemImgType:Int{ |
| | | case notStudent = 1 |
| | | case becomeVip = 2 |
| | | case myCoupon = 3 |
| | | case shoppingOnline = 4 |
| | | case welfareWeekly = 5 |
| | | case freeToday = 6 |
| | | case launch = 7 |
| | | case notStudent = 1 |
| | | case becomeVip = 2 |
| | | case myCoupon = 3 |
| | | case shoppingOnline = 4 |
| | | case welfareWeekly = 5 |
| | | case freeToday = 6 |
| | | case launch = 7 |
| | | } |
| | | |
| | | |
| | | enum HomeItemType:Int,HandyJSONEnum{ |
| | | case none = 0 |
| | | ///报名玩湃运动营 |
| | | case course = 1 |
| | | ///预约场地 |
| | | case booking = 2 |
| | | ///报名赛事及活动 |
| | | case activity = 3 |
| | | ///免费福利 |
| | | case welfare = 4 |
| | | ///线上运动营积分 |
| | | case coin = 5 |
| | | ///购买优惠门票 |
| | | case ticket = 6 |
| | | /// 看视频得奖励 |
| | | case video = 7 |
| | | ///智慧球场 |
| | | case wisdomCourt = 8 |
| | | ///世界杯 |
| | | case worldcup = 0 |
| | | ///报名玩湃运动营 |
| | | case course = 1 |
| | | ///预约场地 |
| | | case booking = 2 |
| | | ///报名赛事及活动 |
| | | case activity = 3 |
| | | ///免费福利 |
| | | case welfare = 4 |
| | | ///线上运动营积分 |
| | | case coin = 5 |
| | | ///购买优惠门票 |
| | | case ticket = 6 |
| | | /// 看视频得奖励 |
| | | case video = 7 |
| | | ///智慧球场 |
| | | case wisdomCourt = 8 |
| | | |
| | | var defaultImg:UIImage{ |
| | | switch self { |
| | | case .none: |
| | | return UIImage() |
| | | case .course: |
| | | return UIImage(named: "b_1")! |
| | | case .booking: |
| | | return UIImage(named: "b_5")! |
| | | case .activity: |
| | | return UIImage(named: "b_2")! |
| | | case .welfare: |
| | | return UIImage(named: "b_6")! |
| | | case .coin: |
| | | return UIImage(named: "b_4")! |
| | | case .ticket: |
| | | return UIImage(named: "b_8")! |
| | | case .video: |
| | | return UIImage(named: "b_3")! |
| | | case .wisdomCourt: |
| | | return UIImage(named: "b_7")! |
| | | } |
| | | } |
| | | case nothing = -999 |
| | | |
| | | var defaultImg:UIImage{ |
| | | switch self { |
| | | case .course: |
| | | return UIImage(named: "b_1")! |
| | | case .booking: |
| | | return UIImage(named: "b_5")! |
| | | case .activity: |
| | | return UIImage(named: "b_2")! |
| | | case .welfare: |
| | | return UIImage(named: "b_6")! |
| | | case .coin: |
| | | return UIImage(named: "b_4")! |
| | | case .ticket: |
| | | return UIImage(named: "b_8")! |
| | | case .video: |
| | | return UIImage(named: "b_3")! |
| | | case .wisdomCourt: |
| | | return UIImage(named: "b_7")! |
| | | default: |
| | | return UIImage() |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | enum SortType:String{ |
| | | case asc = "asc" |
| | | case desc = "desc" |
| | | case def = "icon_sort_normal" |
| | | case asc = "asc" |
| | | case desc = "desc" |
| | | case def = "icon_sort_normal" |
| | | |
| | | var img:UIImage{ |
| | | switch self{ |
| | | case .asc:return UIImage(named: "icon_asc")! |
| | | case .desc:return UIImage(named: "icon_desc")! |
| | | case .def:return UIImage(named: "icon_sort_normal")! |
| | | } |
| | | } |
| | | var img:UIImage{ |
| | | switch self{ |
| | | case .asc:return UIImage(named: "icon_asc")! |
| | | case .desc:return UIImage(named: "icon_desc")! |
| | | case .def:return UIImage(named: "icon_sort_normal")! |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum Sort2Type:Int,HandyJSONEnum{ |
| | | //1积分高到低 2积分从低到高 3兑换从高到低 |
| | | case coinAsc = 1 |
| | | case coinDesc = 2 |
| | | case exAsc = 3 |
| | | case exDesc = 4 |
| | | //1积分高到低 2积分从低到高 3兑换从高到低 |
| | | case coinAsc = 1 |
| | | case coinDesc = 2 |
| | | case exAsc = 3 |
| | | case exDesc = 4 |
| | | } |
| | | |
| | | enum GenderType:Int,HandyJSONEnum{ |
| | | case man = 1 |
| | | case woman = 2 |
| | | case man = 1 |
| | | case woman = 2 |
| | | } |
| | | |
| | | enum PaymentType:Int,HandyJSONEnum{ |
| | | case cash = 1 //现金 |
| | | case coin = 2 //玩湃币 |
| | | case cashCoin = 3 //现金 + 币 |
| | | case cash = 1 //现金 |
| | | case coin = 2 //玩湃币 |
| | | case cashCoin = 3 //现金 + 币 |
| | | } |
| | | |
| | | enum CouponType:Int,HandyJSONEnum{ |
| | | case none = 0 |
| | | ///满减券 |
| | | case discount = 1 |
| | | /// 代金券 |
| | | case voucher = 2 |
| | | /// 体验券 |
| | | case experience = 3 |
| | | case none = 0 |
| | | ///满减券 |
| | | case discount = 1 |
| | | /// 代金券 |
| | | case voucher = 2 |
| | | /// 体验券 |
| | | case experience = 3 |
| | | |
| | | var rawTitle:String{ |
| | | switch self { |
| | | case .none:return "" |
| | | case .discount:return "满减券" |
| | | case .voucher:return "代金券" |
| | | case .experience:return "体验券" |
| | | } |
| | | } |
| | | var rawTitle:String{ |
| | | switch self { |
| | | case .none:return "" |
| | | case .discount:return "满减券" |
| | | case .voucher:return "代金券" |
| | | case .experience:return "体验券" |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum RegisterAcitivyType:Int,HandyJSONEnum{ |
| | | /// 全部用户 |
| | | case allUser = 1 |
| | | /// 仅限年度会员参与 |
| | | case vip = 2 |
| | | ///仅限学员参与 |
| | | case student = 3 |
| | | /// 全部用户 |
| | | case allUser = 1 |
| | | /// 仅限年度会员参与 |
| | | case vip = 2 |
| | | ///仅限学员参与 |
| | | case student = 3 |
| | | |
| | | var strTitle:String{ |
| | | switch self { |
| | | case .allUser:return "全部用户" |
| | | case .vip:return "仅限年度会员" |
| | | case .student:return "仅限运动营成员" |
| | | } |
| | | } |
| | | var strTitle:String{ |
| | | switch self { |
| | | case .allUser:return "全部用户" |
| | | case .vip:return "仅限年度会员" |
| | | case .student:return "仅限运动营成员" |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /// 我的报名活动赛事 |
| | | /// 我的报名活动赛事 |
| | | enum SignupType:Int,HandyJSONEnum{ |
| | | ///全部 |
| | | case all = 0 |
| | | ///未开始 |
| | | case prepare = 1 |
| | | /// 进行中 |
| | | case ongoing = 2 |
| | | /// 已结束 |
| | | case over = 3 |
| | | /// 已取消 |
| | | case cancel = 4 |
| | | ///全部 |
| | | case all = 0 |
| | | ///未开始 |
| | | case prepare = 1 |
| | | /// 进行中 |
| | | case ongoing = 2 |
| | | /// 已结束 |
| | | case over = 3 |
| | | /// 已取消 |
| | | case cancel = 4 |
| | | |
| | | var rawTitle:String{ |
| | | switch self { |
| | | case .all:return "" |
| | | case .prepare:return "未开始" |
| | | case .ongoing:return "进行中" |
| | | case .over:return "已结束" |
| | | case .cancel:return "已取消" |
| | | } |
| | | } |
| | | var rawTitle:String{ |
| | | switch self { |
| | | case .all:return "" |
| | | case .prepare:return "未开始" |
| | | case .ongoing:return "进行中" |
| | | case .over:return "已结束" |
| | | case .cancel:return "已取消" |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum YardBookingType:Int,HandyJSONEnum{ |
| | | case none = -1 |
| | | case waitPayment = 0 |
| | | case pending = 1 |
| | | case inStore = 2 |
| | | case complete = 3 |
| | | case overdue = 4 |
| | | case cancel = 5 |
| | | case none = -1 |
| | | case waitPayment = 0 |
| | | case pending = 1 |
| | | case inStore = 2 |
| | | case complete = 3 |
| | | case overdue = 4 |
| | | case cancel = 5 |
| | | |
| | | var titleRaw:String{ |
| | | switch self { |
| | | case .waitPayment:return "待支付" |
| | | case .pending:return "待核销" |
| | | case .inStore:return "已核销" |
| | | case .complete:return "已完成" |
| | | case .overdue:return "已过期" |
| | | case .cancel:return "已取消" |
| | | case .none:return "" |
| | | } |
| | | } |
| | | var titleRaw:String{ |
| | | switch self { |
| | | case .waitPayment:return "待支付" |
| | | case .pending:return "待核销" |
| | | case .inStore:return "已核销" |
| | | case .complete:return "已完成" |
| | | case .overdue:return "已过期" |
| | | case .cancel:return "已取消" |
| | | case .none:return "" |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | enum CouponConditionType:Int,HandyJSONEnum{ |
| | | case nationwide = 1 //全国 |
| | | case city = 2 //城市 |
| | | case store = 3 // 门店 |
| | | case nationwide = 1 //全国 |
| | | case city = 2 //城市 |
| | | case store = 3 // 门店 |
| | | |
| | | var titleRaw:String{ |
| | | switch self { |
| | | case .nationwide:return "全国通用" |
| | | case .city:return "指定城市可用" |
| | | case .store:return "指定门店可用" |
| | | } |
| | | } |
| | | var titleRaw:String{ |
| | | switch self { |
| | | case .nationwide:return "全国通用" |
| | | case .city:return "指定城市可用" |
| | | case .store:return "指定门店可用" |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum CouponUseType:Int,HandyJSONEnum{ |
| | | case unused = 1 |
| | | case used = 2 |
| | | case overdue = 3 |
| | | case unused = 1 |
| | | case used = 2 |
| | | case overdue = 3 |
| | | } |
| | | |
| | | enum ExchangeType:Int,HandyJSONEnum{ |
| | | //商品类型 1实物 2课包 3门票 4优惠券 |
| | | case goods = 1 |
| | | case course = 2 |
| | | case ticket = 3 |
| | | case coupon = 4 |
| | | //商品类型 1实物 2课包 3门票 4优惠券 |
| | | case goods = 1 |
| | | case course = 2 |
| | | case ticket = 3 |
| | | case coupon = 4 |
| | | |
| | | var strTitle:String{ |
| | | switch self { |
| | | case .goods:return "实体" |
| | | case .coupon:return "优惠券" |
| | | case .course:return "运动营" |
| | | case .ticket:return "门票" |
| | | } |
| | | } |
| | | var strTitle:String{ |
| | | switch self { |
| | | case .goods:return "实体" |
| | | case .coupon:return "优惠券" |
| | | case .course:return "运动营" |
| | | case .ticket:return "门票" |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum ExchangePaymentType:Int,HandyJSONEnum{ |
| | | case coin = 1 |
| | | case cashAndCoin = 2 |
| | | case cash = 3 |
| | | case coin = 1 |
| | | case cashAndCoin = 2 |
| | | case cash = 3 |
| | | } |
| | | |
| | | enum UseStateType:Int,HandyJSONEnum{ |
| | | case used = 1 |
| | | case unUsed = 2 |
| | | case expired = 3 |
| | | case used = 1 |
| | | case unUsed = 2 |
| | | case expired = 3 |
| | | |
| | | var strTitle:String{ |
| | | switch self{ |
| | | case .used:return "已使用" |
| | | case .unUsed:return "待使用" |
| | | case .expired:return "已过期" |
| | | } |
| | | } |
| | | var strTitle:String{ |
| | | switch self{ |
| | | case .used:return "已使用" |
| | | case .unUsed:return "待使用" |
| | | case .expired:return "已过期" |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum DetailType:Int,HandyJSONEnum{ |
| | | case minus = 1 //正数 |
| | | case positive = 2 //负数 |
| | | case minus = 1 //正数 |
| | | case positive = 2 //负数 |
| | | } |
| | | |
| | | |
| | | enum StudentAppointType:Int,HandyJSONEnum{ |
| | | case pedding = 1 |
| | | case begining = 2 |
| | | case complete = 3 |
| | | case cancel = 4 |
| | | case leave = 5 |
| | | case truant = 6 |
| | | case pedding = 1 |
| | | case begining = 2 |
| | | case complete = 3 |
| | | case cancel = 4 |
| | | case leave = 5 |
| | | case truant = 6 |
| | | |
| | | var strTitle:String{ |
| | | switch self{ |
| | | case .pedding:return "待上课" |
| | | case .begining:return "已开始" |
| | | case .complete:return "已完成" |
| | | case .cancel:return "已取消" |
| | | case .leave:return "已请假" |
| | | case .truant:return "旷课" |
| | | } |
| | | } |
| | | var strTitle:String{ |
| | | switch self{ |
| | | case .pedding:return "待上课" |
| | | case .begining:return "已开始" |
| | | case .complete:return "已完成" |
| | | case .cancel:return "已取消" |
| | | case .leave:return "已请假" |
| | | case .truant:return "旷课" |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum StudentAppointTypeList:Int{ |
| | | case all = 0 |
| | | case pedding = 1 |
| | | case complete = 2 |
| | | case cancel = 3 |
| | | case all = 0 |
| | | case pedding = 1 |
| | | case complete = 2 |
| | | case cancel = 3 |
| | | } |
| | | |
| | | enum StudentAppointDateType:Int,HandyJSONEnum{ |
| | | case all = 0 |
| | | case week = 1 |
| | | case month = 2 |
| | | case year = 3 |
| | | case all = 0 |
| | | case week = 1 |
| | | case month = 2 |
| | | case year = 3 |
| | | } |
| | | |
| | | enum MedalType:Int,HandyJSONEnum{ |
| | | case club = 1 |
| | | case sport = 2 |
| | | case communtiy = 3 |
| | | case deepPlayer = 4 |
| | | case more = 5 |
| | | case club = 1 |
| | | case sport = 2 |
| | | case communtiy = 3 |
| | | case deepPlayer = 4 |
| | | case more = 5 |
| | | |
| | | |
| | | var image:UIImage{ |
| | | switch self { |
| | | case .club:return UIImage(named: "icon_coupon_1")! |
| | | case .sport:return UIImage(named: "icon_coupon_2")! |
| | | case .communtiy:return UIImage(named: "icon_coupon_3")! |
| | | case .deepPlayer:return UIImage(named: "icon_coupon_4")! |
| | | case .more:return UIImage(named: "icon_coupon_6")! |
| | | } |
| | | } |
| | | var image:UIImage{ |
| | | switch self { |
| | | case .club:return UIImage(named: "icon_coupon_1")! |
| | | case .sport:return UIImage(named: "icon_coupon_2")! |
| | | case .communtiy:return UIImage(named: "icon_coupon_3")! |
| | | case .deepPlayer:return UIImage(named: "icon_coupon_4")! |
| | | case .more:return UIImage(named: "icon_coupon_6")! |
| | | } |
| | | } |
| | | |
| | | var title_en:String{ |
| | | switch self { |
| | | case .club:return "COURSE" |
| | | case .sport:return "EVENTS" |
| | | case .communtiy:return "ON_LINE" |
| | | case .deepPlayer:return "APPOINTMENT" |
| | | case .more:return "MORE" |
| | | } |
| | | } |
| | | var title_en:String{ |
| | | switch self { |
| | | case .club:return "COURSE" |
| | | case .sport:return "EVENTS" |
| | | case .communtiy:return "ON_LINE" |
| | | case .deepPlayer:return "APPOINTMENT" |
| | | case .more:return "MORE" |
| | | } |
| | | } |
| | | |
| | | var title:String{ |
| | | switch self { |
| | | case .club:return "俱乐部之星" |
| | | case .sport:return "运动大人" |
| | | case .communtiy:return "社区之王" |
| | | case .deepPlayer:return "深度玩家" |
| | | case .more:return "更多" |
| | | } |
| | | } |
| | | var title:String{ |
| | | switch self { |
| | | case .club:return "俱乐部之星" |
| | | case .sport:return "运动大人" |
| | | case .communtiy:return "社区之王" |
| | | case .deepPlayer:return "深度玩家" |
| | | case .more:return "更多" |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | /** |
| | | |
| | | |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_1"), t1: "COURSE", t2: "俱乐部之星")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_2"), t1: "EVENTS", t2: "运动大人")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_3"), t1: "ON_LINE", t2: "社区之王")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_4"), t1: "APPOINTMENT", t2: "深度玩家")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_5"), t1: "EVENTS", t2: "月度冠军")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_6"), t1: "MORE", t2: "更多"))*/ |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_1"), t1: "COURSE", t2: "俱乐部之星")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_2"), t1: "EVENTS", t2: "运动大人")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_3"), t1: "ON_LINE", t2: "社区之王")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_4"), t1: "APPOINTMENT", t2: "深度玩家")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_5"), t1: "EVENTS", t2: "月度冠军")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_6"), t1: "MORE", t2: "更多"))*/ |
| | | } |
| | | |
| | | enum CourseType:Int,HandyJSONEnum{ |
| | | case none = 0 |
| | | case normal = 1 |
| | | case vocation = 2 |
| | | case experience = 3 |
| | | case none = 0 |
| | | case normal = 1 |
| | | case vocation = 2 |
| | | case experience = 3 |
| | | |
| | | var strTitle:String{ |
| | | switch self { |
| | | case .normal: return "常规班" |
| | | case .vocation:return "假期班" |
| | | case .experience:return "体验课" |
| | | default:return "" |
| | | } |
| | | } |
| | | var strTitle:String{ |
| | | switch self { |
| | | case .normal: return "常规班" |
| | | case .vocation:return "假期班" |
| | | case .experience:return "体验课" |
| | | default:return "" |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | enum CardType:Int,HandyJSONEnum{ |
| | | case none = 0 |
| | | case subCard = 1 |
| | | case monthCard = 2 |
| | | case quarterCard = 3 |
| | | case yearCard = 4 |
| | | case none = 0 |
| | | case subCard = 1 |
| | | case monthCard = 2 |
| | | case quarterCard = 3 |
| | | case yearCard = 4 |
| | | |
| | | var strTitle:String{ |
| | | switch self { |
| | | case .subCard: return "日卡" |
| | | case .monthCard:return "月卡" |
| | | case .quarterCard:return "季卡" |
| | | case .yearCard:return "年卡" |
| | | default:return "" |
| | | } |
| | | } |
| | | var strTitle:String{ |
| | | switch self { |
| | | case .subCard: return "日卡" |
| | | case .monthCard:return "月卡" |
| | | case .quarterCard:return "季卡" |
| | | case .yearCard:return "年卡" |
| | | default:return "" |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum ScanType:Int,HandyJSONEnum{ |
| | | case games = 1000 //游戏 |
| | | case course = 1001 //运动营 |
| | | case yard = 1002 //场地 |
| | | case games = 1000 //游戏 |
| | | case course = 1001 //运动营 |
| | | case yard = 1002 //场地 |
| | | } |
| | |
| | | // |
| | | // CommonModels.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2023/7/7. |
| | | // |
| | | // |
| | | // CommonModels.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2023/7/7. |
| | | // |
| | | |
| | | import HandyJSON |
| | | |
| | | struct CourseItemModel:HandyJSON{ |
| | | var id = 0 |
| | | var storeName = "" |
| | | var name = "" |
| | | var coverDrawing = "" |
| | | var classStartTime = [String]() |
| | | var applicantsNumber = 0 |
| | | var payType:PaymentType = .cash |
| | | var originalPrice:Double = 0 |
| | | var vipPrice:Double = 0 |
| | | var paymentPrice:Double = 0 |
| | | var playPaiCoin:Int = 0 |
| | | var distance:Double = 0 |
| | | var id = 0 |
| | | var storeName = "" |
| | | var name = "" |
| | | var coverDrawing = "" |
| | | var classStartTime = [String]() |
| | | var applicantsNumber = 0 |
| | | var payType:PaymentType = .cash |
| | | var originalPrice:Double = 0 |
| | | var vipPrice:Double = 0 |
| | | var paymentPrice:Double = 0 |
| | | var playPaiCoin:Int = 0 |
| | | var distance:Double = 0 |
| | | } |
| | | |
| | | struct SignUpCourseItemModel:HandyJSON{ |
| | | var coursePackageId = 0 |
| | | var coursePayId = 0 |
| | | var packageImg = "" |
| | | var courseNameStore = "" |
| | | var courseTime = "" |
| | | var courseTeacher = "" |
| | | var courseNums = 0 |
| | | var payStatus:PayStateType = .unPayment |
| | | var coursePackTypeId = 0 |
| | | var type:CourseType = .normal |
| | | var orderId:Int = 0 |
| | | var coursePackageId = 0 |
| | | var coursePayId = 0 |
| | | var packageImg = "" |
| | | var courseNameStore = "" |
| | | var courseTime = "" |
| | | var courseTeacher = "" |
| | | var courseNums = 0 |
| | | var payStatus:PayStateType = .unPayment |
| | | var coursePackTypeId = 0 |
| | | var type:CourseType = .normal |
| | | var orderId:Int = 0 |
| | | } |
| | | |
| | | struct SignUpCourseItemDetailModel:HandyJSON{ |
| | | var amount: Int = 0 |
| | | var coursePackageId: Int = 0 |
| | | var coursePackageName: String = "" |
| | | var coursePayId: Int = 0 |
| | | var courseTimeFrame: String = "" |
| | | var coverDrawing: String = "" |
| | | var introduceDrawing: String = "" |
| | | var payStatus: PayStateType = .paymented // 1:未支付,2:续课 |
| | | var vipAmount: Int = 0 |
| | | var weeks: String = "" |
| | | var wpGold: Int = 0 |
| | | var paymentPrice:Double = 0 |
| | | var time = "" |
| | | var list = [CourseDetailListModel]() |
| | | var chooseHours = 0 |
| | | var amount: Int = 0 |
| | | var coursePackageId: Int = 0 |
| | | var coursePackageName: String = "" |
| | | var coursePayId: Int = 0 |
| | | var courseTimeFrame: String = "" |
| | | var coverDrawing: String = "" |
| | | var introduceDrawing: String = "" |
| | | var payStatus: PayStateType = .paymented // 1:未支付,2:续课 |
| | | var vipAmount: Int = 0 |
| | | var weeks: String = "" |
| | | var wpGold: Int = 0 |
| | | var paymentPrice:Double = 0 |
| | | var time = "" |
| | | var list = [CourseDetailListModel]() |
| | | var chooseHours = 0 |
| | | |
| | | var payType:PayType = .aliPay |
| | | var payPrice:Double = 0 |
| | | var orinPrice:Double = 0 |
| | | var coinPrice:Int = 0 |
| | | var stuIds = [Int]() |
| | | var payType:PayType = .aliPay |
| | | var payPrice:Double = 0 |
| | | var orinPrice:Double = 0 |
| | | var coinPrice:Int = 0 |
| | | var stuIds = [Int]() |
| | | } |
| | | |
| | | struct CourseDetailModel:HandyJSON { |
| | | var coverDrawing: String = "" |
| | | var detailDrawing: String = "" |
| | | var distance: Double = 0 |
| | | var id: Int = 0 |
| | | var introduceDrawing: String = "" |
| | | var lat: String = "" |
| | | var list = [CourseDetailListModel]() |
| | | var lon: String = "" |
| | | var name: String = "" |
| | | var storeAddress: String = "" |
| | | var storeCoverDrawing: String = "" |
| | | var storeName: String = "" |
| | | var student: CourseDetailStudentModel? |
| | | var times = [String]() |
| | | var weeks = [String]() |
| | | var type:CourseType = .normal |
| | | var time = "" |
| | | var isVip = 0 //是否是会员:1:是 0:否 |
| | | var coverDrawing: String = "" |
| | | var detailDrawing: String = "" |
| | | var distance: Double = 0 |
| | | var id: Int = 0 |
| | | var introduceDrawing: String = "" |
| | | var lat: String = "" |
| | | var list = [CourseDetailListModel]() |
| | | var lon: String = "" |
| | | var name: String = "" |
| | | var storeAddress: String = "" |
| | | var storeCoverDrawing: String = "" |
| | | var storeName: String = "" |
| | | var student: CourseDetailStudentModel? |
| | | var times = [String]() |
| | | var weeks = [String]() |
| | | var type:CourseType = .normal |
| | | var time = "" |
| | | var isVip = 0 //是否是会员:1:是 0:否 |
| | | } |
| | | |
| | | struct CourseDetailListModel:HandyJSON { |
| | | var classHours: Int = 0 |
| | | var id: Int = 0 |
| | | var originalPrice:Double = 0 |
| | | var paymentPrice:Double = 0 |
| | | var payType: PaymentType = .cash |
| | | var playPaiCoin:Int = 0 |
| | | var vipPrice:Double = 0 |
| | | var classHours: Int = 0 |
| | | var id: Int = 0 |
| | | var originalPrice:Double = 0 |
| | | var paymentPrice:Double = 0 |
| | | var payType: PaymentType = .cash |
| | | var playPaiCoin:Int = 0 |
| | | var vipPrice:Double = 0 |
| | | } |
| | | |
| | | struct CourseDetailStudentModel:HandyJSON { |
| | | var age: Int = 0 |
| | | var id: Int = 0 |
| | | var name = "" |
| | | var phone:String = "" |
| | | var age: Int = 0 |
| | | var id: Int = 0 |
| | | var name = "" |
| | | var phone:String = "" |
| | | } |
| | | |
| | | struct StudentProfileModel:HandyJSON{ |
| | | var birthday = "" |
| | | var headImg = "" |
| | | var height:Double = 0 |
| | | var idCard:String? |
| | | var name = "" |
| | | var phone:String? |
| | | var sex:GenderType = .man |
| | | var weight:Double = 0 |
| | | var birthday = "" |
| | | var headImg = "" |
| | | var height:Double = 0 |
| | | var idCard:String? |
| | | var name = "" |
| | | var phone:String? |
| | | var sex:GenderType = .man |
| | | var weight:Double = 0 |
| | | |
| | | var stuId:Int? |
| | | var stuId:Int? |
| | | } |
| | | |
| | | struct StudentProfile1Model:HandyJSON{ |
| | | var birthday = "" |
| | | var isNot = 2 //1. 是默认 2. 不是默认 |
| | | var stuAge:Int = 0 |
| | | var stuHeight:Double = 0 |
| | | var stuId = 0 |
| | | var stuName:String = "" |
| | | var stuWeight:Double = 0 |
| | | var idCard:String = "" |
| | | var stuPhone:String = "" |
| | | var stuHeadImg:String = "" |
| | | var sex:GenderType = .man |
| | | var birthday = "" |
| | | var isNot = 2 //1. 是默认 2. 不是默认 |
| | | var stuAge:Int = 0 |
| | | var stuHeight:Double = 0 |
| | | var stuId = 0 |
| | | var stuName:String = "" |
| | | var stuWeight:Double = 0 |
| | | var idCard:String = "" |
| | | var stuPhone:String = "" |
| | | var stuHeadImg:String = "" |
| | | var sex:GenderType = .man |
| | | } |
| | | |
| | | struct StudentSimpleProfileModel:HandyJSON{ |
| | | var stuId = 0 |
| | | var stuName = "" |
| | | var stuImage = "" |
| | | var stuId = 0 |
| | | var stuName = "" |
| | | var stuImage = "" |
| | | } |
| | | |
| | | |
| | | struct StudentProfile2Model:HandyJSON{ |
| | | var stuAge:Int = 0 |
| | | var stuId = 0 |
| | | var stuName:String = "" |
| | | var stuPhone:String = "" |
| | | var storeId:Int = 0 |
| | | var storeName:String = "" |
| | | var stuAge:Int = 0 |
| | | var stuId = 0 |
| | | var stuName:String = "" |
| | | var stuPhone:String = "" |
| | | var storeId:Int = 0 |
| | | var storeName:String = "" |
| | | } |
| | | |
| | | struct CouponInfoModel:HandyJSON{ |
| | | ///有效时间 |
| | | var effectiveTime: String = "" |
| | | /// 优惠 |
| | | var favorable: Double = 0 |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var type:CouponType = .none |
| | | /// 使用条件 |
| | | var useCondition: String = "" |
| | | ///有效时间 |
| | | var effectiveTime: String = "" |
| | | /// 优惠 |
| | | var favorable: Double = 0 |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var type:CouponType = .none |
| | | /// 使用条件 |
| | | var useCondition: String = "" |
| | | } |
| | | |
| | | struct CouponInfo_1_Model:HandyJSON{ |
| | | ///有效时间 |
| | | var effectiveTime: String = "" |
| | | /// 优惠 |
| | | var favorable: String = "" |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var type:CouponType = .none |
| | | /// 使用条件 |
| | | var useCondition: String = "" |
| | | ///有效时间 |
| | | var effectiveTime: String = "" |
| | | /// 优惠 |
| | | var favorable: String = "" |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var type:CouponType = .none |
| | | /// 使用条件 |
| | | var useCondition: String = "" |
| | | } |
| | | |
| | | struct PaymentModel:HandyJSON{ |
| | | var orderString = "" |
| | | var returnId = 0 |
| | | var siteBooking:Int = 0 |
| | | var orderString = "" |
| | | var returnId = 0 |
| | | var siteBooking:Int = 0 |
| | | } |
| | | |
| | | struct StoreWalfareModel:HandyJSON{ |
| | | var phone = "" |
| | | var img = "" |
| | | var phone = "" |
| | | var img = "" |
| | | } |
| | | |
| | | struct ActivityListModel:HandyJSON{ |
| | | var age: String = "" |
| | | var cityName: String = "" |
| | | var coverDrawing: String = "" |
| | | var heat: Int = 0 |
| | | var id: Int = 0 |
| | | var introduction: String = "" |
| | | var name: String = "" |
| | | var registerCondition:RegisterAcitivyType = .allUser |
| | | var registerEndTime: String = "" |
| | | var status:SignupType = .all |
| | | var age: String = "" |
| | | var cityName: String = "" |
| | | var coverDrawing: String = "" |
| | | var heat: Int = 0 |
| | | var id: Int = 0 |
| | | var introduction: String = "" |
| | | var name: String = "" |
| | | var registerCondition:RegisterAcitivyType = .allUser |
| | | var registerEndTime: String = "" |
| | | var status:SignupType = .all |
| | | |
| | | } |
| | | |
| | | struct ActivityDetailModel:HandyJSON{ |
| | | var address: String = "" |
| | | var age: String = "" |
| | | ///是否报名 |
| | | var apply:Int = 0 |
| | | var city: String = "" |
| | | var distance: Double = 0 |
| | | var endTime: String = "" |
| | | var id: Int = 0 |
| | | var imgs: String = "" |
| | | var introduction: String = "" |
| | | var name: String = "" |
| | | var participant = [ActivityDetailPartModel]() |
| | | var payType: PayType = .aliPay |
| | | var cashPrice: Double = 0 |
| | | var classPrice:Int = 0 |
| | | var playPaiCoin:Int = 0 |
| | | var province: String = "" |
| | | var registerCondition:RegisterAcitivyType = .allUser |
| | | var registerEndTime: String = "" |
| | | var registrationNotes: String = "" |
| | | var startTime: String = "" |
| | | var status: SignupType = .all |
| | | var storeAddress: String = "" |
| | | var storeCoverDrawing: String = "" |
| | | var storeLat: String = "" |
| | | var storeLon: String = "" |
| | | var storeName: String = "" |
| | | var storeInfos = [ActivityDetailStoreModel]() |
| | | var hasPass = 0 // 0:正常,1:截止 |
| | | var isReal:Int = 0 |
| | | var address: String = "" |
| | | var age: String = "" |
| | | ///是否报名 |
| | | var apply:Int = 0 |
| | | var city: String = "" |
| | | var distance: Double = 0 |
| | | var endTime: String = "" |
| | | var id: Int = 0 |
| | | var imgs: String = "" |
| | | var introduction: String = "" |
| | | var name: String = "" |
| | | var participant = [ActivityDetailPartModel]() |
| | | var payType: PayType = .aliPay |
| | | var cashPrice: Double = 0 |
| | | var classPrice:Int = 0 |
| | | var playPaiCoin:Int = 0 |
| | | var province: String = "" |
| | | var registerCondition:RegisterAcitivyType = .allUser |
| | | var registerEndTime: String = "" |
| | | var registrationNotes: String = "" |
| | | var startTime: String = "" |
| | | var status: SignupType = .all |
| | | var storeAddress: String = "" |
| | | var storeCoverDrawing: String = "" |
| | | var storeLat: String = "" |
| | | var storeLon: String = "" |
| | | var storeName: String = "" |
| | | var storeInfos = [ActivityDetailStoreModel]() |
| | | var hasPass = 0 // 0:正常,1:截止 |
| | | var isReal:Int = 0 |
| | | } |
| | | |
| | | struct ActivityDetailStoreModel:HandyJSON{ |
| | | var address = "" |
| | | var storeLon:Double = 0 |
| | | var distance:Double = 0 |
| | | var storeLat:Double = 0 |
| | | var name = "" |
| | | var storeCoverDrawing = "" |
| | | var address = "" |
| | | var storeLon:Double = 0 |
| | | var distance:Double = 0 |
| | | var storeLat:Double = 0 |
| | | var name = "" |
| | | var storeCoverDrawing = "" |
| | | } |
| | | |
| | | struct ActivityDetailPartModel:HandyJSON{ |
| | | var age = 0 |
| | | var id = 0 |
| | | var idcard = "" |
| | | var name = "" |
| | | var residueClassHour = 0 |
| | | var phone = "" |
| | | var birthday = "" |
| | | var gender:GenderType = .man |
| | | var height:Double = 0 |
| | | var weight:Double = 0 |
| | | var isStudent = 0 // 1:是学员, 0:否 |
| | | var age = 0 |
| | | var id = 0 |
| | | var idcard = "" |
| | | var name = "" |
| | | var residueClassHour = 0 |
| | | var phone = "" |
| | | var birthday = "" |
| | | var gender:GenderType = .man |
| | | var height:Double = 0 |
| | | var weight:Double = 0 |
| | | var isStudent = 0 // 1:是学员, 0:否 |
| | | } |
| | | |
| | | |
| | | struct CityProfileModel:HandyJSON { |
| | | var id = 0 |
| | | var code = 0 |
| | | var name = "" |
| | | var id = 0 |
| | | var code = 0 |
| | | var name = "" |
| | | } |
| | | |
| | | struct BannerModel:HandyJSON{ |
| | | var id = 0 |
| | | var img = "" |
| | | var jumpPage = "" |
| | | var id = 0 |
| | | var img = "" |
| | | var jumpPage = "" |
| | | |
| | | var page = "" |
| | | var type = "" |
| | | var turnId = 0 |
| | | var pid = 0 |
| | | var pageId = 0 |
| | | var typeId = 0 |
| | | var state = 0 |
| | | var name = "" |
| | | var model = "" |
| | | var page = "" |
| | | var type = "" |
| | | var turnId = 0 |
| | | var pid = 0 |
| | | var pageId = 0 |
| | | var typeId = 0 |
| | | var state = 0 |
| | | var name = "" |
| | | var model = "" |
| | | |
| | | |
| | | var isOpen = 0 |
| | | var isTop = 0 |
| | | var sort = 0 |
| | | var title = "" |
| | | var buttonImage:String = "" |
| | | var backgroundImage:String = "" |
| | | var content:String = "" |
| | | } |
| | | |
| | | |
| | | struct VideosModel:HandyJSON{ |
| | | var id:Int = 0 |
| | | var list = [VideoDetailModel]() |
| | | var name:String = "" |
| | | var id:Int = 0 |
| | | var list = [VideoDetailModel]() |
| | | var name:String = "" |
| | | } |
| | | |
| | | struct VideoDetailModel:HandyJSON { |
| | | var cover: String = "" |
| | | var id:Int = 0 |
| | | var integral: Int = 0 |
| | | var introduce: String = "" |
| | | var name: String = "" |
| | | ///学习状态(0=未学习,1=已学习) |
| | | var study: Int = 0 |
| | | var cover: String = "" |
| | | var id:Int = 0 |
| | | var integral: Int = 0 |
| | | var introduce: String = "" |
| | | var name: String = "" |
| | | ///学习状态(0=未学习,1=已学习) |
| | | var study: Int = 0 |
| | | |
| | | var courseVideo:String = "" |
| | | var introductionDrawing = "" |
| | | var courseVideo:String = "" |
| | | var introductionDrawing = "" |
| | | } |
| | | |
| | | struct WeeklyItemModel:HandyJSON { |
| | | var courseHours: Int = 0 |
| | | var coursePackageDiscountId: Int = 0 |
| | | var coursePackageName: String = "" |
| | | var dataTime: String = "" |
| | | var date: String = "" |
| | | var discountPrice: Double = 0 |
| | | var donateHours: Int = 0 |
| | | var image: String = "" |
| | | var originalPrice: Double = 0 |
| | | ///状态(1=查看详情 2=暂未开始) |
| | | var status: Int = 0 |
| | | var storeDistance: Double = 0 |
| | | var courseHours: Int = 0 |
| | | var coursePackageDiscountId: Int = 0 |
| | | var coursePackageName: String = "" |
| | | var dataTime: String = "" |
| | | var date: String = "" |
| | | var discountPrice: Double = 0 |
| | | var donateHours: Int = 0 |
| | | var image: String = "" |
| | | var originalPrice: Double = 0 |
| | | ///状态(1=查看详情 2=暂未开始) |
| | | var status: Int = 0 |
| | | var storeDistance: Double = 0 |
| | | } |
| | | |
| | | struct WeeklyItemDetailModel:HandyJSON { |
| | | var classHours: Int = 0 |
| | | var costPrice: Double = 0 |
| | | var coursePackageDiscountId:Int = 0 |
| | | var coursePackageName: String = "" |
| | | var coverDrawing:String = "" |
| | | ///折扣价/会员价 |
| | | var discountPrice:Double = 0 |
| | | var distance:Double = 0 |
| | | var freeClassHours:Int = 0 |
| | | var introduceDrawing:String = "" |
| | | var storeNameAddr:String = "" |
| | | var time: String = "" |
| | | var wanpaiGold:Int = 0 |
| | | var weekTime: String = "" |
| | | var vipPrice:Double = 0 |
| | | var detailDrawing = "" |
| | | var holiTime:String = "" |
| | | var type = 1 // 1:常规课,2:假期课 |
| | | var payType:PaymentType = .cashCoin |
| | | var classHours: Int = 0 |
| | | var costPrice: Double = 0 |
| | | var coursePackageDiscountId:Int = 0 |
| | | var coursePackageName: String = "" |
| | | var coverDrawing:String = "" |
| | | ///折扣价/会员价 |
| | | var discountPrice:Double = 0 |
| | | var distance:Double = 0 |
| | | var freeClassHours:Int = 0 |
| | | var introduceDrawing:String = "" |
| | | var storeNameAddr:String = "" |
| | | var time: String = "" |
| | | var wanpaiGold:Int = 0 |
| | | var weekTime: String = "" |
| | | var vipPrice:Double = 0 |
| | | var detailDrawing = "" |
| | | var holiTime:String = "" |
| | | var type = 1 // 1:常规课,2:假期课 |
| | | var payType:PaymentType = .cashCoin |
| | | } |
| | | |
| | | struct SiteItemModel:HandyJSON{ |
| | | var distance: Double = 0 |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var price: Double = 0 |
| | | var siteTypeName: String = "" |
| | | var storeAddress: String = "" |
| | | var storeLat: String = "" |
| | | var storeLon: String = "" |
| | | var storeName: String = "" |
| | | var times: String = "" |
| | | var distance: Double = 0 |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var price: Double = 0 |
| | | var siteTypeName: String = "" |
| | | var storeAddress: String = "" |
| | | var storeLat: String = "" |
| | | var storeLon: String = "" |
| | | var storeName: String = "" |
| | | var times: String = "" |
| | | } |
| | | |
| | | struct SiteDetailModel:HandyJSON{ |
| | | var cashPrice: Double = 0 |
| | | var cashPriceOne:Double = 0 |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var playPaiCoin: Int = 0 |
| | | var playPaiCoinOne:Int = 0 |
| | | var siteTypeName: String = "" |
| | | var storeAddress: String = "" |
| | | var storeLat: String = "" |
| | | var storeLon: String = "" |
| | | var storeName: String = "" |
| | | var storePhone: String = "" |
| | | var storeCoverDrawing = "" |
| | | var distance:Double = 0 |
| | | var imgs = "" |
| | | var nextName = [String]() //场地名 |
| | | var halfName = [String]() //半场名 |
| | | var ishalf = 0 // 是否半场 1:是 2:否 |
| | | var introduce = "" |
| | | var typeName = "" |
| | | var cashPrice: Double = 0 |
| | | var cashPriceOne:Double = 0 |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var playPaiCoin: Int = 0 |
| | | var playPaiCoinOne:Int = 0 |
| | | var siteTypeName: String = "" |
| | | var storeAddress: String = "" |
| | | var storeLat: String = "" |
| | | var storeLon: String = "" |
| | | var storeName: String = "" |
| | | var storePhone: String = "" |
| | | var storeCoverDrawing = "" |
| | | var distance:Double = 0 |
| | | var imgs = "" |
| | | var nextName = [String]() //场地名 |
| | | var halfName = [String]() //半场名 |
| | | var ishalf = 0 // 是否半场 1:是 2:否 |
| | | var introduce = "" |
| | | var typeName = "" |
| | | |
| | | |
| | | } |
| | | |
| | | class SiteDetailDateTimeModel:HandyJSON,Equatable{ |
| | | var selectable = 0 //是否可选(0=否,1=是) |
| | | var time = "" |
| | | var selectable = 0 //是否可选(0=否,1=是) |
| | | var time = "" |
| | | |
| | | static func ==(lhs: SiteDetailDateTimeModel, rhs: SiteDetailDateTimeModel) -> Bool { |
| | | return (lhs.selectable == rhs.selectable) && (lhs.time == rhs.time) |
| | | } |
| | | static func ==(lhs: SiteDetailDateTimeModel, rhs: SiteDetailDateTimeModel) -> Bool { |
| | | return (lhs.selectable == rhs.selectable) && (lhs.time == rhs.time) |
| | | } |
| | | |
| | | required init() {} |
| | | required init() {} |
| | | } |
| | | |
| | | |
| | | class YardBookingModel:HandyJSON{ |
| | | var appointment: String = "" |
| | | var id: Int = 0 |
| | | var insertTime: TimeInterval = 0 |
| | | var name: String = "" |
| | | var payMoney:Double = 0 |
| | | var siteTypeName: String = "" |
| | | var status: YardBookingType = .none |
| | | var storeAddress: String = "" |
| | | var storeLat: String = "" |
| | | var storeLon: String = "" |
| | | var storeName: String = "" |
| | | var phone:String = "" |
| | | var payType:PayType = .aliPay |
| | | var appointment: String = "" |
| | | var id: Int = 0 |
| | | var insertTime: TimeInterval = 0 |
| | | var name: String = "" |
| | | var payMoney:Double = 0 |
| | | var siteTypeName: String = "" |
| | | var status: YardBookingType = .none |
| | | var storeAddress: String = "" |
| | | var storeLat: String = "" |
| | | var storeLon: String = "" |
| | | var storeName: String = "" |
| | | var phone:String = "" |
| | | var payType:PayType = .aliPay |
| | | |
| | | required init() {} |
| | | required init() {} |
| | | } |
| | | |
| | | struct YardBookingContinuePriceModel:HandyJSON{ |
| | | var cash:Double = 0 |
| | | var playPaiCoin:Int = 0 |
| | | var cash:Double = 0 |
| | | var playPaiCoin:Int = 0 |
| | | } |
| | | |
| | | struct StartClouseHomeModel:HandyJSON{ |
| | | var bmi: Double = 0 |
| | | var courseList = [StartClouseListModel]() |
| | | var deductedNums: Int = 0 |
| | | var exerciseVideoList = [StartClouseVideoListModel]() |
| | | var height: Int = 0 |
| | | var imgs: String = "" |
| | | ///是否有学员信息 (1. 有学员信息 2.没有学员信息) |
| | | var isThere: Int = 2 |
| | | var remainingNums: Int = 0 |
| | | var stuAge: Int = 0 |
| | | var stuId: Int = 0 |
| | | var stuImg: String = "" |
| | | var stuName: String = "" |
| | | var stuSex: GenderType = .man |
| | | var totalNums: Int = 0 |
| | | var weight: Int = 0 |
| | | var bodyStatus = "" |
| | | var bmi: Double = 0 |
| | | var courseList = [StartClouseListModel]() |
| | | var deductedNums: Int = 0 |
| | | var exerciseVideoList = [StartClouseVideoListModel]() |
| | | var height: Int = 0 |
| | | var imgs: String = "" |
| | | ///是否有学员信息 (1. 有学员信息 2.没有学员信息) |
| | | var isThere: Int = 2 |
| | | var remainingNums: Int = 0 |
| | | var stuAge: Int = 0 |
| | | var stuId: Int = 0 |
| | | var stuImg: String = "" |
| | | var stuName: String = "" |
| | | var stuSex: GenderType = .man |
| | | var totalNums: Int = 0 |
| | | var weight: Int = 0 |
| | | var bodyStatus = "" |
| | | |
| | | // func save(){ |
| | | // UserDefaults.standard.set(self.toJSONString(), forKey: "StartClouseHomeModel") |
| | | // UserDefaults.standard.synchronize() |
| | | // } |
| | | // |
| | | // static func get()->StartClouseHomeModel?{ |
| | | // if let string = UserDefaults.standard.string(forKey: "StartClouseHomeModel"){ |
| | | // return StartClouseHomeModel.deserialize(from: string) |
| | | // }else{ |
| | | // return nil |
| | | // } |
| | | // |
| | | // } |
| | | // func save(){ |
| | | // UserDefaults.standard.set(self.toJSONString(), forKey: "StartClouseHomeModel") |
| | | // UserDefaults.standard.synchronize() |
| | | // } |
| | | // |
| | | // static func get()->StartClouseHomeModel?{ |
| | | // if let string = UserDefaults.standard.string(forKey: "StartClouseHomeModel"){ |
| | | // return StartClouseHomeModel.deserialize(from: string) |
| | | // }else{ |
| | | // return nil |
| | | // } |
| | | // |
| | | // } |
| | | } |
| | | |
| | | struct StartClouseListModel:HandyJSON{ |
| | | var courseId = 0 |
| | | var courseName = "" |
| | | var deductedNums = 0 |
| | | var remainingNums = 0 |
| | | var totalNums = 0 |
| | | var periodOfValidity = "" |
| | | var isAble = 0 |
| | | var id = 0 |
| | | var courseType = 0 //1:常规,2:假期 |
| | | var orderId:Int? |
| | | var coursePayId:Int? |
| | | var courseId = 0 |
| | | var courseName = "" |
| | | var deductedNums = 0 |
| | | var remainingNums = 0 |
| | | var totalNums = 0 |
| | | var periodOfValidity = "" |
| | | var isAble = 0 |
| | | var id = 0 |
| | | var courseType = 0 //1:常规,2:假期 |
| | | var orderId:Int? |
| | | var coursePayId:Int? |
| | | } |
| | | |
| | | struct StartClouseVideoListModel:HandyJSON { |
| | | var videoCoverImgUrl: String = "" |
| | | var videoName: String = "" |
| | | var videoUrl: String = "" |
| | | var videoId = 0 |
| | | var coursePackageId = 0 |
| | | var scId:Int = 0 |
| | | var videoCoverImgUrl: String = "" |
| | | var videoName: String = "" |
| | | var videoUrl: String = "" |
| | | var videoId = 0 |
| | | var coursePackageId = 0 |
| | | var scId:Int = 0 |
| | | } |
| | | |
| | | struct StartClouseReportModel:HandyJSON{ |
| | | var bmi:Double = 0 |
| | | var height:Int = 0 |
| | | var urls = [String]() |
| | | var weight:Int = 0 |
| | | var bodyStatus = "" |
| | | var bmi:Double = 0 |
| | | var height:Int = 0 |
| | | var urls = [String]() |
| | | var weight:Int = 0 |
| | | var bodyStatus = "" |
| | | } |
| | | |
| | | class StartClouseExploreModel:HandyJSON{ |
| | | var distance:Double = 0 |
| | | var storeAddr = "" |
| | | var storeId:Int = 0 |
| | | var storeImg = "" |
| | | var storeName = "" |
| | | var distance:Double = 0 |
| | | var storeAddr = "" |
| | | var storeId:Int = 0 |
| | | var storeImg = "" |
| | | var storeName = "" |
| | | |
| | | var latitude:Double = 0 |
| | | var longitude:Double = 0 |
| | | var latitude:Double = 0 |
| | | var longitude:Double = 0 |
| | | |
| | | var index:Int? |
| | | var annotation:MAPointAnnotation? |
| | | var index:Int? |
| | | var annotation:MAPointAnnotation? |
| | | |
| | | required init(){} |
| | | required init(){} |
| | | } |
| | | |
| | | struct NoticeItemModel:HandyJSON{ |
| | | var noticeContents = "" |
| | | var noticeId = 0 |
| | | var noticeTitle = "" |
| | | var noticeTime = "" |
| | | |
| | | var quesId = 0 |
| | | var quesTitle = "" |
| | | var quesContents = "" |
| | | var quesTime = "" |
| | | var noticeContents = "" |
| | | var noticeId = 0 |
| | | var noticeTitle = "" |
| | | var noticeTime = "" |
| | | |
| | | var quesId = 0 |
| | | var quesTitle = "" |
| | | var quesContents = "" |
| | | var quesTime = "" |
| | | } |
| | | |
| | | struct SearchStoreDetailModel:HandyJSON{ |
| | | var courseVoList = [SearchStoreDetailCourseModel]() |
| | | var images = [String]() |
| | | var storeAddress: String = "" |
| | | var storeId: Int = 0 |
| | | var storeInfo: String = "" |
| | | var storeName: String = "" |
| | | var storeTime: String = "" |
| | | var phone:String = "" |
| | | var lat:Double = 0 |
| | | var lon:Double = 0 |
| | | var venueList = [SearchStoreDetailVenueModel]() |
| | | var courseVoList = [SearchStoreDetailCourseModel]() |
| | | var images = [String]() |
| | | var storeAddress: String = "" |
| | | var storeId: Int = 0 |
| | | var storeInfo: String = "" |
| | | var storeName: String = "" |
| | | var storeTime: String = "" |
| | | var phone:String = "" |
| | | var lat:Double = 0 |
| | | var lon:Double = 0 |
| | | var venueList = [SearchStoreDetailVenueModel]() |
| | | } |
| | | |
| | | struct SearchStoreListModel:HandyJSON{ |
| | | var storeAddress:String = "" |
| | | var storeDistance:Double = 0 |
| | | var storeImg:String = "" |
| | | var storeId:Int = 0 |
| | | var storeInfo:String = "" |
| | | var storeName:String = "" |
| | | var storeTime:String = "" |
| | | var storePhone:String = "" |
| | | var storeAddress:String = "" |
| | | var storeDistance:Double = 0 |
| | | var storeImg:String = "" |
| | | var storeId:Int = 0 |
| | | var storeInfo:String = "" |
| | | var storeName:String = "" |
| | | var storeTime:String = "" |
| | | var storePhone:String = "" |
| | | } |
| | | |
| | | struct SearchStoreDetailCourseModel:HandyJSON{ |
| | | var applicantsNumber: Int = 0 |
| | | var classHours = [Int]() |
| | | var classStartTime:String? |
| | | var courseId: Int = 0 |
| | | var coverDrawing: String = "" |
| | | var name: String = "" |
| | | var originalPrice:Double = 0 |
| | | var coin:Int = 0 |
| | | var applicantsNumber: Int = 0 |
| | | var classHours = [Int]() |
| | | var classStartTime:String? |
| | | var courseId: Int = 0 |
| | | var coverDrawing: String = "" |
| | | var name: String = "" |
| | | var originalPrice:Double = 0 |
| | | var coin:Int = 0 |
| | | } |
| | | |
| | | struct SearchStoreDetailVenueModel:HandyJSON{ |
| | | var price:Double = 0 |
| | | var siteId: Int = 0 |
| | | var siteName: String = "" |
| | | var siteTime: String = "" |
| | | var siteType: String = "" |
| | | var price:Double = 0 |
| | | var siteId: Int = 0 |
| | | var siteName: String = "" |
| | | var siteTime: String = "" |
| | | var siteType: String = "" |
| | | } |
| | | |
| | | struct UserInfoModel:HandyJSON{ |
| | | var address: String = "" |
| | | var birthday: String = "" |
| | | var memberLifespan: String = "" |
| | | var sex: String = "" |
| | | var userImage: String = "" |
| | | var userName: String = "" |
| | | var userPhone: String = "" |
| | | var userId:Int = 0 |
| | | var isVip = 0 //0:否 1:是 |
| | | var needChange = 0 // 1需要改,0不需要 |
| | | var address: String = "" |
| | | var birthday: String = "" |
| | | var memberLifespan: String = "" |
| | | var sex: String = "" |
| | | var userImage: String = "" |
| | | var userName: String = "" |
| | | var userPhone: String = "" |
| | | var userId:Int = 0 |
| | | var isVip = 0 //0:否 1:是 |
| | | var needChange = 0 // 1需要改,0不需要 |
| | | |
| | | func save(){ |
| | | UserDefaults.standard.set(self.toJSONString(), forKey: "UserInfoModel") |
| | | UserDefaults.standard.synchronize() |
| | | } |
| | | func save(){ |
| | | UserDefaults.standard.set(self.toJSONString(), forKey: "UserInfoModel") |
| | | UserDefaults.standard.synchronize() |
| | | } |
| | | |
| | | static func get()->UserInfoModel?{ |
| | | if let string = UserDefaults.standard.string(forKey: "UserInfoModel"){ |
| | | return UserInfoModel.deserialize(from: string) |
| | | }else{ |
| | | return nil |
| | | } |
| | | static func get()->UserInfoModel?{ |
| | | if let string = UserDefaults.standard.string(forKey: "UserInfoModel"){ |
| | | return UserInfoModel.deserialize(from: string) |
| | | }else{ |
| | | return nil |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | struct BenefitHomeModel:HandyJSON{ |
| | | var commodities = [BenefitHomeCommonditiesModel]() |
| | | var image: BenefitImageModel? |
| | | var isMember: String = "" |
| | | var userHeadImg: String = "" |
| | | var userIntegral: Int = 0 |
| | | var userName: String = "未命名" |
| | | var wpCoin: Int = 0 |
| | | var commodities = [BenefitHomeCommonditiesModel]() |
| | | var image: BenefitImageModel? |
| | | var isMember: String = "" |
| | | var userHeadImg: String = "" |
| | | var userIntegral: Int = 0 |
| | | var userName: String = "未命名" |
| | | var wpCoin: Int = 0 |
| | | } |
| | | |
| | | struct BenefitImageModel:HandyJSON{ |
| | | var myConpons: String? |
| | | var onlineShop: String? |
| | | var todayFree: String? |
| | | var weeksBenefit: String? |
| | | var myConpons: String? |
| | | var onlineShop: String? |
| | | var todayFree: String? |
| | | var weeksBenefit: String? |
| | | } |
| | | |
| | | struct BenefitHomeCommonditiesModel:HandyJSON{ |
| | | var commodityId: Int = 0 |
| | | var commodityImg: String = "" |
| | | var commodityName: String = "" |
| | | var commodityPrice: Double = 0 |
| | | var goodsType:ExchangeType = .goods |
| | | var commodityId: Int = 0 |
| | | var commodityImg: String = "" |
| | | var commodityName: String = "" |
| | | var commodityPrice: Double = 0 |
| | | var goodsType:ExchangeType = .goods |
| | | } |
| | | |
| | | struct BillingModel:HandyJSON{ |
| | | var consumeAmount = "" |
| | | var consumeName = "" |
| | | var consumeTime = "" |
| | | var type:DetailType?//1扣减 2增加 |
| | | var recordId:Int? |
| | | var detailsType:DetailType?//1扣减 2增加 |
| | | var consumeAmount = "" |
| | | var consumeName = "" |
| | | var consumeTime = "" |
| | | var type:DetailType?//1扣减 2增加 |
| | | var recordId:Int? |
| | | var detailsType:DetailType?//1扣减 2增加 |
| | | |
| | | // mutating func mapping(mapper: HelpingMapper) { |
| | | // mapper <<< |
| | | // self.type <-- "detailsType" |
| | | // } |
| | | // mutating func mapping(mapper: HelpingMapper) { |
| | | // mapper <<< |
| | | // self.type <-- "detailsType" |
| | | // } |
| | | } |
| | | |
| | | class CouponModel:HandyJSON{ |
| | | var available: String = "" |
| | | var cityOrStore: String = "" |
| | | var effectiveTime: String = "" |
| | | var id: Int = 0 |
| | | var instructionsForUse: String = "" |
| | | var name: String = "" |
| | | var ruleModel: CouponModelRuleModel? |
| | | var type:CouponType = .discount |
| | | var useCondition: CouponConditionType = .nationwide |
| | | var useStatus: CouponUseType = .overdue |
| | | var available: String = "" |
| | | var cityOrStore: String = "" |
| | | var effectiveTime: String = "" |
| | | var id: Int = 0 |
| | | var instructionsForUse: String = "" |
| | | var name: String = "" |
| | | var ruleModel: CouponModelRuleModel? |
| | | var type:CouponType = .discount |
| | | var useCondition: CouponConditionType = .nationwide |
| | | var useStatus: CouponUseType = .overdue |
| | | |
| | | var showAll = false |
| | | var showAll = false |
| | | |
| | | required init(){} |
| | | required init(){} |
| | | } |
| | | |
| | | struct CouponModelRuleModel:HandyJSON{ |
| | | /// 满X元 条件 |
| | | var conditionalAmount: String = "" |
| | | /// (减)抵扣金额 |
| | | var deductionAmount: String = "" |
| | | /// 满X元 条件 |
| | | var conditionalAmount: String = "" |
| | | /// (减)抵扣金额 |
| | | var deductionAmount: String = "" |
| | | |
| | | /// 名称 |
| | | var experienceName: String = "" |
| | | /// 名称 |
| | | var experienceName: String = "" |
| | | } |
| | | |
| | | struct CoinExchangeModel:HandyJSON{ |
| | | var amount:Double = 0 |
| | | var wpGold:Int = 0 |
| | | var chargeId = 0 |
| | | var amount:Double = 0 |
| | | var wpGold:Int = 0 |
| | | var chargeId = 0 |
| | | } |
| | | |
| | | struct ExchangeGoodsModel:HandyJSON { |
| | | var belongs: String = "" |
| | | var belongsScope: RegisterAcitivyType = .allUser |
| | | var contents: String = "" |
| | | var cost: Int = 0 |
| | | var courseHours: Int = 0 |
| | | var endTime: String = "" |
| | | var exchangeAddrType: CouponConditionType = .nationwide |
| | | var exchangeType: ExchangePaymentType = .coin |
| | | var goodId: Int = 0 |
| | | var goodName: String = "" |
| | | var goodType: ExchangeType = .goods |
| | | var perLimit: Int = 0 |
| | | var pics = [String]() |
| | | var redeemedNum: Int = 0 |
| | | var integral:Int = 0 |
| | | var cash:Double = 0 |
| | | var residueNum: Int = 0 |
| | | var startTime: String = "" |
| | | var cardType:CardType! = .subCard |
| | | var belongs: String = "" |
| | | var belongsScope: RegisterAcitivyType = .allUser |
| | | var contents: String = "" |
| | | var cost: Int = 0 |
| | | var courseHours: Int = 0 |
| | | var endTime: String = "" |
| | | var exchangeAddrType: CouponConditionType = .nationwide |
| | | var exchangeType: ExchangePaymentType = .coin |
| | | var goodId: Int = 0 |
| | | var goodName: String = "" |
| | | var goodType: ExchangeType = .goods |
| | | var perLimit: Int = 0 |
| | | var pics = [String]() |
| | | var redeemedNum: Int = 0 |
| | | var integral:Int = 0 |
| | | var cash:Double = 0 |
| | | var residueNum: Int = 0 |
| | | var startTime: String = "" |
| | | var cardType:CardType! = .subCard |
| | | } |
| | | |
| | | struct StoreSimpleModel:HandyJSON{ |
| | | var storeName = "" |
| | | var storeId = 0 |
| | | var storeName = "" |
| | | var storeId = 0 |
| | | } |
| | | |
| | | struct MarketMdoel:HandyJSON{ |
| | | var amount: Double = 0 |
| | | var belongsType: RegisterAcitivyType = .allUser |
| | | var condition: ExchangePaymentType = .cashAndCoin |
| | | var goodId: Int = 0 |
| | | var goodImg: String = "" |
| | | var goodName: String = "" |
| | | var goodsType: ExchangeType = .goods |
| | | var integral: Int = 0 |
| | | var nums: Int = 0 |
| | | var amount: Double = 0 |
| | | var belongsType: RegisterAcitivyType = .allUser |
| | | var condition: ExchangePaymentType = .cashAndCoin |
| | | var goodId: Int = 0 |
| | | var goodImg: String = "" |
| | | var goodName: String = "" |
| | | var goodsType: ExchangeType = .goods |
| | | var integral: Int = 0 |
| | | var nums: Int = 0 |
| | | } |
| | | |
| | | struct RecordsModel:HandyJSON{ |
| | | var detailsId: Int = 0 |
| | | var endTime: String = "" |
| | | var goodName: String = "" |
| | | var goodType: ExchangeType = .goods |
| | | var exchangeType: ExchangePaymentType = .coin |
| | | var integral: Int = 0 |
| | | var cash: Double = 0 |
| | | var startTime: String = "" |
| | | var useStatus: UseStateType = .used |
| | | var cardType:CardType = .none |
| | | var userId:Int = 0 |
| | | var sid = [Int]() |
| | | var rid = [Int]() |
| | | var detailsId: Int = 0 |
| | | var endTime: String = "" |
| | | var goodName: String = "" |
| | | var goodType: ExchangeType = .goods |
| | | var exchangeType: ExchangePaymentType = .coin |
| | | var integral: Int = 0 |
| | | var cash: Double = 0 |
| | | var startTime: String = "" |
| | | var useStatus: UseStateType = .used |
| | | var cardType:CardType = .none |
| | | var userId:Int = 0 |
| | | var sid = [Int]() |
| | | var rid = [Int]() |
| | | |
| | | } |
| | | |
| | | struct RecordsDetailModel:HandyJSON{ |
| | | var belongs: String = "" |
| | | var classHours = 0 |
| | | var contents: String = "" |
| | | var detailsId: Int = 0 |
| | | var endTime: String = "" |
| | | var goodName: String = "" |
| | | var orderTime: String = "" |
| | | var pics = [String]() |
| | | var startTime: String = "" |
| | | var useType: UseStateType = .unUsed |
| | | var writeOffName: String = "" |
| | | var writeOffTime: String = "" |
| | | var belongs: String = "" |
| | | var classHours = 0 |
| | | var contents: String = "" |
| | | var detailsId: Int = 0 |
| | | var endTime: String = "" |
| | | var goodName: String = "" |
| | | var orderTime: String = "" |
| | | var pics = [String]() |
| | | var startTime: String = "" |
| | | var useType: UseStateType = .unUsed |
| | | var writeOffName: String = "" |
| | | var writeOffTime: String = "" |
| | | |
| | | var goodType: ExchangeType = .goods |
| | | var cash: Double = 0 |
| | | var exchangeType: ExchangePaymentType = .coin |
| | | var integral: Int = 0 |
| | | var exchangeAddrType: CouponConditionType = .nationwide |
| | | var cardType:CardType! = .subCard |
| | | var goodType: ExchangeType = .goods |
| | | var cash: Double = 0 |
| | | var exchangeType: ExchangePaymentType = .coin |
| | | var integral: Int = 0 |
| | | var exchangeAddrType: CouponConditionType = .nationwide |
| | | var cardType:CardType! = .subCard |
| | | |
| | | } |
| | | |
| | | class StudentAppointModel:HandyJSON { |
| | | var courseHours: Int = 0 |
| | | var coursePackageId: Int = 0 |
| | | var coursePackageName: String = "" |
| | | var courseStuRecordId: Int = 0 |
| | | var status:StudentAppointType = .complete |
| | | var storeNameAddr: String = "" |
| | | var timeFrame: String = "" |
| | | // var ids = [Int]() |
| | | var siteId = 0 |
| | | var courseHours: Int = 0 |
| | | var coursePackageId: Int = 0 |
| | | var coursePackageName: String = "" |
| | | var courseStuRecordId: Int = 0 |
| | | var status:StudentAppointType = .complete |
| | | var storeNameAddr: String = "" |
| | | var timeFrame: String = "" |
| | | // var ids = [Int]() |
| | | var siteId = 0 |
| | | |
| | | var userId = 0 |
| | | var sid = [Int]() |
| | | var rid = [Int]() |
| | | var userId = 0 |
| | | var sid = [Int]() |
| | | var rid = [Int]() |
| | | |
| | | required init() {} |
| | | required init() {} |
| | | } |
| | | |
| | | |
| | | struct ExerciseVideoModel:HandyJSON { |
| | | var coursePackageId: Int = 0 |
| | | var coverImage: String = "" |
| | | var integral:Int = 0 |
| | | var packageName: String = "" |
| | | var studyStatus: Int = 1 |
| | | var synopsis: String = "" |
| | | var videoId: Int = 0 |
| | | var videoName: String = "" |
| | | var scId:Int = 0 |
| | | var coursePackageId: Int = 0 |
| | | var coverImage: String = "" |
| | | var integral:Int = 0 |
| | | var packageName: String = "" |
| | | var studyStatus: Int = 1 |
| | | var synopsis: String = "" |
| | | var videoId: Int = 0 |
| | | var videoName: String = "" |
| | | var scId:Int = 0 |
| | | } |
| | | |
| | | struct ExerciseVideoDetailModel:HandyJSON { |
| | | var coursePackageId: Int = 0 |
| | | var detailedDiagram: String = "" |
| | | var integral: Int = 0 |
| | | var packageName: String = "" |
| | | var studyStatus: Int = 0 |
| | | var synopsis: String = "" |
| | | var videoId: Int = 0 |
| | | var videoName: String = "" |
| | | var videoURL: String = "" |
| | | var coursePackageId: Int = 0 |
| | | var detailedDiagram: String = "" |
| | | var integral: Int = 0 |
| | | var packageName: String = "" |
| | | var studyStatus: Int = 0 |
| | | var synopsis: String = "" |
| | | var videoId: Int = 0 |
| | | var videoName: String = "" |
| | | var videoURL: String = "" |
| | | } |
| | | |
| | | struct StudentMedalModel:HandyJSON { |
| | | var medalName = "" |
| | | var medalType:MedalType = .club |
| | | var medalName = "" |
| | | var medalType:MedalType = .club |
| | | } |
| | | |
| | | struct StudentCommentModel:HandyJSON{ |
| | | var comTime: String = "" |
| | | var contents: String = "" |
| | | var headImg: String = "" |
| | | var imgs = [String]() |
| | | var stuName: String = "" |
| | | var comTime: String = "" |
| | | var contents: String = "" |
| | | var headImg: String = "" |
| | | var imgs = [String]() |
| | | var stuName: String = "" |
| | | } |
| | | |
| | | struct CourseRecordModel:HandyJSON{ |
| | | var purchaseAmount:String = "" |
| | | var purchaseTime = "" |
| | | var purchaseType = "" |
| | | var purchaseAmount:String = "" |
| | | var purchaseTime = "" |
| | | var purchaseType = "" |
| | | } |
| | | |
| | | class WeeklyCourseModel:HandyJSON{ |
| | | var distance:Double = 0 |
| | | var data = [WeeklyCourseItemModel]() |
| | | var name = "" |
| | | var lon:Double = 0 |
| | | var lat:Double = 0 |
| | | var distance:Double = 0 |
| | | var data = [WeeklyCourseItemModel]() |
| | | var name = "" |
| | | var lon:Double = 0 |
| | | var lat:Double = 0 |
| | | |
| | | required init(){} |
| | | required init(){} |
| | | } |
| | | |
| | | class WeeklyCourseItemModel:HandyJSON{ |
| | | var id = 0 |
| | | var name = "" |
| | | var intro = "" |
| | | var type = 0 // 1:请假 2: 购课 |
| | | var time = [String]() |
| | | var num = 0 |
| | | var money:Double = 0 |
| | | var isType = 0 //1不能请假,0:可以请假 3:已取消 |
| | | var courseType = 0 // 1:常规,2:假期课 |
| | | var id = 0 |
| | | var name = "" |
| | | var intro = "" |
| | | var type = 0 // 1:请假 2: 购课 |
| | | var time = [String]() |
| | | var num = 0 |
| | | var money:Double = 0 |
| | | var isType = 0 //1不能请假,0:可以请假 3:已取消 |
| | | var courseType = 0 // 1:常规,2:假期课 |
| | | |
| | | required init(){} |
| | | required init(){} |
| | | } |
| | | |
| | | struct ExperienceCourseModel:HandyJSON { |
| | | var id = 0 |
| | | var name = "" |
| | | var num = 0 |
| | | var week = "" |
| | | var time = [String]() |
| | | var day = [String]() |
| | | var id = 0 |
| | | var name = "" |
| | | var num = 0 |
| | | var week = "" |
| | | var time = [String]() |
| | | var day = [String]() |
| | | } |
| | | |
| | | struct StudentMedalInfoModel:HandyJSON{ |
| | | var isTopLevel = 2 |
| | | var levelNum = 0 |
| | | var medalName = "" |
| | | var medalType:MedalType = .club |
| | | var nextLevel = 0 |
| | | var upgradeConditions = "" |
| | | var isTopLevel = 2 |
| | | var levelNum = 0 |
| | | var medalName = "" |
| | | var medalType:MedalType = .club |
| | | var nextLevel = 0 |
| | | var upgradeConditions = "" |
| | | } |
| | | |
| | | |
| | | struct CourseListSubModel:HandyJSON{ |
| | | var id = 0 |
| | | var courseNum = 0 |
| | | var name = "" |
| | | var id = 0 |
| | | var courseNum = 0 |
| | | var name = "" |
| | | } |
| | | |
| | | struct CourseCouponModel:HandyJSON{ |
| | | var auditRemark: String = "" |
| | | var auditStatus: Int = 0 |
| | | var auditUserId: String = "" |
| | | var cash: Float = 0.0 |
| | | var city: String = "" |
| | | var cityCode: String = "" |
| | | var content:String = "" |
| | | var distributionMethod: Int = 0 |
| | | var endTime: String = "" |
| | | var id: Int = 0 |
| | | var illustrate: String = "" |
| | | var insertTime: String = "" |
| | | var integral: Float = 0.0 |
| | | var name: String = "" |
| | | var pickUpQuantity: Int = 0 |
| | | var province: String = "" |
| | | var provinceCode: String = "" |
| | | var quantityIssued: Int = 0 |
| | | var redemptionMethod: Int = 0 |
| | | var startTime: String = "" |
| | | var state: Int = 0 |
| | | var status: Int = 0 |
| | | var type: CouponType = .discount |
| | | var userPopulation: Int = 0 |
| | | var useScope: Int = 0 |
| | | var available:String = "" |
| | | var timePeriod:String = "" //有效期 |
| | | var auditRemark: String = "" |
| | | var auditStatus: Int = 0 |
| | | var auditUserId: String = "" |
| | | var cash: Float = 0.0 |
| | | var city: String = "" |
| | | var cityCode: String = "" |
| | | var content:String = "" |
| | | var distributionMethod: Int = 0 |
| | | var endTime: String = "" |
| | | var id: Int = 0 |
| | | var illustrate: String = "" |
| | | var insertTime: String = "" |
| | | var integral: Float = 0.0 |
| | | var name: String = "" |
| | | var pickUpQuantity: Int = 0 |
| | | var province: String = "" |
| | | var provinceCode: String = "" |
| | | var quantityIssued: Int = 0 |
| | | var redemptionMethod: Int = 0 |
| | | var startTime: String = "" |
| | | var state: Int = 0 |
| | | var status: Int = 0 |
| | | var type: CouponType = .discount |
| | | var userPopulation: Int = 0 |
| | | var useScope: Int = 0 |
| | | var available:String = "" |
| | | var timePeriod:String = "" //有效期 |
| | | } |
| | | |
| | | struct YardBookingDetailModel:HandyJSON{ |
| | | var data:YardBookingDetailDataModel? |
| | | var shopName:String = "" |
| | | var siteName:String = "" |
| | | var shopAddress:String = "" |
| | | var siteType:String = "" |
| | | var data:YardBookingDetailDataModel? |
| | | var shopName:String = "" |
| | | var siteName:String = "" |
| | | var shopAddress:String = "" |
| | | var siteType:String = "" |
| | | |
| | | // var ids = [Int]() //区域ID |
| | | // var ids = [Int]() //区域ID |
| | | } |
| | | |
| | | struct YardBookingDetailDataModel:HandyJSON{ |
| | | var booker: String = "" |
| | | var cancelTime: String = "" |
| | | var cancelUserId: String = "" |
| | | var city: String = "" |
| | | var cityCode: String = "" |
| | | var endTime: Int = 0 |
| | | //0:默认,1:手环 |
| | | var goType: Int = 0 |
| | | var halfName: String = "" |
| | | var id: Int = 0 |
| | | var insertTime: Int = 0 |
| | | var isHalf: Int = 0 |
| | | var nextName: String = "" |
| | | var orderNo: String = "" |
| | | var payMoney: Double = 0.0 |
| | | var payOrderNo: String = "" |
| | | var payTime: Int = 0 |
| | | var payType: PayType = .coin |
| | | var payUserId: String = "" |
| | | var phone: String = "" |
| | | var province: String = "" |
| | | var provinceCode: String = "" |
| | | var refundOrderNo: String = "" |
| | | var remark: String = "" |
| | | var siteId: Int = 0 |
| | | var startTime: Int = 0 |
| | | var status: YardBookingType = .cancel |
| | | var storeId: Int = 0 |
| | | var times: String = "" |
| | | var userCouponId: String = "" |
| | | var voucher: String = "" |
| | | var typeName = "" |
| | | var storePhone:String = "" |
| | | var booker: String = "" |
| | | var cancelTime: String = "" |
| | | var cancelUserId: String = "" |
| | | var city: String = "" |
| | | var cityCode: String = "" |
| | | var endTime: Int = 0 |
| | | //0:默认,1:手环 |
| | | var goType: Int = 0 |
| | | var halfName: String = "" |
| | | var id: Int = 0 |
| | | var insertTime: Int = 0 |
| | | var isHalf: Int = 0 |
| | | var nextName: String = "" |
| | | var orderNo: String = "" |
| | | var payMoney: Double = 0.0 |
| | | var payOrderNo: String = "" |
| | | var payTime: Int = 0 |
| | | var payType: PayType = .coin |
| | | var payUserId: String = "" |
| | | var phone: String = "" |
| | | var province: String = "" |
| | | var provinceCode: String = "" |
| | | var refundOrderNo: String = "" |
| | | var remark: String = "" |
| | | var siteId: Int = 0 |
| | | var startTime: Int = 0 |
| | | var status: YardBookingType = .cancel |
| | | var storeId: Int = 0 |
| | | var times: String = "" |
| | | var userCouponId: String = "" |
| | | var voucher: String = "" |
| | | var typeName = "" |
| | | var storePhone:String = "" |
| | | |
| | | var appUserId: Int = 0 |
| | | var sid = [Int]() |
| | | var rid = [Int]() |
| | | var appUserId: Int = 0 |
| | | var sid = [Int]() |
| | | var rid = [Int]() |
| | | } |
| | | |
| | | struct GameListModel:HandyJSON { |
| | | var id = 0 |
| | | var cash:Double = 0 |
| | | var gameId:Int = 0 |
| | | var img = "" |
| | | var name = "" |
| | | var integral = 0 |
| | | var otherId = 0 |
| | | var playCoin = 0 |
| | | var video = "" |
| | | var intro = "" |
| | | var id = 0 |
| | | var cash:Double = 0 |
| | | var gameId:Int = 0 |
| | | var img = "" |
| | | var name = "" |
| | | var integral = 0 |
| | | var otherId = 0 |
| | | var playCoin = 0 |
| | | var video = "" |
| | | var intro = "" |
| | | } |
| | | |
| | | struct DoorModel:HandyJSON{ |
| | | var app_user_id = "" |
| | | var time:DoorTimeModel? |
| | | var app_user_id = "" |
| | | var time:DoorTimeModel? |
| | | } |
| | | |
| | | struct DoorTimeModel:HandyJSON{ |
| | | var start_time:TimeInterval? |
| | | var end_time:TimeInterval? |
| | | var start_time:TimeInterval? |
| | | var end_time:TimeInterval? |
| | | } |
| | | |
| | | struct GamesRecordModel:HandyJSON{ |
| | | var game_name = "" |
| | | var score = 0 |
| | | var time = "" |
| | | var game_name = "" |
| | | var score = 0 |
| | | var time = "" |
| | | } |
| | | |
| | | struct OpenDoorModel:HandyJSON{ |
| | | var sid = [Int]() //场馆ID,全国通用值为0 |
| | | var rid = [Int]() //区域ID,单场馆和多场馆都可以放入,全国可以为空数组 |
| | | var uid:Int? //用户ID |
| | | var time = [OpenDoorTimeModel]() //时间 |
| | | var type = 2 //固定 |
| | | var sid = [Int]() //场馆ID,全国通用值为0 |
| | | var rid = [Int]() //区域ID,单场馆和多场馆都可以放入,全国可以为空数组 |
| | | var uid:Int? //用户ID |
| | | var time = [OpenDoorTimeModel]() //时间 |
| | | var type = 2 //固定 |
| | | } |
| | | |
| | | struct OpenDoorTimeModel:HandyJSON { |
| | | var start_time:TimeInterval = 0 //开始时间 |
| | | var end_time:TimeInterval = 0 //结束时间 |
| | | var start_time:TimeInterval = 0 //开始时间 |
| | | var end_time:TimeInterval = 0 //结束时间 |
| | | } |
| | | |
| | | struct LoginModel:HandyJSON{ |
| | | var token = "" |
| | | var isBind = 0 |
| | | var token = "" |
| | | var isBind = 0 |
| | | } |
| | | |
| | |
| | | // |
| | | // Services.swift |
| | | // YixiuShop |
| | | // |
| | | // Created by Sweet on 2019/9/30. |
| | | // Copyright © 2019 jackLove. All rights reserved. |
| | | // |
| | | // |
| | | // Services.swift |
| | | // YixiuShop |
| | | // |
| | | // Created by Sweet on 2019/9/30. |
| | | // Copyright © 2019 jackLove. All rights reserved. |
| | | // |
| | | |
| | | import UIKit |
| | | import RxSwift |
| | |
| | | |
| | | #if DEBUG |
| | | //let All_Url = "http://192.168.110.27:56666" //罗易胜 |
| | | let All_Url = "http://192.168.110.85:56666" //正式地址 |
| | | //let All_Url = "http://192.168.110.85:56666" //正式地址 |
| | | let All_Url = "http://192.168.110.80:56666" //正式地址 |
| | | let Game_Url = "https://try.daowepark.com" |
| | | //let Socket_Url = "192.168.110.22" |
| | | //let Socket_Url = "192.168.110.22" |
| | | #else |
| | | let All_Url = "http://8.137.22.229:56666" //正式地址 |
| | | let Game_Url = "https://port.daowepark.com"//正式地址 |
| | | //let Game_Url = "https://try.daowepark.com" //测试地址 |
| | | |
| | | //let Socket_Url = "192.168.110.22" |
| | | //let Socket_Url = "192.168.110.22" |
| | | #endif |
| | | |
| | | class Services: NSObject { |
| | |
| | | // MARK: -- 游戏 |
| | | extension Services{ |
| | | |
| | | class func updateInfo(birthday:String?,gender:Int?,name:String?)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/appUser/updateInfo") |
| | | .append(key: "birthday", value: birthday) |
| | | .append(key: "gender", value: gender) |
| | | .append(key: "name", value: name) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | class func updateInfo(birthday:String?,gender:Int?,name:String?)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/appUser/updateInfo") |
| | | .append(key: "birthday", value: birthday) |
| | | .append(key: "gender", value: gender) |
| | | .append(key: "name", value: name) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 本地离线游戏 |
| | | class func game_gameList(spaceId:Int,storeId:Int)->Observable<BaseResponse<[GameListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/game/queryGameList") |
| | | .append(key: "siteId", value: spaceId) |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 本地离线游戏 |
| | | class func game_gameList(spaceId:Int,storeId:Int)->Observable<BaseResponse<[GameListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/game/queryGameList") |
| | | .append(key: "siteId", value: spaceId) |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func game_intro()->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/game/getIntro") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func game_intro()->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/game/getIntro") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | //支付游戏 |
| | | class func payGame(configId:Int,gameId:Int,spaceId:Int,sutuId:Int,type:PayType)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/game/payGame") |
| | | .append(key: "configId", value: configId) |
| | | .append(key: "gameId", value: gameId) |
| | | .append(key: "spaceId", value: spaceId) |
| | | .append(key: "sutuId", value: sutuId) |
| | | .append(key: "type", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | //支付游戏 |
| | | class func payGame(configId:Int,gameId:Int,spaceId:Int,sutuId:Int,type:PayType)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/game/payGame") |
| | | .append(key: "configId", value: configId) |
| | | .append(key: "gameId", value: gameId) |
| | | .append(key: "spaceId", value: spaceId) |
| | | .append(key: "sutuId", value: sutuId) |
| | | .append(key: "type", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 启动本地游戏 |
| | | class func game_gameStart(gameId:Int,spaceId:Int,sutuId:Int,userID:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/gameStart") |
| | | .append(key: "space_id", value: spaceId) |
| | | .append(key: "sutu_id", value: sutuId) |
| | | .append(key: "game_id", value: gameId) |
| | | .append(key: "app_user_id", value: userID) |
| | | .append(key: "sign", value: "0DB011836143EEE2C2E072967C9F4E4B") |
| | | return NetworkRequest.request(params: params, method: .post, encoding: JSONEncoding.default, progress: false) |
| | | } |
| | | /// 启动本地游戏 |
| | | class func game_gameStart(gameId:Int,spaceId:Int,sutuId:Int,userID:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/gameStart") |
| | | .append(key: "space_id", value: spaceId) |
| | | .append(key: "sutu_id", value: sutuId) |
| | | .append(key: "game_id", value: gameId) |
| | | .append(key: "app_user_id", value: userID) |
| | | .append(key: "sign", value: "0DB011836143EEE2C2E072967C9F4E4B") |
| | | return NetworkRequest.request(params: params, method: .post, encoding: JSONEncoding.default, progress: false) |
| | | } |
| | | |
| | | /// 开门 |
| | | class func game_OpenDoorCode(userID:Int)->Observable<BaseResponse<DoorModel>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/getOpenDoorCode") |
| | | .append(key: "app_user_id", value: userID) |
| | | .append(key: "sign", value: "") |
| | | return NetworkRequest.request(params: params, method: .get, progress: false) |
| | | } |
| | | /// 开门 |
| | | class func game_OpenDoorCode(userID:Int)->Observable<BaseResponse<DoorModel>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/getOpenDoorCode") |
| | | .append(key: "app_user_id", value: userID) |
| | | .append(key: "sign", value: "") |
| | | return NetworkRequest.request(params: params, method: .get, progress: false) |
| | | } |
| | | |
| | | /// 用户单机游戏记录 |
| | | class func game_generalGameRecord(userId:Int,page:Int,limit:Int = 20)->Observable<BaseResponse<[GamesRecordModel]>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/gameRecord") |
| | | .append(key: "uid", value: userId) |
| | | .append(key: "sign", value: "0DB011836143EEE2C2E072967C9F4E4B") |
| | | .append(key: "page", value: page) |
| | | .append(key: "limit", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 用户单机游戏记录 |
| | | class func game_generalGameRecord(userId:Int,page:Int,limit:Int = 20)->Observable<BaseResponse<[GamesRecordModel]>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/gameRecord") |
| | | .append(key: "uid", value: userId) |
| | | .append(key: "sign", value: "0DB011836143EEE2C2E072967C9F4E4B") |
| | | .append(key: "page", value: page) |
| | | .append(key: "limit", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 用户跨城游戏记录 |
| | | class func game_generalGameCrossRecord(userId:Int,page:Int,limit:Int = 20)->Observable<BaseResponse<[GamesRecordModel]>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/cityGameRecord") |
| | | .append(key: "uid", value: userId) |
| | | .append(key: "sign", value: "0DB011836143EEE2C2E072967C9F4E4B") |
| | | .append(key: "page", value: page) |
| | | .append(key: "limit", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 用户跨城游戏记录 |
| | | class func game_generalGameCrossRecord(userId:Int,page:Int,limit:Int = 20)->Observable<BaseResponse<[GamesRecordModel]>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/cityGameRecord") |
| | | .append(key: "uid", value: userId) |
| | | .append(key: "sign", value: "0DB011836143EEE2C2E072967C9F4E4B") |
| | | .append(key: "page", value: page) |
| | | .append(key: "limit", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 用户跨城游戏记录 |
| | | class func game_generalGameAccuracyRecord(userId:Int,page:Int,limit:Int = 20)->Observable<BaseResponse<[GamesRecordModel]>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/accuracyGameRecord") |
| | | .append(key: "uid", value: userId) |
| | | .append(key: "sign", value: "0DB011836143EEE2C2E072967C9F4E4B") |
| | | .append(key: "page", value: page) |
| | | .append(key: "limit", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 用户跨城游戏记录 |
| | | class func game_generalGameAccuracyRecord(userId:Int,page:Int,limit:Int = 20)->Observable<BaseResponse<[GamesRecordModel]>>{ |
| | | let params = ParamsAppender.build(url: Game_Url) |
| | | .interface(url: "/v7/user_api/general/accuracyGameRecord") |
| | | .append(key: "uid", value: userId) |
| | | .append(key: "sign", value: "0DB011836143EEE2C2E072967C9F4E4B") |
| | | .append(key: "page", value: page) |
| | | .append(key: "limit", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | } |
| | | |
| | | // MARK: -- 登录部分 |
| | | // MARK: -- 登录部分 |
| | | extension Services{ |
| | | static let pageSize: Int = 20 |
| | | class func login(phone:String,verity:String,type:LoginType)->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | if type == .pwd{ |
| | | params.interface(url: "/account/base/appUser/loginPassword") |
| | | params.append(key: "password", value: verity.jq_md5String().lowercased()) |
| | | }else{ |
| | | params.interface(url: "/account/base/appUser/loginSMSCode") |
| | | params.append(key: "code", value: verity) |
| | | } |
| | | params.append(key: "phone", value: phone) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | static let pageSize: Int = 20 |
| | | class func login(phone:String,verity:String,type:LoginType)->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | if type == .pwd{ |
| | | params.interface(url: "/account/base/appUser/loginPassword") |
| | | params.append(key: "password", value: verity.jq_md5String().lowercased()) |
| | | }else{ |
| | | params.interface(url: "/account/base/appUser/loginSMSCode") |
| | | params.append(key: "code", value: verity) |
| | | } |
| | | params.append(key: "phone", value: phone) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func logOff()->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/account/base/appUser/logOff") |
| | | .append(key: "appId", value: UserInfoModel.get()!.userId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func logOff()->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/account/base/appUser/logOff") |
| | | .append(key: "appId", value: UserInfoModel.get()!.userId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func wxLogin(openId:String,nickname:String,headimgurl:String,sex:Int)->Observable<BaseResponse<LoginModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/loginWeChat") |
| | | .append(key: "openId", value: openId) |
| | | .append(key: "nickname", value: nickname) |
| | | .append(key: "headimgurl", value: headimgurl) |
| | | .append(key: "sex", value: sex) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func wxLogin(openId:String,nickname:String,headimgurl:String,sex:Int)->Observable<BaseResponse<LoginModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/loginWeChat") |
| | | .append(key: "openId", value: openId) |
| | | .append(key: "nickname", value: nickname) |
| | | .append(key: "headimgurl", value: headimgurl) |
| | | .append(key: "sex", value: sex) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func wxPhoneBind(phone:String,code:String,openId:String,invitePhone:String? = nil)->Observable<BaseResponse<LoginModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/bind") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "openId", value: openId) |
| | | .append(key: "code", value: code) |
| | | .append(key: "invitePhone", value: invitePhone) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func wxPhoneBind(phone:String,code:String,openId:String,invitePhone:String? = nil)->Observable<BaseResponse<LoginModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/bind") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "openId", value: openId) |
| | | .append(key: "code", value: code) |
| | | .append(key: "invitePhone", value: invitePhone) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func getSMSCode(phone:String,type:GetSMSCodeType)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/getSMSCode") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "type", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func getSMSCode(phone:String,type:GetSMSCodeType)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/getSMSCode") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "type", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func register(phone:String,password:String,code:String,invitePhone:String? = nil)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/addAppUser") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "password", value: password.jq_md5String().lowercased()) |
| | | .append(key: "code", value: code) |
| | | .append(key: "invitePhone", value: invitePhone) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func register(phone:String,password:String,code:String,invitePhone:String? = nil)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/addAppUser") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "password", value: password.jq_md5String().lowercased()) |
| | | .append(key: "code", value: code) |
| | | .append(key: "invitePhone", value: invitePhone) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func updatePwd(phone:String,password:String,code:String)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/updatePassword") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "password", value: password.jq_md5String().lowercased()) |
| | | .append(key: "code", value: code) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func updatePwd(phone:String,password:String,code:String)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/updatePassword") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "password", value: password.jq_md5String().lowercased()) |
| | | .append(key: "code", value: code) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func forgetPwd(phone:String,password:String,code:String)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/forgetPassword") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "password", value: password.jq_md5String().lowercased()) |
| | | .append(key: "code", value: code) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func forgetPwd(phone:String,password:String,code:String)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/appUser/forgetPassword") |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "password", value: password.jq_md5String().lowercased()) |
| | | .append(key: "code", value: code) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 用户详情 |
| | | class func userDetails()->Observable<BaseResponse<UserInfoModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/userDetails") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 用户详情 |
| | | class func userDetails()->Observable<BaseResponse<UserInfoModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/userDetails") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func updateUserProfile(_ imgUrl:String)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/uploadImage") |
| | | .append(key: "userImage", value: imgUrl) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func updateUserProfile(_ imgUrl:String)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/uploadImage") |
| | | .append(key: "userImage", value: imgUrl) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 勋章 |
| | | static func studMedalList(studentId:Int)->Observable<BaseResponse<[StudentMedalModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/stuGoog") |
| | | .append(key: "stuId", value: studentId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 勋章 |
| | | static func studMedalList(studentId:Int)->Observable<BaseResponse<[StudentMedalModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/stuGoog") |
| | | .append(key: "stuId", value: studentId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 成为会员获取优惠券 |
| | | /// - Parameter menthod: 1=积分购买,2=注册赠送 |
| | | static func queryMemberCoupon(menthod:Int)->Observable<BaseResponse<[CouponInfo_1_Model]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/coupon/queryCouponList") |
| | | .append(key: "distributionMethod", value: menthod) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 成为会员获取优惠券 |
| | | /// - Parameter menthod: 1=积分购买,2=注册赠送 |
| | | static func queryMemberCoupon(menthod:Int)->Observable<BaseResponse<[CouponInfo_1_Model]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/coupon/queryCouponList") |
| | | .append(key: "distributionMethod", value: menthod) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | } |
| | | |
| | | // MARK: -- 首页部分 |
| | | // MARK: -- 首页部分 |
| | | |
| | | extension Services{ |
| | | class func homeInfo()->Observable<BaseResponse<HomeStoreModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/appUser/queryJoinPlayPai") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | class func homeInfo()->Observable<BaseResponse<HomeStoreModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/appUser/queryJoinPlayPai") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func homeStoreConfig2(storeId:Int)->Observable<BaseResponse<[HomeStoreTopBannerModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryIndexSet") |
| | | .append(key: "id", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func homeStoreConfig2(storeId:Int)->Observable<BaseResponse<[HomeStoreTopBannerModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryIndexSet") |
| | | .append(key: "id", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 主页配置 |
| | | class func homeStoreConfig(storeId:Int)->Observable<BaseResponse<[HomeStoreConfigModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryStoreConfig") |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 主页配置 |
| | | class func homeStoreConfig(storeId:Int)->Observable<BaseResponse<[HomeStoreConfigModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryStoreConfig") |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | /// 获取banner图 |
| | | /// - Parameter position: 位置(1=首页,2=线上课得积分,3=看视频得奖励,4=常见问题) |
| | | class func bannerList(position:BannerPositionType)->Observable<BaseResponse<[BannerModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/banner/queryBannerList") |
| | | .append(key: "position", value: position.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取banner图 |
| | | /// - Parameter position: 位置(1=首页,2=线上课得积分,3=看视频得奖励,4=常见问题) |
| | | class func bannerList(position:BannerPositionType)->Observable<BaseResponse<[BannerModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/banner/queryBannerList") |
| | | .append(key: "position", value: position.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | } |
| | | |
| | | // MARK: -- 福利相关 |
| | | extension Services{ |
| | | class func benefitHome()->Observable<BaseResponse<BenefitHomeModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/indexOfAppUser") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | class func benefitHome()->Observable<BaseResponse<BenefitHomeModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/indexOfAppUser") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 账单 |
| | | /// - Parameters: |
| | | /// - recordType: 记录(1充值 2扣除) |
| | | class func billingList(recordType:Int?,yearMonth:String)->Observable<BaseResponse<[BillingModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/userBilling") |
| | | .append(key: "recordId", value: recordType) |
| | | .append(key: "yearMonth", value: yearMonth) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 账单 |
| | | /// - Parameters: |
| | | /// - recordType: 记录(1充值 2扣除) |
| | | class func billingList(recordType:Int?,yearMonth:String)->Observable<BaseResponse<[BillingModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/userBilling") |
| | | .append(key: "recordId", value: recordType) |
| | | .append(key: "yearMonth", value: yearMonth) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 优惠券 |
| | | class func myCouponList(type:Int?,useStatus:Int?)->Observable<BaseResponse<[CouponModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/coupon/queryCouponPackage") |
| | | .append(key: "couponType", value: type) |
| | | .append(key: "useStatus", value: useStatus) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 优惠券 |
| | | class func myCouponList(type:Int?,useStatus:Int?)->Observable<BaseResponse<[CouponModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/coupon/queryCouponPackage") |
| | | .append(key: "couponType", value: type) |
| | | .append(key: "useStatus", value: useStatus) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 充值明细 |
| | | /// - Parameters: |
| | | /// - yearMonth: 记录(1充值 2扣除) |
| | | class func voucherDetail(recordType:Int?,yearMonth:String,page:Int,pageSize:Int = 20,subType:RechargeRecordVC.RechargeRecordType)->Observable<BaseResponse<[BillingModel]>>{ |
| | | /// 充值明细 |
| | | /// - Parameters: |
| | | /// - yearMonth: 记录(1充值 2扣除) |
| | | class func voucherDetail(recordType:Int?,yearMonth:String,page:Int,pageSize:Int = 20,subType:RechargeRecordVC.RechargeRecordType)->Observable<BaseResponse<[BillingModel]>>{ |
| | | |
| | | let params:ParamsAppender! |
| | | if subType == .coin{ |
| | | params = ParamsAppender.build(url: All_Url).interface(url: "/account/api/useBenefit/voucherDetail") |
| | | }else{ |
| | | params = ParamsAppender.build(url: All_Url).interface(url: "/account/api/useBenefit/integralDetails") |
| | | } |
| | | let params:ParamsAppender! |
| | | if subType == .coin{ |
| | | params = ParamsAppender.build(url: All_Url).interface(url: "/account/api/useBenefit/voucherDetail") |
| | | }else{ |
| | | params = ParamsAppender.build(url: All_Url).interface(url: "/account/api/useBenefit/integralDetails") |
| | | } |
| | | |
| | | params.append(key: "recordId", value: recordType) |
| | | params.append(key: "yearMonth", value: yearMonth) |
| | | params.append(key: "pageNum", value: page) |
| | | params.append(key: "pageSize", value: pageSize) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | params.append(key: "recordId", value: recordType) |
| | | params.append(key: "yearMonth", value: yearMonth) |
| | | params.append(key: "pageNum", value: page) |
| | | params.append(key: "pageSize", value: pageSize) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 充值列表 |
| | | class func voucherCenter()->Observable<BaseResponse<[CoinExchangeModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/voucherCenter") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 充值列表 |
| | | class func voucherCenter()->Observable<BaseResponse<[CoinExchangeModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/voucherCenter") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 支付 |
| | | class func useBenefitPayment(amount:Double,payType:PayType)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/payment") |
| | | .append(key: "amount", value: amount) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 支付 |
| | | class func useBenefitPayment(amount:Double,payType:PayType)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/payment") |
| | | .append(key: "amount", value: amount) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | /// 充值说明 |
| | | class func rechargeDescription()->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/stored/rechargeDescription") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | /// 充值说明 |
| | | class func rechargeDescription()->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/stored/rechargeDescription") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // MARK: -- 运动营相关 |
| | | // MARK: -- 运动营相关 |
| | | extension Services { |
| | | |
| | | /// 获取优惠券 |
| | | class func paymentCourseCouponList(id:Int)->Observable<BaseResponse<[CourseCouponModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/paymentCourseCouponList") |
| | | .append(key: "coursePackagePaymentConfigId", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取优惠券 |
| | | class func paymentCourseCouponList(id:Int)->Observable<BaseResponse<[CourseCouponModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/paymentCourseCouponList") |
| | | .append(key: "coursePackagePaymentConfigId", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func queryCourseList(typeId:Int? = nil,distanceSort:SortType? = nil,salesRanking:SortType? = nil,search:String? = nil,storeId:Int? = nil)->Observable<BaseResponse<[CourseItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/queryCourseList") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "coursePackageTypeId", value: typeId) |
| | | .append(key: "distanceSort", value: distanceSort?.rawValue) |
| | | .append(key: "salesRanking", value: salesRanking?.rawValue) |
| | | .append(key: "search", value: search) |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | class func queryCourseList(typeId:Int? = nil,distanceSort:SortType? = nil,salesRanking:SortType? = nil,search:String? = nil,storeId:Int? = nil)->Observable<BaseResponse<[CourseItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/queryCourseList") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "coursePackageTypeId", value: typeId) |
| | | .append(key: "distanceSort", value: distanceSort?.rawValue) |
| | | .append(key: "salesRanking", value: salesRanking?.rawValue) |
| | | .append(key: "search", value: search) |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func querypaymentCompetitionCourseList(id:Int)->Observable<BaseResponse<[CourseListSubModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/api/competition/paymentCompetitionCourseList") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | class func querypaymentCompetitionCourseList(id:Int)->Observable<BaseResponse<[CourseListSubModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/api/competition/paymentCompetitionCourseList") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func getMyCourseList(storeId:Int)->Observable<BaseResponse<[CourseListSubModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/getMyCourseList") |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | class func getMyCourseList(storeId:Int)->Observable<BaseResponse<[CourseListSubModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/getMyCourseList") |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func coursePackageType()->Observable<BaseResponse<[NormalSimpleModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/queryCoursePackageType") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | class func coursePackageType()->Observable<BaseResponse<[NormalSimpleModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/queryCoursePackageType") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func queryStoreList(cityCode:Int? = nil)->Observable<BaseResponse<[NormalSimpleModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryStoreLists") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "cityCode", value: cityCode) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | class func queryStoreList(cityCode:Int? = nil)->Observable<BaseResponse<[NormalSimpleModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryStoreLists") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "cityCode", value: cityCode) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func queryCourseInfo(id:Int,payId:Int? = nil)->Observable<BaseResponse<CourseDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/queryCourseInfo") |
| | | .append(key: "id", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "payId", value: payId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func queryCourseInfo(id:Int,payId:Int? = nil)->Observable<BaseResponse<CourseDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/queryCourseInfo") |
| | | .append(key: "id", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "payId", value: payId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | /// 查询可用优惠券 |
| | | class func queryAvaiableCopons(id:Int,price:Double)->Observable<BaseResponse<[CouponInfoModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/coupon/queryAvailableCouponList") |
| | | .append(key: "coursePackageId", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "price", value: "\(price)") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 查询可用优惠券 |
| | | class func queryAvaiableCopons(id:Int,price:Double)->Observable<BaseResponse<[CouponInfoModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/coupon/queryAvailableCouponList") |
| | | .append(key: "coursePackageId", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "price", value: "\(price)") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 获取学员列表 |
| | | class func queryStudentList()->Observable<BaseResponse<[CourseDetailStudentModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/student/queryStudentList") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取学员列表 |
| | | class func queryStudentList()->Observable<BaseResponse<[CourseDetailStudentModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/student/queryStudentList") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func editStu(_ model:StudentProfileModel)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/commitEditStu") |
| | | .append(key: "birthday", value: model.birthday) |
| | | .append(key: "headImg", value: model.headImg) |
| | | .append(key: "height", value: model.height.string) |
| | | .append(key: "idCard", value: model.idCard) |
| | | .append(key: "name", value: model.name) |
| | | .append(key: "phone", value: model.phone) |
| | | .append(key: "sex", value: model.sex.rawValue) |
| | | .append(key: "weight", value: model.weight.string) |
| | | .append(key: "stuId", value: model.stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func editStu(_ model:StudentProfileModel)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/commitEditStu") |
| | | .append(key: "birthday", value: model.birthday) |
| | | .append(key: "headImg", value: model.headImg) |
| | | .append(key: "height", value: model.height.string) |
| | | .append(key: "idCard", value: model.idCard) |
| | | .append(key: "name", value: model.name) |
| | | .append(key: "phone", value: model.phone) |
| | | .append(key: "sex", value: model.sex.rawValue) |
| | | .append(key: "weight", value: model.weight.string) |
| | | .append(key: "stuId", value: model.stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 添加学员 |
| | | class func addStudent(_ model:StudentProfileModel)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/addData") |
| | | .append(key: "birthday", value: model.birthday) |
| | | .append(key: "headImg", value: model.headImg) |
| | | .append(key: "height", value: model.height.string) |
| | | .append(key: "idCard", value: model.idCard) |
| | | .append(key: "name", value: model.name) |
| | | .append(key: "phone", value: model.phone) |
| | | .append(key: "sex", value: model.sex.rawValue) |
| | | .append(key: "weight", value: model.weight.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 添加学员 |
| | | class func addStudent(_ model:StudentProfileModel)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/addData") |
| | | .append(key: "birthday", value: model.birthday) |
| | | .append(key: "headImg", value: model.headImg) |
| | | .append(key: "height", value: model.height.string) |
| | | .append(key: "idCard", value: model.idCard) |
| | | .append(key: "name", value: model.name) |
| | | .append(key: "phone", value: model.phone) |
| | | .append(key: "sex", value: model.sex.rawValue) |
| | | .append(key: "weight", value: model.weight.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 购买运动营 |
| | | class func courcePayment(conponId:Int? = nil,courseConfigId:Int,id:Int,price:Double,payType:PayType,stuId:[Int],orderId:Int? = nil)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/paymentCourse") |
| | | .append(key: "couponId", value: conponId) |
| | | .append(key: "coursePackagePaymentConfigId", value: courseConfigId) |
| | | .append(key: "id", value: id) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | .append(key: "price", value: price.string) |
| | | .append(key: "studentIds", value: stuId.map({"\($0)"}).joined(separator: ";")) |
| | | .append(key: "orderId", value: orderId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 购买运动营 |
| | | class func courcePayment(conponId:Int? = nil,courseConfigId:Int,id:Int,price:Double,payType:PayType,stuId:[Int],orderId:Int? = nil)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/paymentCourse") |
| | | .append(key: "couponId", value: conponId) |
| | | .append(key: "coursePackagePaymentConfigId", value: courseConfigId) |
| | | .append(key: "id", value: id) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | .append(key: "price", value: price.string) |
| | | .append(key: "studentIds", value: stuId.map({"\($0)"}).joined(separator: ";")) |
| | | .append(key: "orderId", value: orderId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 查询店的免费福利 |
| | | class func queryStoreFreeBenefit(id:Int)->Observable<BaseResponse<StoreWalfareModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "other/base/store/queryStoreFreeBenefit") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 查询店的免费福利 |
| | | class func queryStoreFreeBenefit(id:Int)->Observable<BaseResponse<StoreWalfareModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "other/base/store/queryStoreFreeBenefit") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 本周福利 |
| | | class func weekLimitedBenefit(discountType:Int)->Observable<BaseResponse<[WeeklyItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/useBenefit/weekLimitedBenefit") |
| | | .append(key: "discountType", value: discountType) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 本周福利 |
| | | class func weekLimitedBenefit(discountType:Int)->Observable<BaseResponse<[WeeklyItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/useBenefit/weekLimitedBenefit") |
| | | .append(key: "discountType", value: discountType) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 本周福利详情 |
| | | class func weekBenefitDetail(id:Int)->Observable<BaseResponse<WeeklyItemDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/useBenefit/discountCourseDatas") |
| | | .append(key: "coursePackageDiscountId", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 本周福利详情 |
| | | class func weekBenefitDetail(id:Int)->Observable<BaseResponse<WeeklyItemDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/useBenefit/discountCourseDatas") |
| | | .append(key: "coursePackageDiscountId", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | } |
| | | |
| | | extension Services{ |
| | | |
| | | /// 已报名运动营-运动营列表 |
| | | static func registeredCourse(courseTypeId:Int? = nil,search:String? = nil)->Observable<BaseResponse<[SignUpCourseItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/registeredCourses") |
| | | .append(key: "courseTypeId", value: courseTypeId) |
| | | .append(key: "search", value: search) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 已报名运动营-运动营列表 |
| | | static func registeredCourse(courseTypeId:Int? = nil,search:String? = nil)->Observable<BaseResponse<[SignUpCourseItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/registeredCourses") |
| | | .append(key: "courseTypeId", value: courseTypeId) |
| | | .append(key: "search", value: search) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | static func registeredData(coursePayId:Int,orderId:Int? = nil)->Observable<BaseResponse<SignUpCourseItemDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/RegisteredData") |
| | | .append(key: "coursePayId", value: coursePayId) |
| | | .append(key: "orderId", value: orderId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | static func registeredData(coursePayId:Int,orderId:Int? = nil)->Observable<BaseResponse<SignUpCourseItemDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/RegisteredData") |
| | | .append(key: "coursePayId", value: coursePayId) |
| | | .append(key: "orderId", value: orderId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 开始上课:学员列表 |
| | | static func startCourceStudentList()->Observable<BaseResponse<[StudentProfile1Model]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/listOfStu") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 开始上课:学员列表 |
| | | static func startCourceStudentList()->Observable<BaseResponse<[StudentProfile1Model]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/listOfStu") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 切换学员 |
| | | static func startCourseSwitch(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/switchStu") |
| | | .append(key: "stuId", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 切换学员 |
| | | static func startCourseSwitch(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/switchStu") |
| | | .append(key: "stuId", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 设置默认 |
| | | static func courseDefaultSet(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/editDefault") |
| | | .append(key: "stuId", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 设置默认 |
| | | static func courseDefaultSet(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/editDefault") |
| | | .append(key: "stuId", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 上课首页 |
| | | static func startCourseHome()->Observable<BaseResponse<StartClouseHomeModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/queryStudentData") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "stuId", value: UserDefaults.standard.value(forKey: "currentStuId") as? Int) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 上课首页 |
| | | static func startCourseHome()->Observable<BaseResponse<StartClouseHomeModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/queryStudentData") |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "stuId", value: UserDefaults.standard.value(forKey: "currentStuId") as? Int) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 获取学员测试报告 |
| | | static func queryPhysical(stuId:Int)->Observable<BaseResponse<StartClouseReportModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/queryPhysical") |
| | | .append(key: "stuID", value: stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取学员测试报告 |
| | | static func queryPhysical(stuId:Int)->Observable<BaseResponse<StartClouseReportModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/queryPhysical") |
| | | .append(key: "stuID", value: stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | /// 学员预约运动营列表 |
| | | static func studentAppointList(page:Int,stuId:Int,status:StudentAppointTypeList?,search:String,timeType:StudentAppointDateType)->Observable<BaseResponse<[StudentAppointModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/stuAppointList") |
| | | .append(key: "appointStatus", value: status?.rawValue) |
| | | .append(key: "timeType", value: timeType.rawValue) |
| | | .append(key: "search", value: search) |
| | | .append(key: "stuId", value: stuId) |
| | | .append(key: "pageNum", value: page) |
| | | .append(key: "size", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 学员预约运动营列表 |
| | | static func studentAppointList(page:Int,stuId:Int,status:StudentAppointTypeList?,search:String,timeType:StudentAppointDateType)->Observable<BaseResponse<[StudentAppointModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/stuAppointList") |
| | | .append(key: "appointStatus", value: status?.rawValue) |
| | | .append(key: "timeType", value: timeType.rawValue) |
| | | .append(key: "search", value: search) |
| | | .append(key: "stuId", value: stuId) |
| | | .append(key: "pageNum", value: page) |
| | | .append(key: "size", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 课后练习-获取布置运动营列表 |
| | | static func queryArrangeCourseList()->Observable<BaseResponse<[CityProfileModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/queryArrangeCourseList") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 课后练习-获取布置运动营列表 |
| | | static func queryArrangeCourseList()->Observable<BaseResponse<[CityProfileModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/course/queryArrangeCourseList") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 课后练习-课后视频列表 |
| | | static func exerciseCourseList(courseTypeId:Int?,search:String? = nil)->Observable<BaseResponse<[ExerciseVideoModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/afterSourceList") |
| | | .append(key: "courseTypeId", value: courseTypeId) |
| | | .append(key: "search", value: search) |
| | | .append(key: "stuId", value: UserDefaults.standard.value(forKey: "currentStuId") as? Int) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 课后练习-课后视频列表 |
| | | static func exerciseCourseList(courseTypeId:Int?,search:String? = nil)->Observable<BaseResponse<[ExerciseVideoModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/afterSourceList") |
| | | .append(key: "courseTypeId", value: courseTypeId) |
| | | .append(key: "search", value: search) |
| | | .append(key: "stuId", value: UserDefaults.standard.value(forKey: "currentStuId") as? Int) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 课后练习-课后视频详情 |
| | | static func exerciseCourseDetail(coursePackageId:Int,videoId:Int,scId:Int? = nil)->Observable<BaseResponse<ExerciseVideoDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/afterSourceDetail") |
| | | .append(key: "coursePackageId", value: coursePackageId) |
| | | .append(key: "videoId", value: videoId) |
| | | .append(key: "scId", value: scId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 课后练习-课后视频详情 |
| | | static func exerciseCourseDetail(coursePackageId:Int,videoId:Int,scId:Int? = nil)->Observable<BaseResponse<ExerciseVideoDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/afterSourceDetail") |
| | | .append(key: "coursePackageId", value: coursePackageId) |
| | | .append(key: "videoId", value: videoId) |
| | | .append(key: "scId", value: scId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | /// 取消预约 |
| | | static func cancelCourse(courseStuRecordId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/cancelCourse") |
| | | .append(key: "courseStuRecordId", value: courseStuRecordId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 取消预约 |
| | | static func cancelCourse(courseStuRecordId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/cancelCourse") |
| | | .append(key: "courseStuRecordId", value: courseStuRecordId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 学员评语 |
| | | static func stuComment(stuId:Int)->Observable<BaseResponse<[StudentCommentModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/stuComment") |
| | | .append(key: "stuId", value: stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 学员评语 |
| | | static func stuComment(stuId:Int)->Observable<BaseResponse<[StudentCommentModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/stuComment") |
| | | .append(key: "stuId", value: stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 课时详情-记录列表 |
| | | static func recordDetails(stuId:Int,lessionId:Int,startTime:String?,type:Int?)->Observable<BaseResponse<[CourseRecordModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/recordDetails") |
| | | .append(key: "stuId", value: stuId) |
| | | .append(key: "lessionId", value: lessionId) |
| | | .append(key: "time", value: startTime) |
| | | .append(key: "type", value: type) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 课时详情-记录列表 |
| | | static func recordDetails(stuId:Int,lessionId:Int,startTime:String?,type:Int?)->Observable<BaseResponse<[CourseRecordModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/recordDetails") |
| | | .append(key: "stuId", value: stuId) |
| | | .append(key: "lessionId", value: lessionId) |
| | | .append(key: "time", value: startTime) |
| | | .append(key: "type", value: type) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | static func lessonDetails(lessonId:Int,stuId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/lessonDetails") |
| | | .append(key: "stuId", value: stuId) |
| | | .append(key: "lessonId", value: lessonId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | static func lessonDetails(lessonId:Int,stuId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/lessonDetails") |
| | | .append(key: "stuId", value: stuId) |
| | | .append(key: "lessonId", value: lessonId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | /// 上课首页-运动营列表 |
| | | static func weeksOfCourseDetails(stuId:Int,time:Date,storeId:Int)->Observable<BaseResponse<WeeklyCourseModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/weeksOfCourseDetailsList") |
| | | .append(key: "stuId", value: stuId) |
| | | .append(key: "time", value: time.jq_format("yyyy-MM-dd")) |
| | | .append(key: "storeId", value: storeId) |
| | | .append(key: "latitude", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "longitude", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 上课首页-运动营列表 |
| | | static func weeksOfCourseDetails(stuId:Int,time:Date,storeId:Int)->Observable<BaseResponse<WeeklyCourseModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/weeksOfCourseDetailsList") |
| | | .append(key: "stuId", value: stuId) |
| | | .append(key: "time", value: time.jq_format("yyyy-MM-dd")) |
| | | .append(key: "storeId", value: storeId) |
| | | .append(key: "latitude", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "longitude", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 更新课后视频学习状态 |
| | | static func updateVideoStatus(coursePackageId:Int,videoId:Int?,scId:Int? = nil)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/updateVideoStatus") |
| | | .append(key: "coursePackageId", value: coursePackageId) |
| | | .append(key: "videoId", value: videoId) |
| | | .append(key: "isOver", value: 1) |
| | | .append(key: "scId", value: scId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 更新课后视频学习状态 |
| | | static func updateVideoStatus(coursePackageId:Int,videoId:Int?,scId:Int? = nil)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/updateVideoStatus") |
| | | .append(key: "coursePackageId", value: coursePackageId) |
| | | .append(key: "videoId", value: videoId) |
| | | .append(key: "isOver", value: 1) |
| | | .append(key: "scId", value: scId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 观看视频结束后领取奖励 |
| | | static func receiveAward(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/benefitsVideo/receiveAward") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 观看视频结束后领取奖励 |
| | | static func receiveAward(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/benefitsVideo/receiveAward") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 上课主页-请假操作 |
| | | static func startCourceRreverse(courseId:Int,time:String,stuId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/reverse") |
| | | .append(key: "courseID", value: courseId) |
| | | .append(key: "time", value: time) |
| | | .append(key: "stuId", value: stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 上课主页-请假操作 |
| | | static func startCourceRreverse(courseId:Int,time:String,stuId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/reverse") |
| | | .append(key: "courseID", value: courseId) |
| | | .append(key: "time", value: time) |
| | | .append(key: "stuId", value: stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 体验购课 |
| | | static func payCourseInfo(courseId:Int)->Observable<BaseResponse<ExperienceCourseModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/payCourseInfo") |
| | | .append(key: "courseId", value: courseId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 体验购课 |
| | | static func payCourseInfo(courseId:Int)->Observable<BaseResponse<ExperienceCourseModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/payCourseInfo") |
| | | .append(key: "courseId", value: courseId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 确认购课 |
| | | static func payCourse(courseId:Int,num:Int,oldCourseId:Int,time:[String])->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/payCourse") |
| | | .append(key: "courseId", value: courseId) |
| | | .append(key: "num", value: num) |
| | | .append(key: "oldCourseId", value: oldCourseId) |
| | | .append(key: "time", value: time.joined(separator: ",").replacingOccurrences(of: ".", with: "-")) |
| | | .append(key: "stuId", value: UserDefaults.standard.value(forKey: "currentStuId") as? Int) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 确认购课 |
| | | static func payCourse(courseId:Int,num:Int,oldCourseId:Int,time:[String])->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/payCourse") |
| | | .append(key: "courseId", value: courseId) |
| | | .append(key: "num", value: num) |
| | | .append(key: "oldCourseId", value: oldCourseId) |
| | | .append(key: "time", value: time.joined(separator: ",").replacingOccurrences(of: ".", with: "-")) |
| | | .append(key: "stuId", value: UserDefaults.standard.value(forKey: "currentStuId") as? Int) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 学员勋章详情 |
| | | static func courseStuMedal(stuId:Int)->Observable<BaseResponse<[StudentMedalInfoModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/stuMedal") |
| | | .append(key: "stuId", value: stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 学员勋章详情 |
| | | static func courseStuMedal(stuId:Int)->Observable<BaseResponse<[StudentMedalInfoModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/stuMedal") |
| | | .append(key: "stuId", value: stuId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 有未分配课时 |
| | | static func weeksOfGetHours()->Observable<BaseResponse<Int>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/weeksOfGetHours") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 有未分配课时 |
| | | static func weeksOfGetHours()->Observable<BaseResponse<Int>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/weeksOfGetHours") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 分配课时 |
| | | static func weeksOfAddHours(packetId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/weeksOfAddHours") |
| | | .append(key: "packetId", value: packetId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 分配课时 |
| | | static func weeksOfAddHours(packetId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/startCource/weeksOfAddHours") |
| | | .append(key: "packetId", value: packetId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | } |
| | | |
| | | // MARK: -- 探索玩湃 |
| | | extension Services{ |
| | | |
| | | static func exploreStoreList(search:String? = nil,space:Int? = nil,cityCode:Int? = nil)->Observable<BaseResponse<[SearchStoreListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/exploreWP/storeList") |
| | | .append(key: "latitude", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "longitude", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "search", value: search) |
| | | .append(key: "space", value: space) |
| | | .append(key: "cityCode", value: cityCode) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | static func exploreStoreList(search:String? = nil,space:Int? = nil,cityCode:Int? = nil)->Observable<BaseResponse<[SearchStoreListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/exploreWP/storeList") |
| | | .append(key: "latitude", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "longitude", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "search", value: search) |
| | | .append(key: "space", value: space) |
| | | .append(key: "cityCode", value: cityCode) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 探索玩湃首页数据 |
| | | static func exploreHome()->Observable<BaseResponse<[StartClouseExploreModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/exploreWP/indexOfEx") |
| | | .append(key: "latitude", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "longitude", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 探索玩湃首页数据 |
| | | static func exploreHome()->Observable<BaseResponse<[StartClouseExploreModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/exploreWP/indexOfEx") |
| | | .append(key: "latitude", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "longitude", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 获取公告列表/常见问题列表 |
| | | static func exploreNoticeList(type:CustomerSubListVC.CustomerSubType)->Observable<BaseResponse<[NoticeItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | if type == .notice{ |
| | | params.interface(url: "/account/base/exploreWP/noticeList") |
| | | }else{ |
| | | params.interface(url: "/account/base/exploreWP/exceptionList") |
| | | } |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取公告列表/常见问题列表 |
| | | static func exploreNoticeList(type:CustomerSubListVC.CustomerSubType)->Observable<BaseResponse<[NoticeItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | if type == .notice{ |
| | | params.interface(url: "/account/base/exploreWP/noticeList") |
| | | }else{ |
| | | params.interface(url: "/account/base/exploreWP/exceptionList") |
| | | } |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 查看详情 |
| | | static func exploreNoticeDetail(id:Int,type:CustomerSubListVC.CustomerSubType)->Observable<BaseResponse<NoticeItemModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | if type == .notice{ |
| | | params.interface(url: "/account/base/exploreWP/noticeDetail") |
| | | params.append(key: "noId", value: id) |
| | | }else{ |
| | | params.interface(url: "/account/base/exploreWP/exceptionDetail") |
| | | params.append(key: "quesId", value: id) |
| | | } |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 查看详情 |
| | | static func exploreNoticeDetail(id:Int,type:CustomerSubListVC.CustomerSubType)->Observable<BaseResponse<NoticeItemModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | if type == .notice{ |
| | | params.interface(url: "/account/base/exploreWP/noticeDetail") |
| | | params.append(key: "noId", value: id) |
| | | }else{ |
| | | params.interface(url: "/account/base/exploreWP/exceptionDetail") |
| | | params.append(key: "quesId", value: id) |
| | | } |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | /// 客服电话 |
| | | static func customerPhone()->Observable<BaseResponse<[String]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/account/base/exploreWP/customerList") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 客服电话 |
| | | static func customerPhone()->Observable<BaseResponse<[String]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/account/base/exploreWP/customerList") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 获取门店详情 |
| | | static func exploreStoreDetail(storeId:Int)->Observable<BaseResponse<SearchStoreDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/exploreWP/storeDetail") |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取门店详情 |
| | | static func exploreStoreDetail(storeId:Int)->Observable<BaseResponse<SearchStoreDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/base/exploreWP/storeDetail") |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 评价门店 |
| | | static func evaluationStore(id:Int,content:String,imgs:String,score:Double)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/storeEvaluation/saveEvaluation") |
| | | .append(key: "storeId", value: id) |
| | | .append(key: "content", value: content) |
| | | .append(key: "imgs", value: imgs) |
| | | .append(key: "score", value: score) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 评价门店 |
| | | static func evaluationStore(id:Int,content:String,imgs:String,score:Double)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/storeEvaluation/saveEvaluation") |
| | | .append(key: "storeId", value: id) |
| | | .append(key: "content", value: content) |
| | | .append(key: "imgs", value: imgs) |
| | | .append(key: "score", value: score) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | } |
| | | |
| | | // MARK: -- 商城部分 |
| | | extension Services{ |
| | | |
| | | /// 积分商城-商品详情 |
| | | static func UseBenefitDetail(goodsId:Int,goodsType:ExchangeType)->Observable<BaseResponse<ExchangeGoodsModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/goodsDetails") |
| | | .append(key: "goodId", value: goodsId) |
| | | .append(key: "goodsType", value: goodsType.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 积分商城-商品详情 |
| | | static func UseBenefitDetail(goodsId:Int,goodsType:ExchangeType)->Observable<BaseResponse<ExchangeGoodsModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/goodsDetails") |
| | | .append(key: "goodId", value: goodsId) |
| | | .append(key: "goodsType", value: goodsType.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 积分商城-商品详情 |
| | | static func UseBenefitDetailOne(goodsId:Int)->Observable<BaseResponse<ExchangeGoodsModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/goodsDetailsOne") |
| | | .append(key: "goodId", value: goodsId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 积分商城-商品详情 |
| | | static func UseBenefitDetailOne(goodsId:Int)->Observable<BaseResponse<ExchangeGoodsModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/goodsDetailsOne") |
| | | .append(key: "goodId", value: goodsId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 兑换门店 |
| | | static func exchangeStoreIds(id:Int,type:ExchangeType)->Observable<BaseResponse<[StoreSimpleModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/exchangeStoreIds") |
| | | .append(key: "pointsMerId", value: id) |
| | | .append(key: "goodsType", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 兑换门店 |
| | | static func exchangeStoreIds(id:Int,type:ExchangeType)->Observable<BaseResponse<[StoreSimpleModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/exchangeStoreIds") |
| | | .append(key: "pointsMerId", value: id) |
| | | .append(key: "goodsType", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 兑换商品 |
| | | static func exchangeOperation(exchangeType:ExchangePaymentType,goodsId:Int,goodsType:ExchangeType,num:Int,payType:PayType?,stuIds:String,storeId:Int?)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/productRedemptionOperation") |
| | | .append(key: "exchangeType", value: exchangeType.rawValue) |
| | | .append(key: "goodId", value: goodsId) |
| | | .append(key: "goodsType", value: goodsType.rawValue) |
| | | .append(key: "nums", value: num) |
| | | .append(key: "payType", value: payType?.rawValue) |
| | | .append(key: "stuIds", value: stuIds) |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true,ignoreAlert: true) |
| | | } |
| | | /// 兑换商品 |
| | | static func exchangeOperation(exchangeType:ExchangePaymentType,goodsId:Int,goodsType:ExchangeType,num:Int,payType:PayType?,stuIds:String,storeId:Int?)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/productRedemptionOperation") |
| | | .append(key: "exchangeType", value: exchangeType.rawValue) |
| | | .append(key: "goodId", value: goodsId) |
| | | .append(key: "goodsType", value: goodsType.rawValue) |
| | | .append(key: "nums", value: num) |
| | | .append(key: "payType", value: payType?.rawValue) |
| | | .append(key: "stuIds", value: stuIds) |
| | | .append(key: "storeId", value: storeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true,ignoreAlert: true) |
| | | } |
| | | |
| | | /// 积分商城-实体、门票、优惠券为默认门店|课包为默认学员 |
| | | static func goodsOfCourseStore(isCourse:Bool,pointsMerId:Int)->Observable<BaseResponse<StudentProfile2Model>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/goodsOfCourseStore") |
| | | .append(key: "isCourse", value: isCourse) |
| | | .append(key: "pointsMerId", value: pointsMerId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 积分商城-实体、门票、优惠券为默认门店|课包为默认学员 |
| | | static func goodsOfCourseStore(isCourse:Bool,pointsMerId:Int)->Observable<BaseResponse<StudentProfile2Model>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/goodsOfCourseStore") |
| | | .append(key: "isCourse", value: isCourse) |
| | | .append(key: "pointsMerId", value: pointsMerId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 商城中心 |
| | | class func mallList(page:Int,goodsType:ExchangeType?,rank:Sort2Type?,search:String?,shopId:Int?)->Observable<BaseResponse<[MarketMdoel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/integralMallList") |
| | | .append(key: "goodsType", value: goodsType?.rawValue) |
| | | .append(key: "rank", value: rank?.rawValue) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "pageNum", value: page) |
| | | .append(key: "pageSize", value: 20) |
| | | .append(key: "search", value: search) |
| | | .append(key: "shopId", value: shopId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 商城中心 |
| | | class func mallList(page:Int,goodsType:ExchangeType?,rank:Sort2Type?,search:String?,shopId:Int?)->Observable<BaseResponse<[MarketMdoel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/integralMallList") |
| | | .append(key: "goodsType", value: goodsType?.rawValue) |
| | | .append(key: "rank", value: rank?.rawValue) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | .append(key: "pageNum", value: page) |
| | | .append(key: "pageSize", value: 20) |
| | | .append(key: "search", value: search) |
| | | .append(key: "shopId", value: shopId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 积分商城-兑换记录 |
| | | class func exchangeRecords(page:Int,goodType:ExchangeType? = nil,useType:UseStateType? = nil)->Observable<BaseResponse<[RecordsModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/exchangeRecords") |
| | | .append(key: "goodType", value: goodType?.rawValue) |
| | | .append(key: "useType", value: useType?.rawValue) |
| | | .append(key: "page", value:page) |
| | | .append(key: "size", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 积分商城-兑换记录 |
| | | class func exchangeRecords(page:Int,goodType:ExchangeType? = nil,useType:UseStateType? = nil)->Observable<BaseResponse<[RecordsModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/exchangeRecords") |
| | | .append(key: "goodType", value: goodType?.rawValue) |
| | | .append(key: "useType", value: useType?.rawValue) |
| | | .append(key: "page", value:page) |
| | | .append(key: "size", value: 20) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 兑换记录-详情 |
| | | class func exchangeRecordDetail(id:Int,goodType:ExchangeType)->Observable<BaseResponse<RecordsDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/redemptionDetails") |
| | | .append(key: "detailsId", value: id) |
| | | // .append(key: "goodType", value: goodType.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 兑换记录-详情 |
| | | class func exchangeRecordDetail(id:Int,goodType:ExchangeType)->Observable<BaseResponse<RecordsDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/useBenefit/redemptionDetails") |
| | | .append(key: "detailsId", value: id) |
| | | // .append(key: "goodType", value: goodType.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | } |
| | | |
| | | // MARK: -- 预约场地 |
| | | extension Services{ |
| | | |
| | | /// 场地预约详情 |
| | | static func siteDetail(id:Int)->Observable<BaseResponse<YardBookingDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/queryMySiteById") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 获取场地类型 |
| | | static func querySiteType()->Observable<BaseResponse<[NormalSimpleModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/site/querySiteType") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 场地预约详情 |
| | | static func siteDetail(id:Int)->Observable<BaseResponse<YardBookingDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/queryMySiteById") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 获取场地列表 |
| | | static func querySiteList(pageNum:Int,pageSize:Int,siteTypeId:Int?,cityCode:Int?,storeId:Int?,startTime:String?,endTime:String?,search:String?)->Observable<BaseResponse<[SiteItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/site/querySiteList") |
| | | .append(key: "pageNum", value: pageNum) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "siteTypeId", value: siteTypeId) |
| | | .append(key: "cityCode", value: cityCode) |
| | | .append(key: "storeId", value: storeId) |
| | | .append(key: "startTime", value: startTime) |
| | | .append(key: "endTime", value: endTime) |
| | | .append(key: "search", value: search) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取场地类型 |
| | | static func querySiteType()->Observable<BaseResponse<[NormalSimpleModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/site/querySiteType") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 获取场地详情 |
| | | static func querySiteDetail(id:Int)->Observable<BaseResponse<SiteDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/site/querySiteInfo") |
| | | .append(key: "id", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取场地列表 |
| | | static func querySiteList(pageNum:Int,pageSize:Int,siteTypeId:Int?,cityCode:Int?,storeId:Int?,startTime:String?,endTime:String?,search:String?)->Observable<BaseResponse<[SiteItemModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/site/querySiteList") |
| | | .append(key: "pageNum", value: pageNum) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "siteTypeId", value: siteTypeId) |
| | | .append(key: "cityCode", value: cityCode) |
| | | .append(key: "storeId", value: storeId) |
| | | .append(key: "startTime", value: startTime) |
| | | .append(key: "endTime", value: endTime) |
| | | .append(key: "search", value: search) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 获取场地详情-时间表 |
| | | /// - Parameters: |
| | | /// - day: YYYY-MM-dd |
| | | static func querySiteTimes(id:Int,day:String,halfName:String?,siteName:String?)->Observable<BaseResponse<[SiteDetailDateTimeModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/site/querySiteTimes") |
| | | .append(key: "id", value: id) |
| | | .append(key: "day", value: day) |
| | | .append(key: "halfName", value: halfName) |
| | | .append(key: "siteName", value: siteName) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取场地详情 |
| | | static func querySiteDetail(id:Int)->Observable<BaseResponse<SiteDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/site/querySiteInfo") |
| | | .append(key: "id", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 预约场地支付 |
| | | static func reservationSite(booker:String,couponId:Int?,id:Int,payType:PayType,phone:String,times:String,halfName:String? = nil,isHalf:Int,nextName:String? = nil)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/reservationSite") |
| | | .append(key: "booker", value: booker) |
| | | .append(key: "couponId", value: couponId) |
| | | .append(key: "id", value: id) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "times", value: times) |
| | | .append(key: "halfName", value: halfName) |
| | | .append(key: "isHalf", value: isHalf) |
| | | .append(key: "nextName", value: nextName) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true,ignoreAlert: true) |
| | | } |
| | | /// 获取场地详情-时间表 |
| | | /// - Parameters: |
| | | /// - day: YYYY-MM-dd |
| | | static func querySiteTimes(id:Int,day:String,halfName:String?,siteName:String?)->Observable<BaseResponse<[SiteDetailDateTimeModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/site/querySiteTimes") |
| | | .append(key: "id", value: id) |
| | | .append(key: "day", value: day) |
| | | .append(key: "halfName", value: halfName) |
| | | .append(key: "siteName", value: siteName) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 获取优惠券列表 |
| | | static func querySiteCouponList(price:Double,siteId:Int)->Observable<BaseResponse<[CouponInfoModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/coupon/querySiteCouponList") |
| | | .append(key: "price", value: price.string) |
| | | .append(key: "siteId", value: siteId) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 预约场地支付 |
| | | static func reservationSite(booker:String,couponId:Int?,id:Int,payType:PayType,phone:String,times:String,halfName:String? = nil,isHalf:Int,nextName:String? = nil)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/reservationSite") |
| | | .append(key: "booker", value: booker) |
| | | .append(key: "couponId", value: couponId) |
| | | .append(key: "id", value: id) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "times", value: times) |
| | | .append(key: "halfName", value: halfName) |
| | | .append(key: "isHalf", value: isHalf) |
| | | .append(key: "nextName", value: nextName) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true,ignoreAlert: true) |
| | | } |
| | | |
| | | /// 获取优惠券列表 |
| | | static func querySiteCouponList(price:Double,siteId:Int)->Observable<BaseResponse<[CouponInfoModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/coupon/querySiteCouponList") |
| | | .append(key: "price", value: price.string) |
| | | .append(key: "siteId", value: siteId) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 获取我的预约场地列表 |
| | | class func queryMySite(page:Int,pageSize:Int = 20,status:YardBookingType?)->Observable<BaseResponse<[YardBookingModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/queryMySite") |
| | | .append(key: "pageNo", value: page) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "status", value: status?.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取我的预约场地列表 |
| | | class func queryMySite(page:Int,pageSize:Int = 20,status:YardBookingType?)->Observable<BaseResponse<[YardBookingModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/queryMySite") |
| | | .append(key: "pageNo", value: page) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "status", value: status?.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 获取继续支付场地金额 |
| | | class func continuePaymentPrice(id:Int)->Observable<BaseResponse<YardBookingContinuePriceModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/queryContinuePaymentMySitePrice") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取继续支付场地金额 |
| | | class func continuePaymentPrice(id:Int)->Observable<BaseResponse<YardBookingContinuePriceModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/queryContinuePaymentMySitePrice") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 继续支付 |
| | | class func continuePayment(id:Int,payType:PayType)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/continuePaymentMySite") |
| | | .append(key: "id", value: id) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | /// 继续支付 |
| | | class func continuePayment(id:Int,payType:PayType)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/continuePaymentMySite") |
| | | .append(key: "id", value: id) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | |
| | | } |
| | | } |
| | | |
| | | /// 取消我的预约 |
| | | class func cancelMySite(id:Int)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/cancelMySite") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 取消我的预约 |
| | | class func cancelMySite(id:Int)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/site/cancelMySite") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | // MARK: -- Activity |
| | | // MARK: -- Activity |
| | | extension Services{ |
| | | |
| | | /// 获取视频列表 |
| | | /// - Parameter position: 位置(1=线上课得积分,2=看视频得奖励) |
| | | class func benefitsVideoList(position:Int,search:String)->Observable<BaseResponse<[VideosModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/benefitsVideo/queryClassificationBenefitsVideosList") |
| | | .append(key: "position", value: position) |
| | | .append(key: "search", value: search) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取视频列表 |
| | | /// - Parameter position: 位置(1=线上课得积分,2=看视频得奖励) |
| | | class func benefitsVideoList(position:Int,search:String)->Observable<BaseResponse<[VideosModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/benefitsVideo/queryClassificationBenefitsVideosList") |
| | | .append(key: "position", value: position) |
| | | .append(key: "search", value: search) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 获取视频列表 |
| | | class func benefitsVideoSubList(classificationId:Int,pageNo:Int,pageSize:Int,search:String)->Observable<BaseResponse<[VideoDetailModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/benefitsVideo/queryBenefitsVideosList") |
| | | .append(key: "classificationId", value: classificationId) |
| | | .append(key: "pageNo", value: pageNo) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "search", value: search) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取视频列表 |
| | | class func benefitsVideoSubList(classificationId:Int,pageNo:Int,pageSize:Int,search:String)->Observable<BaseResponse<[VideoDetailModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/benefitsVideo/queryBenefitsVideosList") |
| | | .append(key: "classificationId", value: classificationId) |
| | | .append(key: "pageNo", value: pageNo) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "search", value: search) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | |
| | | /// 获取视频详情 |
| | | class func benefitsVideoDetail(id:Int)->Observable<BaseResponse<VideoDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/benefitsVideo/queryBenefitsVideosInfo") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取视频详情 |
| | | class func benefitsVideoDetail(id:Int)->Observable<BaseResponse<VideoDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/benefitsVideo/queryBenefitsVideosInfo") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | } |
| | | |
| | | // MARK: -- 活动赛事相关 |
| | | extension Services{ |
| | | |
| | | /// 获取赛事列表 |
| | | class func queryCompetitionList(cityCode:Int?,content:String?,heat:SortType?,registerCondition:Int?)->Observable<BaseResponse<[ActivityListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/base/competition/queryCompetitionList") |
| | | .append(key: "cityCode", value: cityCode) |
| | | .append(key: "content", value: content) |
| | | .append(key: "heat", value: heat?.rawValue) |
| | | .append(key: "registerCondition", value: registerCondition) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取赛事列表 |
| | | class func queryCompetitionList(cityCode:Int?,content:String?,heat:SortType?,registerCondition:Int?)->Observable<BaseResponse<[ActivityListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/base/competition/queryCompetitionList") |
| | | .append(key: "cityCode", value: cityCode) |
| | | .append(key: "content", value: content) |
| | | .append(key: "heat", value: heat?.rawValue) |
| | | .append(key: "registerCondition", value: registerCondition) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 获取赛事详情 |
| | | class func queryCompetitionDetail(id:Int)->Observable<BaseResponse<ActivityDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/base/competition/queryCompetitionInfo") |
| | | .append(key: "id", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取赛事详情 |
| | | class func queryCompetitionDetail(id:Int)->Observable<BaseResponse<ActivityDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/base/competition/queryCompetitionInfo") |
| | | .append(key: "id", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 获取已报名赛事列表 |
| | | class func queryMyCompetitionList(page:Int,pageSize:Int = 20,type:SignupType)->Observable<BaseResponse<[ActivityListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/api/competition/queryMyCompetitionList") |
| | | .append(key: "pageNo", value: page) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "type", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取已报名赛事列表 |
| | | class func queryMyCompetitionList(page:Int,pageSize:Int = 20,type:SignupType)->Observable<BaseResponse<[ActivityListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/api/competition/queryMyCompetitionList") |
| | | .append(key: "pageNo", value: page) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "type", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 获取参赛人员列表 |
| | | class func queryParticipantList(isAuth:Int? = nil)->Observable<BaseResponse<[ActivityDetailPartModel]>>{ |
| | | var params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/participant/queryParticipantList") |
| | | if isAuth == 1{ |
| | | params.append(key: "isPre", value: isAuth) |
| | | } |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | /// 获取参赛人员列表 |
| | | class func queryParticipantList(isAuth:Int? = nil)->Observable<BaseResponse<[ActivityDetailPartModel]>>{ |
| | | var params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/participant/queryParticipantList") |
| | | if isAuth == 1{ |
| | | params.append(key: "isPre", value: isAuth) |
| | | } |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 编辑参赛人员信息 |
| | | class func editParticipant(id:Int,height:Int,weight:Int,phone:String?,isStudent:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/participant/editParticipant") |
| | | .append(key: "id", value: id) |
| | | .append(key: "height", value: height) |
| | | .append(key: "weight", value: weight) |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "isStudent", value: isStudent) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 编辑参赛人员信息 |
| | | class func editParticipant(id:Int,height:Int,weight:Int,phone:String?,isStudent:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/participant/editParticipant") |
| | | .append(key: "id", value: id) |
| | | .append(key: "height", value: height) |
| | | .append(key: "weight", value: weight) |
| | | .append(key: "phone", value: phone) |
| | | .append(key: "isStudent", value: isStudent) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 添加参赛人员 |
| | | class func addParticipant(_ model:StudentProfileModel)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/participant/addParticipant") |
| | | .append(key: "birthday", value: model.birthday) |
| | | .append(key: "headImg", value: model.headImg) |
| | | .append(key: "height", value: model.height.string) |
| | | .append(key: "idcard", value: model.idCard) |
| | | .append(key: "name", value: model.name) |
| | | .append(key: "phone", value: model.phone) |
| | | .append(key: "gender", value: model.sex.rawValue) |
| | | .append(key: "weight", value: model.weight.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 添加参赛人员 |
| | | class func addParticipant(_ model:StudentProfileModel)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/participant/addParticipant") |
| | | .append(key: "birthday", value: model.birthday) |
| | | .append(key: "headImg", value: model.headImg) |
| | | .append(key: "height", value: model.height.string) |
| | | .append(key: "idcard", value: model.idCard) |
| | | .append(key: "name", value: model.name) |
| | | .append(key: "phone", value: model.phone) |
| | | .append(key: "gender", value: model.sex.rawValue) |
| | | .append(key: "weight", value: model.weight.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 编辑参赛人员 |
| | | class func editParticipant(_ model:ActivityDetailPartModel)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/api/participant/editParticipant") |
| | | .append(key: "id", value: model.id) |
| | | .append(key: "idcard", value: model.idcard) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 编辑参赛人员 |
| | | class func editParticipant(_ model:ActivityDetailPartModel)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/competition/api/participant/editParticipant") |
| | | .append(key: "id", value: model.id) |
| | | .append(key: "idcard", value: model.idcard) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 删除参赛人员 |
| | | class func deleParticipant(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/participant/delParticipant") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 删除参赛人员 |
| | | class func deleParticipant(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/participant/delParticipant") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 赛事报名 |
| | | class func paymentCompetition(id:Int,userIds:String,payType:PayType,coursePaymentId:Int? = nil)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/competition/paymentCompetition") |
| | | .append(key: "id", value: id) |
| | | .append(key: "ids", value: userIds) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | .append(key: "coursePaymentId", value: coursePaymentId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true,ignoreAlert: true) |
| | | } |
| | | /// 赛事报名 |
| | | class func paymentCompetition(id:Int,userIds:String,payType:PayType,coursePaymentId:Int? = nil)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/competition/paymentCompetition") |
| | | .append(key: "id", value: id) |
| | | .append(key: "ids", value: userIds) |
| | | .append(key: "payType", value: payType.rawValue) |
| | | .append(key: "coursePaymentId", value: coursePaymentId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true,ignoreAlert: true) |
| | | } |
| | | |
| | | /// 查询已报名赛事详情 |
| | | class func queryMyCompetitionInfo(id:Int)->Observable<BaseResponse<ActivityDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/competition/queryMyCompetitionInfo") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 查询已报名赛事详情 |
| | | class func queryMyCompetitionInfo(id:Int)->Observable<BaseResponse<ActivityDetailModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/competition/queryMyCompetitionInfo") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | /// 取消当前报名 |
| | | class func cancelMyCOmpetition(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/competition/cancelMyCompetition") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 取消当前报名 |
| | | class func cancelMyCOmpetition(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "competition/api/competition/cancelMyCompetition") |
| | | .append(key: "id", value: id) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | } |
| | | |
| | | // MARK: -- 其他 |
| | | // MARK: -- 其他 |
| | | extension Services{ |
| | | class func queryProtocol(_ type:AgreentType,progress:Bool = true)->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/protocol/queryProtocol") |
| | | .append(key: "type", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: progress) |
| | | } |
| | | class func queryProtocol(_ type:AgreentType,progress:Bool = true)->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/protocol/queryProtocol") |
| | | .append(key: "type", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: progress) |
| | | } |
| | | |
| | | class func querySystemImg(type:SystemImgType)->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/systemImg/querySystemImg") |
| | | .append(key: "position", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | class func querySystemImg(type:SystemImgType)->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/systemImg/querySystemImg") |
| | | .append(key: "position", value: type.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func enrollMember(paytype:PayType)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/appUser/addVipPayment") |
| | | .append(key: "payType", value: paytype.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | class func enrollMember(paytype:PayType)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/account/api/appUser/addVipPayment") |
| | | .append(key: "payType", value: paytype.rawValue) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 获取省市数据 |
| | | class func queryProvinceAndCity(pcode:Int? = nil)->Observable<BaseResponse<[CityProfileModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryProvinceAndCity") |
| | | .append(key: "pcode", value: pcode) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取省市数据 |
| | | class func queryProvinceAndCity(pcode:Int? = nil)->Observable<BaseResponse<[CityProfileModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryProvinceAndCity") |
| | | .append(key: "pcode", value: pcode) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 获取城市code获取门店 |
| | | class func queryStoreAtCity(cityCode:Int?,provinceCode:Int)->Observable<BaseResponse<[CityProfileModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryStoreByCityCode") |
| | | .append(key: "cityCode", value: cityCode) |
| | | .append(key: "provinceCode", value: provinceCode) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取城市code获取门店 |
| | | class func queryStoreAtCity(cityCode:Int?,provinceCode:Int)->Observable<BaseResponse<[CityProfileModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryStoreByCityCode") |
| | | .append(key: "cityCode", value: cityCode) |
| | | .append(key: "provinceCode", value: provinceCode) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 获取全部城市 |
| | | class func queryAllCity()->Observable<BaseResponse<[CityProfileModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryAllCity") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | } |
| | | |
| | | //2.0 |
| | | extension Services{ |
| | | /// 获取平台配置模块详情 |
| | | class func getHomeModule()->Observable<BaseResponse<BannerModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/homeModule/getHomeModule") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | /// 获取全部城市 |
| | | class func queryAllCity()->Observable<BaseResponse<[CityProfileModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/store/queryAllCity") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | /// 获取世界杯列表 |
| | | /// - Parameters: |
| | | /// - id: 当前门店id |
| | | /// - content: 当前内容 |
| | | /// - gender:报名条件(0=全部,1=男,2=女 |
| | | /// - sort: 热度排序(1=正序,2=降序) |
| | | /// - storeId: 所在赛点 |
| | | class func worldCupList(id:Int,content:String?,gender:Int?,sort:Int?,storeId:Int?)->Observable<BaseResponse<[WorldCupListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/communityWorldCup/api/worldCup/getWorldCupList") |
| | | .append(key: "id", value: id) |
| | | .append(key: "content", value: content) |
| | | .append(key: "gender", value: gender) |
| | | .append(key: "storeId", value: storeId) |
| | | .append(key: "sort", value: sort) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | } |
| | | |
| | | extension Services{ |
| | | static func startNetworkMonitor(){ |
| | | let manager = NetworkReachabilityManager(host: All_Url) |
| | | manager?.startListening(onUpdatePerforming: { status in |
| | | switch status { |
| | | case .notReachable:alertError(msg: "当前网络不可用") |
| | | case .reachable(let type): |
| | | switch type{ |
| | | case .ethernetOrWiFi:alert(msg: "当前为Wi-Fi网络") |
| | | case .cellular:alert(msg: "当前为移动网络") |
| | | } |
| | | default:break |
| | | } |
| | | }) |
| | | |
| | | } |
| | | static func startNetworkMonitor(){ |
| | | let manager = NetworkReachabilityManager(host: All_Url) |
| | | manager?.startListening(onUpdatePerforming: { status in |
| | | switch status { |
| | | case .notReachable:alertError(msg: "当前网络不可用") |
| | | case .reachable(let type): |
| | | switch type{ |
| | | case .ethernetOrWiFi:alert(msg: "当前为Wi-Fi网络") |
| | | case .cellular:alert(msg: "当前为移动网络") |
| | | } |
| | | default:break |
| | | } |
| | | }) |
| | | } |
| | | } |
| | |
| | | class ActivityDetailApplyVC: BaseVC { |
| | | |
| | | |
| | | @IBOutlet weak var view_banner: UIView! |
| | | @IBOutlet weak var label_storeNames: UILabel! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_joinCondition: UILabel! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_duetime: UILabel! |
| | | @IBOutlet weak var label_starttime: UILabel! |
| | | @IBOutlet weak var label_endtime: UILabel! |
| | | @IBOutlet weak var label_ageScope: UILabel! |
| | | @IBOutlet weak var label_city: UILabel! |
| | | @IBOutlet weak var label_money: UILabel! |
| | | @IBOutlet weak var label_coin: UILabel! |
| | | @IBOutlet weak var label_courseNum: UILabel! |
| | | @IBOutlet weak var label_introducion: UILabel! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | @IBOutlet weak var tableView: UITableView! |
| | | @IBOutlet weak var btn_addStudent: QMUIButton! |
| | | @IBOutlet weak var cons_tableHei: NSLayoutConstraint! |
| | | @IBOutlet weak var label_matchStore: UILabel! |
| | | @IBOutlet weak var btn_moreMatchStore: UIButton! |
| | | @IBOutlet weak var view_banner: UIView! |
| | | @IBOutlet weak var label_storeNames: UILabel! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_joinCondition: UILabel! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_duetime: UILabel! |
| | | @IBOutlet weak var label_starttime: UILabel! |
| | | @IBOutlet weak var label_endtime: UILabel! |
| | | @IBOutlet weak var label_ageScope: UILabel! |
| | | @IBOutlet weak var label_city: UILabel! |
| | | @IBOutlet weak var label_money: UILabel! |
| | | @IBOutlet weak var label_coin: UILabel! |
| | | @IBOutlet weak var label_courseNum: UILabel! |
| | | @IBOutlet weak var label_introducion: UILabel! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | @IBOutlet weak var tableView: UITableView! |
| | | @IBOutlet weak var btn_addStudent: QMUIButton! |
| | | @IBOutlet weak var cons_tableHei: NSLayoutConstraint! |
| | | @IBOutlet weak var label_matchStore: UILabel! |
| | | @IBOutlet weak var btn_moreMatchStore: UIButton! |
| | | |
| | | @IBOutlet weak var view_money: UIView! |
| | | @IBOutlet weak var view_coin: UIView! |
| | | @IBOutlet weak var view_courseNum: UIView! |
| | | @IBOutlet weak var view_money: UIView! |
| | | @IBOutlet weak var view_coin: UIView! |
| | | @IBOutlet weak var view_courseNum: UIView! |
| | | |
| | | private lazy var bannerView:CommonBannerView = { |
| | | let v = CommonBannerView() |
| | | return v |
| | | }() |
| | | private lazy var bannerView:CommonBannerView = { |
| | | let v = CommonBannerView() |
| | | return v |
| | | }() |
| | | |
| | | var activityDetailModel:ActivityDetailModel! |
| | | private var students = [ActivityDetailPartModel]() |
| | | var activityDetailModel:ActivityDetailModel! |
| | | private var students = [ActivityDetailPartModel]() |
| | | |
| | | required init(model:ActivityDetailModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.activityDetailModel = model |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "活动详情" |
| | | |
| | | label_storeNames.text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",") |
| | | btn_moreMatchStore.isHidden = (label_storeNames.text?.count ?? 0) < 50 |
| | | |
| | | label_title.text = activityDetailModel.name |
| | | label_joinCondition.text = activityDetailModel.registerCondition.strTitle + "参与" |
| | | label_address.text = activityDetailModel.address |
| | | label_duetime.text = activityDetailModel.registerEndTime |
| | | label_starttime.text = activityDetailModel.startTime |
| | | label_endtime.text = activityDetailModel.endTime |
| | | label_ageScope.text = activityDetailModel.age + "岁" |
| | | label_introducion.text = activityDetailModel.introduction |
| | | label_city.isHidden = activityDetailModel.province.isEmpty || activityDetailModel.city.isEmpty |
| | | label_city.text = activityDetailModel.province + "|" + activityDetailModel.city |
| | | label_money.text = String(format: "%@/人", activityDetailModel.cashPrice.currency()) |
| | | label_coin.text = String(format: "%ld币/人", activityDetailModel.playPaiCoin) |
| | | label_courseNum.text = String(format: "%ld课时/人", activityDetailModel.classPrice) |
| | | |
| | | view_money.isHidden = activityDetailModel.cashPrice == 0 |
| | | view_courseNum.isHidden = activityDetailModel.classPrice == 0 |
| | | view_coin.isHidden = activityDetailModel.playPaiCoin == 0 |
| | | |
| | | students.append(contentsOf: activityDetailModel.participant) |
| | | cons_tableHei.constant = Double(students.count) * 100 |
| | | tableView.reloadData() |
| | | |
| | | let imgs = activityDetailModel.imgs.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | bannerView.setItems(items: items) |
| | | } |
| | | |
| | | override func setUI() { |
| | | btn_addStudent.imagePosition = .right |
| | | btn_addStudent.spacingBetweenImageAndTitle = 4 |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "StudentInfo_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_TCell") |
| | | |
| | | view_banner.addSubview(bannerView) |
| | | bannerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.56) |
| | | |
| | | let moreBtnAttributeding = AttributedStringbuilder.build().add(string: "查看更多", withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString |
| | | btn_moreMatchStore.setAttributedTitle(moreBtnAttributeding, for: .normal) |
| | | } |
| | | |
| | | @IBAction func matchStoreAction(_ sender: UIButton) { |
| | | let text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",") |
| | | AgreentView.show(type: .matchStore, content: text) |
| | | } |
| | | |
| | | @IBAction func addStudentAction(_ sender: QMUIButton) { |
| | | StudentChooseView.show(itemType: .activity, defaultStu: students,isAuth: activityDetailModel.isReal) { [weak self] studs in |
| | | self?.students = studs as! [ActivityDetailPartModel] |
| | | self?.cons_tableHei.constant = Double(self?.students.count ?? 0) * 100 |
| | | self?.tableView.reloadData() |
| | | } needAddClouse: {[weak self] () in |
| | | let vc = ActivityStudentListVC() |
| | | self?.push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | @IBAction func applyAction(_ sender: UIButton) { |
| | | |
| | | guard students.count != 0 else { |
| | | alertError(msg: "请至少选择一位活动人员");return |
| | | } |
| | | |
| | | |
| | | if activityDetailModel.storeInfos.count > 1{ |
| | | let a = activityDetailModel.storeInfos.map({$0.name}) |
| | | StoresInfo_2_View.show(a) {[weak self] status in |
| | | guard let weakSelf = self else { return } |
| | | |
| | | let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count) |
| | | let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count |
| | | let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count |
| | | |
| | | if status{ |
| | | let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false |
| | | //零元购 |
| | | if price == 0 && coin == 0 && course == 0{ |
| | | weakSelf.payment(type: .coin,paymentId: 0) |
| | | return |
| | | } |
| | | |
| | | PaymentView.show(enumType: .activity, money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in |
| | | guard let weakSelf = self else { return } |
| | | if type == .courseNum{ |
| | | PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in |
| | | weakSelf.payment(type: type,paymentId: id) |
| | | } |
| | | }else{ |
| | | weakSelf.payment(type: type) |
| | | } |
| | | } |
| | | }else{ |
| | | weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: { |
| | | NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) |
| | | }) |
| | | required init(model:ActivityDetailModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.activityDetailModel = model |
| | | } |
| | | } |
| | | }else{ |
| | | StoresInfoView.show(activityDetailModel.storeInfos.first!) { [weak self] status in |
| | | guard let weakSelf = self else { return } |
| | | |
| | | let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count) |
| | | let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count |
| | | let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count |
| | | |
| | | if status{ |
| | | //零元购 |
| | | if price == 0 && coin == 0 && course == 0{ |
| | | weakSelf.payment(type: .coin,paymentId: 0) |
| | | return |
| | | } |
| | | |
| | | let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false |
| | | PaymentView.show(enumType: .activity, money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in |
| | | guard let weakSelf = self else { return } |
| | | if type == .courseNum{ |
| | | PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in |
| | | weakSelf.payment(type: type,paymentId: id) |
| | | } |
| | | }else{ |
| | | weakSelf.payment(type: type) |
| | | } |
| | | } |
| | | }else{ |
| | | weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: { |
| | | NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) |
| | | }) |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private func payment(type:PayType,paymentId:Int? = nil){ |
| | | let ids = students.map({"\($0.id)"}).joined(separator: ";") |
| | | Services.paymentCompetition(id: activityDetailModel.id, userIds: ids, payType: type,coursePaymentId: paymentId).subscribe(onNext: {[weak self] data in |
| | | NotificationCenter.default.post(name: StudentRefresh_Nofi, object: nil) |
| | | if let m = data.data{ |
| | | switch type { |
| | | case .aliPay: |
| | | let req = YYAlipayRequest(orderString: m.orderString) |
| | | YYPaymentManager.shared.sendPaymentRequest(req) { result in |
| | | switch result { |
| | | case .success: |
| | | let vc = PaymentResultVC(result: .success, objType: .activityApply) |
| | | self?.push(vc: vc) |
| | | case .cancel: |
| | | alert(msg: "已取消") |
| | | case .failure(_): |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .activityApply) |
| | | self?.push(vc: vc) |
| | | } |
| | | } |
| | | case .wechat:break |
| | | case .coin,.free: |
| | | let vc = PaymentResultVC(result: .success, objType: .activityApply) |
| | | self?.push(vc: vc) |
| | | case .courseNum: |
| | | let vc = PaymentResultVC(result: .success, objType: .activityApply) |
| | | self?.push(vc: vc) |
| | | default:break |
| | | |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "活动详情" |
| | | |
| | | label_storeNames.text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",") |
| | | btn_moreMatchStore.isHidden = (label_storeNames.text?.count ?? 0) < 50 |
| | | |
| | | label_title.text = activityDetailModel.name |
| | | label_joinCondition.text = activityDetailModel.registerCondition.strTitle + "参与" |
| | | label_address.text = activityDetailModel.address |
| | | label_duetime.text = activityDetailModel.registerEndTime |
| | | label_starttime.text = activityDetailModel.startTime |
| | | label_endtime.text = activityDetailModel.endTime |
| | | label_ageScope.text = activityDetailModel.age + "岁" |
| | | label_introducion.text = activityDetailModel.introduction |
| | | label_city.isHidden = activityDetailModel.province.isEmpty || activityDetailModel.city.isEmpty |
| | | label_city.text = activityDetailModel.province + "|" + activityDetailModel.city |
| | | label_money.text = String(format: "%@/人", activityDetailModel.cashPrice.currency()) |
| | | label_coin.text = String(format: "%ld币/人", activityDetailModel.playPaiCoin) |
| | | label_courseNum.text = String(format: "%ld课时/人", activityDetailModel.classPrice) |
| | | |
| | | view_money.isHidden = activityDetailModel.cashPrice == 0 |
| | | view_courseNum.isHidden = activityDetailModel.classPrice == 0 |
| | | view_coin.isHidden = activityDetailModel.playPaiCoin == 0 |
| | | |
| | | students.append(contentsOf: activityDetailModel.participant) |
| | | cons_tableHei.constant = Double(students.count) * 100 |
| | | tableView.reloadData() |
| | | |
| | | let imgs = activityDetailModel.imgs.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | bannerView.setItems(items: items) |
| | | } |
| | | } |
| | | },onError: {[weak self] error in |
| | | if let er = error as? NetworkRequest.NetRequestError{ |
| | | switch er { |
| | | case .Other(let code,let string): |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .yard,handleVC: nil) |
| | | self?.push(vc: vc) |
| | | default: |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .yard,handleVC: nil) |
| | | self?.push(vc: vc) |
| | | |
| | | override func setUI() { |
| | | btn_addStudent.imagePosition = .right |
| | | btn_addStudent.spacingBetweenImageAndTitle = 4 |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "StudentInfo_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_TCell") |
| | | |
| | | view_banner.addSubview(bannerView) |
| | | bannerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.56) |
| | | |
| | | let moreBtnAttributeding = AttributedStringbuilder.build().add(string: "查看更多", withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString |
| | | btn_moreMatchStore.setAttributedTitle(moreBtnAttributeding, for: .normal) |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func matchStoreAction(_ sender: UIButton) { |
| | | let text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",") |
| | | AgreentView.show(type: .matchStore, content: text) |
| | | } |
| | | |
| | | @IBAction func addStudentAction(_ sender: QMUIButton) { |
| | | StudentChooseView.show(itemType: .activity, defaultStu: students,isAuth: activityDetailModel.isReal) { [weak self] studs in |
| | | self?.students = studs as! [ActivityDetailPartModel] |
| | | self?.cons_tableHei.constant = Double(self?.students.count ?? 0) * 100 |
| | | self?.tableView.reloadData() |
| | | } needAddClouse: {[weak self] () in |
| | | let vc = ActivityStudentListVC() |
| | | self?.push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | @IBAction func applyAction(_ sender: UIButton) { |
| | | |
| | | guard students.count != 0 else { |
| | | alertError(msg: "请至少选择一位活动人员");return |
| | | } |
| | | |
| | | |
| | | if activityDetailModel.storeInfos.count > 1{ |
| | | let a = activityDetailModel.storeInfos.map({$0.name}) |
| | | StoresInfo_2_View.show(a) {[weak self] status in |
| | | guard let weakSelf = self else { return } |
| | | |
| | | let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count) |
| | | let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count |
| | | let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count |
| | | |
| | | if status{ |
| | | let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false |
| | | //零元购 |
| | | if price == 0 && coin == 0 && course == 0{ |
| | | weakSelf.payment(type: .coin,paymentId: 0) |
| | | return |
| | | } |
| | | |
| | | PaymentView.show(enumType: .activity, money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in |
| | | guard let weakSelf = self else { return } |
| | | if type == .courseNum{ |
| | | PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in |
| | | weakSelf.payment(type: type,paymentId: id) |
| | | } |
| | | }else{ |
| | | weakSelf.payment(type: type) |
| | | } |
| | | } |
| | | }else{ |
| | | weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: { |
| | | NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) |
| | | }) |
| | | } |
| | | } |
| | | }else{ |
| | | StoresInfoView.show(activityDetailModel.storeInfos.first!) { [weak self] status in |
| | | guard let weakSelf = self else { return } |
| | | |
| | | let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count) |
| | | let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count |
| | | let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count |
| | | |
| | | if status{ |
| | | //零元购 |
| | | if price == 0 && coin == 0 && course == 0{ |
| | | weakSelf.payment(type: .coin,paymentId: 0) |
| | | return |
| | | } |
| | | |
| | | let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false |
| | | PaymentView.show(enumType: .activity, money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in |
| | | guard let weakSelf = self else { return } |
| | | if type == .courseNum{ |
| | | PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in |
| | | weakSelf.payment(type: type,paymentId: id) |
| | | } |
| | | }else{ |
| | | weakSelf.payment(type: type) |
| | | } |
| | | } |
| | | }else{ |
| | | weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: { |
| | | NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private func payment(type:PayType,paymentId:Int? = nil){ |
| | | let ids = students.map({"\($0.id)"}).joined(separator: ";") |
| | | Services.paymentCompetition(id: activityDetailModel.id, userIds: ids, payType: type,coursePaymentId: paymentId).subscribe(onNext: {[weak self] data in |
| | | NotificationCenter.default.post(name: StudentRefresh_Nofi, object: nil) |
| | | if let m = data.data{ |
| | | switch type { |
| | | case .aliPay: |
| | | let req = YYAlipayRequest(orderString: m.orderString) |
| | | YYPaymentManager.shared.sendPaymentRequest(req) { result in |
| | | switch result { |
| | | case .success: |
| | | let vc = PaymentResultVC(result: .success, objType: .activityApply) |
| | | self?.push(vc: vc) |
| | | case .cancel: |
| | | alert(msg: "已取消") |
| | | case .failure(_): |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .activityApply) |
| | | self?.push(vc: vc) |
| | | } |
| | | } |
| | | case .wechat:break |
| | | case .coin,.free: |
| | | let vc = PaymentResultVC(result: .success, objType: .activityApply) |
| | | self?.push(vc: vc) |
| | | case .courseNum: |
| | | let vc = PaymentResultVC(result: .success, objType: .activityApply) |
| | | self?.push(vc: vc) |
| | | default:break |
| | | } |
| | | } |
| | | },onError: {[weak self] error in |
| | | if let er = error as? NetworkRequest.NetRequestError{ |
| | | switch er { |
| | | case .Other(let code,let string): |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .yard,handleVC: nil) |
| | | self?.push(vc: vc) |
| | | default: |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .yard,handleVC: nil) |
| | | self?.push(vc: vc) |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | | extension ActivityDetailApplyVC:UITableViewDelegate{ |
| | | |
| | | |
| | | } |
| | | |
| | | extension ActivityDetailApplyVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let student = students[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentInfo_2_TCell") as! StudentInfo_2_TCell |
| | | cell.indexPath = indexPath |
| | | cell.activityDetailPartModel = student |
| | | cell.btn_edit.isHidden = true |
| | | cell.img_radio.isHidden = true |
| | | cell.delClouse = {[weak self] index in |
| | | tableView.beginUpdates() |
| | | self?.students.remove(at: index.row) |
| | | tableView.deleteItemsAtIndexPaths([index], animationStyle: .automatic) |
| | | tableView.endUpdates() |
| | | tableView.reloadData() |
| | | self?.cons_tableHei.constant = Double(self?.students.count ?? 0) * 100 |
| | | } |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let student = students[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentInfo_2_TCell") as! StudentInfo_2_TCell |
| | | cell.indexPath = indexPath |
| | | cell.activityDetailPartModel = student |
| | | cell.btn_edit.isHidden = true |
| | | cell.img_radio.isHidden = true |
| | | cell.delClouse = {[weak self] index in |
| | | tableView.beginUpdates() |
| | | self?.students.remove(at: index.row) |
| | | tableView.deleteItemsAtIndexPaths([index], animationStyle: .automatic) |
| | | tableView.endUpdates() |
| | | tableView.reloadData() |
| | | self?.cons_tableHei.constant = Double(self?.students.count ?? 0) * 100 |
| | | } |
| | | |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return students.count |
| | | } |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return students.count |
| | | } |
| | | } |
| | |
| | | import JQTools |
| | | |
| | | class ActivityDetailVC: BaseVC { |
| | | private var id:Int! |
| | | private var id:Int! |
| | | |
| | | @IBOutlet weak var view_banner: UIView! |
| | | @IBOutlet weak var label_storeNames: UILabel! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_joinCondition: UILabel! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_duetime: UILabel! |
| | | @IBOutlet weak var label_starttime: UILabel! |
| | | @IBOutlet weak var label_endtime: UILabel! |
| | | @IBOutlet weak var label_ageScope: UILabel! |
| | | @IBOutlet weak var label_city: UILabel! |
| | | @IBOutlet weak var label_money: UILabel! |
| | | @IBOutlet weak var label_coin: UILabel! |
| | | @IBOutlet weak var label_courseNum: UILabel! |
| | | @IBOutlet weak var label_introducion: UILabel! |
| | | @IBOutlet weak var img_enrollRequired: UIImageView! |
| | | @IBOutlet weak var cons_imgEnrollHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | @IBOutlet weak var label_matchStore: UILabel! |
| | | @IBOutlet weak var btn_moreMatchStore: UIButton! |
| | | @IBOutlet weak var view_banner: UIView! |
| | | @IBOutlet weak var label_storeNames: UILabel! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_joinCondition: UILabel! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_duetime: UILabel! |
| | | @IBOutlet weak var label_starttime: UILabel! |
| | | @IBOutlet weak var label_endtime: UILabel! |
| | | @IBOutlet weak var label_ageScope: UILabel! |
| | | @IBOutlet weak var label_city: UILabel! |
| | | @IBOutlet weak var label_money: UILabel! |
| | | @IBOutlet weak var label_coin: UILabel! |
| | | @IBOutlet weak var label_courseNum: UILabel! |
| | | @IBOutlet weak var label_introducion: UILabel! |
| | | @IBOutlet weak var img_enrollRequired: UIImageView! |
| | | @IBOutlet weak var cons_imgEnrollHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | @IBOutlet weak var label_matchStore: UILabel! |
| | | @IBOutlet weak var btn_moreMatchStore: UIButton! |
| | | |
| | | @IBOutlet weak var view_money: UIView! |
| | | @IBOutlet weak var view_coin: UIView! |
| | | @IBOutlet weak var view_courseNum: UIView! |
| | | @IBOutlet weak var view_money: UIView! |
| | | @IBOutlet weak var view_coin: UIView! |
| | | @IBOutlet weak var view_courseNum: UIView! |
| | | |
| | | private lazy var bannerView:CommonBannerView = { |
| | | let v = CommonBannerView() |
| | | return v |
| | | }() |
| | | private lazy var bannerView:CommonBannerView = { |
| | | let v = CommonBannerView() |
| | | return v |
| | | }() |
| | | |
| | | var activityDetailModel:ActivityDetailModel!{ |
| | | didSet{ |
| | | label_storeNames.text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",") |
| | | btn_moreMatchStore.isHidden = (label_storeNames.text?.count ?? 0) < 50 |
| | | var activityDetailModel:ActivityDetailModel!{ |
| | | didSet{ |
| | | label_storeNames.text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",") |
| | | btn_moreMatchStore.isHidden = (label_storeNames.text?.count ?? 0) < 50 |
| | | |
| | | label_title.text = activityDetailModel.name |
| | | label_joinCondition.text = activityDetailModel.registerCondition.strTitle + "参与" |
| | | label_address.text = activityDetailModel.address |
| | | label_duetime.text = activityDetailModel.registerEndTime |
| | | label_starttime.text = activityDetailModel.startTime |
| | | label_endtime.text = activityDetailModel.endTime |
| | | label_ageScope.text = activityDetailModel.age + "岁" |
| | | label_introducion.text = activityDetailModel.introduction |
| | | label_city.isHidden = activityDetailModel.province.isEmpty || activityDetailModel.city.isEmpty |
| | | label_city.text = activityDetailModel.province + "|" + activityDetailModel.city |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: activityDetailModel.registrationNotes)!) {[weak self] image, data, error, status in |
| | | guard let img = image else { |
| | | self?.cons_imgEnrollHei.constant = 0;return |
| | | } |
| | | label_title.text = activityDetailModel.name |
| | | label_joinCondition.text = activityDetailModel.registerCondition.strTitle + "参与" |
| | | label_address.text = activityDetailModel.address |
| | | label_duetime.text = activityDetailModel.registerEndTime |
| | | label_starttime.text = activityDetailModel.startTime |
| | | label_endtime.text = activityDetailModel.endTime |
| | | label_ageScope.text = activityDetailModel.age + "岁" |
| | | label_introducion.text = activityDetailModel.introduction |
| | | label_city.isHidden = activityDetailModel.province.isEmpty || activityDetailModel.city.isEmpty |
| | | label_city.text = activityDetailModel.province + "|" + activityDetailModel.city |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: activityDetailModel.registrationNotes)!) {[weak self] image, data, error, status in |
| | | guard let img = image else { |
| | | self?.cons_imgEnrollHei.constant = 0;return |
| | | } |
| | | |
| | | let radio = img.size.width / img.size.height |
| | | self?.cons_imgEnrollHei.constant = JQ_ScreenW / radio |
| | | self?.img_enrollRequired.image = img |
| | | } |
| | | let radio = img.size.width / img.size.height |
| | | self?.cons_imgEnrollHei.constant = JQ_ScreenW / radio |
| | | self?.img_enrollRequired.image = img |
| | | } |
| | | |
| | | view_money.isHidden = activityDetailModel.cashPrice == 0 |
| | | view_courseNum.isHidden = activityDetailModel.classPrice == 0 |
| | | view_coin.isHidden = activityDetailModel.playPaiCoin == 0 |
| | | view_money.isHidden = activityDetailModel.cashPrice == 0 |
| | | view_courseNum.isHidden = activityDetailModel.classPrice == 0 |
| | | view_coin.isHidden = activityDetailModel.playPaiCoin == 0 |
| | | |
| | | label_money.text = String(format: "%@/人", activityDetailModel.cashPrice.currency()) |
| | | label_coin.text = String(format: "%ld币/人", activityDetailModel.playPaiCoin) |
| | | label_courseNum.text = String(format: "%ld课时/人", activityDetailModel.classPrice) |
| | | label_money.text = String(format: "%@/人", activityDetailModel.cashPrice.currency()) |
| | | label_coin.text = String(format: "%ld币/人", activityDetailModel.playPaiCoin) |
| | | label_courseNum.text = String(format: "%ld课时/人", activityDetailModel.classPrice) |
| | | |
| | | if activityDetailModel.hasPass == 1{ |
| | | btn_enroll.setTitle("报名已截止", for: .normal) |
| | | btn_enroll.backgroundColor = UIColor.gray.withAlphaComponent(0.5) |
| | | btn_enroll.isEnabled = false |
| | | } |
| | | if activityDetailModel.hasPass == 1{ |
| | | btn_enroll.setTitle("报名已截止", for: .normal) |
| | | btn_enroll.backgroundColor = UIColor.gray.withAlphaComponent(0.5) |
| | | btn_enroll.isEnabled = false |
| | | } |
| | | |
| | | let imgs = activityDetailModel.imgs.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | bannerView.setItems(items: items) |
| | | } |
| | | } |
| | | let imgs = activityDetailModel.imgs.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | bannerView.setItems(items: items) |
| | | } |
| | | } |
| | | |
| | | |
| | | required init(id:Int) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.id = id |
| | | } |
| | | required init(id:Int) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.id = id |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "活动详情" |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "活动详情" |
| | | |
| | | Services.queryCompetitionDetail(id: id).subscribe(onNext: {[weak self] data in |
| | | if let data = data.data{ |
| | | self?.activityDetailModel = data |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | Services.queryCompetitionDetail(id: id).subscribe(onNext: {[weak self] data in |
| | | if let data = data.data{ |
| | | self?.activityDetailModel = data |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setUI() { |
| | | view_banner.addSubview(bannerView) |
| | | bannerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.56) |
| | | override func setUI() { |
| | | view_banner.addSubview(bannerView) |
| | | bannerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.56) |
| | | |
| | | let moreBtnAttributeding = AttributedStringbuilder.build().add(string: "查看更多", withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString |
| | | btn_moreMatchStore.setAttributedTitle(moreBtnAttributeding, for: .normal) |
| | | } |
| | | let moreBtnAttributeding = AttributedStringbuilder.build().add(string: "查看更多", withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString |
| | | btn_moreMatchStore.setAttributedTitle(moreBtnAttributeding, for: .normal) |
| | | } |
| | | |
| | | @IBAction func matchStoreAction(_ sender: UIButton) { |
| | | let text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",") |
| | | AgreentView.show(type: .matchStore, content: text) |
| | | } |
| | | @IBAction func matchStoreAction(_ sender: UIButton) { |
| | | let text = activityDetailModel.storeInfos.map({$0.name}).joined(separator: ",") |
| | | AgreentView.show(type: .matchStore, content: text) |
| | | } |
| | | |
| | | @IBAction func joinAction(_ sender: UIButton) { |
| | | let vc = ActivityDetailApplyVC(model: activityDetailModel) |
| | | push(vc: vc) |
| | | } |
| | | @IBAction func joinAction(_ sender: UIButton) { |
| | | let vc = ActivityDetailApplyVC(model: activityDetailModel) |
| | | push(vc: vc) |
| | | } |
| | | } |
| | |
| | | |
| | | class ActivityListViewModel:RefreshModel<ActivityListModel>{ |
| | | |
| | | var cityCode = BehaviorRelay<Int?>(value:nil) |
| | | var content = BehaviorRelay<String>(value: "") |
| | | var heat = BehaviorRelay<SortType?>(value:nil) |
| | | var registerCondition = BehaviorRelay<RegisterAcitivyType?>(value:nil) |
| | | var cityCode = BehaviorRelay<Int?>(value:nil) |
| | | var content = BehaviorRelay<String>(value: "") |
| | | var heat = BehaviorRelay<SortType?>(value:nil) |
| | | var registerCondition = BehaviorRelay<RegisterAcitivyType?>(value:nil) |
| | | |
| | | override func api() -> (Observable<BaseResponse<[ActivityListModel]>>)? { |
| | | return Services.queryCompetitionList(cityCode: cityCode.value, content: content.value, heat: heat.value, registerCondition: registerCondition.value?.rawValue) |
| | | } |
| | | override func api() -> (Observable<BaseResponse<[ActivityListModel]>>)? { |
| | | return Services.queryCompetitionList(cityCode: cityCode.value, content: content.value, heat: heat.value, registerCondition: registerCondition.value?.rawValue) |
| | | } |
| | | } |
| | | |
| | | class ActivityListVC: BaseVC { |
| | | @IBOutlet weak var view_top: UIView! |
| | | @IBOutlet weak var tf_search: QMUITextField! |
| | | @IBOutlet weak var btn_holdCity: QMUIButton! |
| | | @IBOutlet weak var btn_joinCondition: QMUIButton! |
| | | @IBOutlet weak var btn_hotFilter: QMUIButton! |
| | | @IBOutlet weak var tableView: BaseTableView! |
| | | @IBOutlet weak var view_top: UIView! |
| | | @IBOutlet weak var tf_search: QMUITextField! |
| | | @IBOutlet weak var btn_holdCity: QMUIButton! |
| | | @IBOutlet weak var btn_joinCondition: QMUIButton! |
| | | @IBOutlet weak var btn_hotFilter: QMUIButton! |
| | | @IBOutlet weak var tableView: BaseTableView! |
| | | |
| | | private var courseSubTypeView:CourseSubTypeView? |
| | | private var cityChooseSubTypeView:CityChooseSubTypeView? |
| | | private var courseSubTypeView:CourseSubTypeView? |
| | | private var cityChooseSubTypeView:CityChooseSubTypeView? |
| | | |
| | | private var viewModel = ActivityListViewModel() |
| | | private var selectSignupConditionModel:NormalSimpleModel? |
| | | private var cityModel:HomeStoreModel? |
| | | private var viewModel = ActivityListViewModel() |
| | | private var selectSignupConditionModel:NormalSimpleModel? |
| | | private var cityModel:HomeStoreModel? |
| | | |
| | | init(cityModel:HomeStoreModel? = nil){ |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.cityModel = cityModel |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "活动列表" |
| | | if cityModel != nil{ |
| | | btn_holdCity.setTitle(cityModel!.city, for: .normal) |
| | | viewModel.cityCode.accept(cityModel!.cityCode) |
| | | } |
| | | viewModel.configure(tableView,needMore: false) |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tf_search.delegate = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "ActivityInfoTCell", bundle: nil), forCellReuseIdentifier: "_ActivityInfoTCell") |
| | | // tableView.jq_setEmptyView() |
| | | |
| | | btn_holdCity.imagePosition = .right |
| | | btn_holdCity.spacingBetweenImageAndTitle = 5 |
| | | |
| | | btn_joinCondition.imagePosition = .right |
| | | btn_joinCondition.spacingBetweenImageAndTitle = 5 |
| | | |
| | | btn_hotFilter.imagePosition = .right |
| | | btn_hotFilter.spacingBetweenImageAndTitle = 5 |
| | | } |
| | | init(cityModel:HomeStoreModel? = nil){ |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.cityModel = cityModel |
| | | } |
| | | |
| | | override func setRx() { |
| | | tf_search.rx.text.orEmpty.changed.bind(to: viewModel.content).disposed(by: disposeBag) |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | } |
| | | |
| | | @IBAction func searchAction(_ sender: Any) { |
| | | tf_search.resignFirstResponder() |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | @IBAction func holdCityAction(_ sender: QMUIButton) { |
| | | view.endEditing(true) |
| | | guard !sender.isSelected else {return} |
| | | hiddenMenu() |
| | | sender.isSelected = true |
| | | cityChooseSubTypeView = CityChooseSubTypeView.show(inView: self.view, afterView: view_top) { [weak self] m in |
| | | sender.setTitle(m.name, for: .normal) |
| | | self?.viewModel.cityCode.accept(m.code) |
| | | self?.viewModel.beginRefresh() |
| | | sender.isSelected = false |
| | | } closeClouse: { |
| | | sender.isSelected = false |
| | | } |
| | | } |
| | | |
| | | @IBAction func signupConditionAction(_ sender: QMUIButton) { |
| | | view.endEditing(true) |
| | | guard !sender.isSelected else {return} |
| | | hiddenMenu() |
| | | sender.isSelected = true |
| | | var items = Array<NormalSimpleModel>() |
| | | items.append(NormalSimpleModel(id: 1, name: "全部用户参与")) |
| | | items.append(NormalSimpleModel(id: 2, name: "仅限年度会员参与")) |
| | | items.append(NormalSimpleModel(id: 3, name: "仅限运动营成员参与")) |
| | | courseSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: btn_joinCondition, items: items,selectModel: selectSignupConditionModel) { [weak self] m in |
| | | sender.setTitle(m.name, for: .normal) |
| | | sender.isSelected = false |
| | | self?.selectSignupConditionModel = m |
| | | self?.viewModel.registerCondition.accept(RegisterAcitivyType(rawValue: m.id)) |
| | | self?.viewModel.beginRefresh() |
| | | } closeClouse: { |
| | | sender.isSelected = false |
| | | } |
| | | } |
| | | |
| | | @IBAction func hotFliterAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | sender.isSelected = !sender.isSelected |
| | | let sortType = sender.isSelected ? SortType.desc:SortType.asc |
| | | sender.setImage(sortType.img, for: .normal) |
| | | viewModel.heat.accept(sortType) |
| | | viewModel.beginRefresh() |
| | | } |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "活动列表" |
| | | if cityModel != nil{ |
| | | btn_holdCity.setTitle(cityModel!.city, for: .normal) |
| | | viewModel.cityCode.accept(cityModel!.cityCode) |
| | | } |
| | | viewModel.configure(tableView,needMore: false) |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | @IBAction func signupAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | let vc = ActivitySignupListVC() |
| | | push(vc: vc) |
| | | } |
| | | override func setUI() { |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tf_search.delegate = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "ActivityInfoTCell", bundle: nil), forCellReuseIdentifier: "_ActivityInfoTCell") |
| | | // tableView.jq_setEmptyView() |
| | | |
| | | private func hiddenMenu(){ |
| | | btn_holdCity.isSelected = false |
| | | btn_joinCondition.isSelected = false |
| | | courseSubTypeView?.removeFromSuperview() |
| | | cityChooseSubTypeView?.removeFromSuperview() |
| | | } |
| | | btn_holdCity.imagePosition = .right |
| | | btn_holdCity.spacingBetweenImageAndTitle = 5 |
| | | |
| | | btn_joinCondition.imagePosition = .right |
| | | btn_joinCondition.spacingBetweenImageAndTitle = 5 |
| | | |
| | | btn_hotFilter.imagePosition = .right |
| | | btn_hotFilter.spacingBetweenImageAndTitle = 5 |
| | | } |
| | | |
| | | override func setRx() { |
| | | tf_search.rx.text.orEmpty.changed.bind(to: viewModel.content).disposed(by: disposeBag) |
| | | |
| | | } |
| | | |
| | | @IBAction func searchAction(_ sender: Any) { |
| | | tf_search.resignFirstResponder() |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | @IBAction func holdCityAction(_ sender: QMUIButton) { |
| | | view.endEditing(true) |
| | | guard !sender.isSelected else {return} |
| | | hiddenMenu() |
| | | sender.isSelected = true |
| | | cityChooseSubTypeView = CityChooseSubTypeView.show(inView: self.view, afterView: view_top) { [weak self] m in |
| | | sender.setTitle(m.name, for: .normal) |
| | | self?.viewModel.cityCode.accept(m.code) |
| | | self?.viewModel.beginRefresh() |
| | | sender.isSelected = false |
| | | } closeClouse: { |
| | | sender.isSelected = false |
| | | } |
| | | } |
| | | |
| | | @IBAction func signupConditionAction(_ sender: QMUIButton) { |
| | | view.endEditing(true) |
| | | guard !sender.isSelected else {return} |
| | | hiddenMenu() |
| | | sender.isSelected = true |
| | | var items = Array<NormalSimpleModel>() |
| | | items.append(NormalSimpleModel(id: 1, name: "全部用户参与")) |
| | | items.append(NormalSimpleModel(id: 2, name: "仅限年度会员参与")) |
| | | items.append(NormalSimpleModel(id: 3, name: "仅限运动营成员参与")) |
| | | courseSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: btn_joinCondition, items: items,selectModel: selectSignupConditionModel) { [weak self] m in |
| | | sender.setTitle(m.name, for: .normal) |
| | | sender.isSelected = false |
| | | self?.selectSignupConditionModel = m |
| | | self?.viewModel.registerCondition.accept(RegisterAcitivyType(rawValue: m.id)) |
| | | self?.viewModel.beginRefresh() |
| | | } closeClouse: { |
| | | sender.isSelected = false |
| | | } |
| | | } |
| | | |
| | | @IBAction func hotFliterAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | sender.isSelected = !sender.isSelected |
| | | let sortType = sender.isSelected ? SortType.desc:SortType.asc |
| | | sender.setImage(sortType.img, for: .normal) |
| | | viewModel.heat.accept(sortType) |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | @IBAction func signupAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | let vc = ActivitySignupListVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | private func hiddenMenu(){ |
| | | btn_holdCity.isSelected = false |
| | | btn_joinCondition.isSelected = false |
| | | courseSubTypeView?.removeFromSuperview() |
| | | cityChooseSubTypeView?.removeFromSuperview() |
| | | } |
| | | } |
| | | |
| | | extension ActivityListVC:UITableViewDelegate{ |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | let model = viewModel.dataSource.value[indexPath.row] |
| | | let vc = ActivityDetailVC(id: model.id) |
| | | push(vc: vc) |
| | | } |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | let model = viewModel.dataSource.value[indexPath.row] |
| | | let vc = ActivityDetailVC(id: model.id) |
| | | push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | extension ActivityListVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let model = viewModel.dataSource.value[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_ActivityInfoTCell") as! ActivityInfoTCell |
| | | cell.activityListModel = model |
| | | cell.label_state.isHidden = true |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let model = viewModel.dataSource.value[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_ActivityInfoTCell") as! ActivityInfoTCell |
| | | cell.activityListModel = model |
| | | cell.label_state.isHidden = true |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | } |
| | | |
| | | extension ActivityListVC:QMUITextFieldDelegate{ |
| | | func textFieldShouldReturn(_ textField: UITextField) -> Bool { |
| | | textField.resignFirstResponder() |
| | | viewModel.beginRefresh() |
| | | return true |
| | | } |
| | | func textFieldShouldReturn(_ textField: UITextField) -> Bool { |
| | | textField.resignFirstResponder() |
| | | viewModel.beginRefresh() |
| | | return true |
| | | } |
| | | } |
| | |
| | | |
| | | class CourseListViewModel:RefreshModel<CourseItemModel>{ |
| | | |
| | | var packageTypeData = BehaviorRelay<[NormalSimpleModel]?>(value: nil) |
| | | var storesData = BehaviorRelay<[NormalSimpleModel]?>(value: nil) |
| | | var selectPackeType = BehaviorRelay<NormalSimpleModel?>(value: nil) |
| | | var selectStore = BehaviorRelay<NormalSimpleModel?>(value: nil) |
| | | var distanceSort = BehaviorRelay<SortType?>(value: nil) |
| | | var salesRanking = BehaviorRelay<SortType?>(value: nil) |
| | | var search = BehaviorRelay<String?>(value: nil) |
| | | var packageTypeData = BehaviorRelay<[NormalSimpleModel]?>(value: nil) |
| | | var storesData = BehaviorRelay<[NormalSimpleModel]?>(value: nil) |
| | | var selectPackeType = BehaviorRelay<NormalSimpleModel?>(value: nil) |
| | | var selectStore = BehaviorRelay<NormalSimpleModel?>(value: nil) |
| | | var distanceSort = BehaviorRelay<SortType?>(value: nil) |
| | | var salesRanking = BehaviorRelay<SortType?>(value: nil) |
| | | var search = BehaviorRelay<String?>(value: nil) |
| | | |
| | | override func api() -> (Observable<BaseResponse<[CourseItemModel]>>)? { |
| | | return Services.queryCourseList(typeId: selectPackeType.value?.id, distanceSort: distanceSort.value, salesRanking: salesRanking.value, search: search.value, storeId: selectStore.value?.id) |
| | | } |
| | | override func api() -> (Observable<BaseResponse<[CourseItemModel]>>)? { |
| | | return Services.queryCourseList(typeId: selectPackeType.value?.id, distanceSort: distanceSort.value, salesRanking: salesRanking.value, search: search.value, storeId: selectStore.value?.id) |
| | | } |
| | | |
| | | func getDefaultData(){ |
| | | Services.coursePackageType().subscribe(onNext: {[weak self] data in |
| | | if var datas = data.data{ |
| | | datas.insert(NormalSimpleModel(id: -1, name: "全部"), at: 0) |
| | | self?.packageTypeData.accept(datas) |
| | | } |
| | | }) { error in |
| | | func getDefaultData(){ |
| | | Services.coursePackageType().subscribe(onNext: {[weak self] data in |
| | | if var datas = data.data{ |
| | | datas.insert(NormalSimpleModel(id: -1, name: "全部"), at: 0) |
| | | self?.packageTypeData.accept(datas) |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | }.disposed(by: disposeBag) |
| | | |
| | | Services.queryStoreList().subscribe(onNext: {[weak self] data in |
| | | if var datas = data.data{ |
| | | datas.insert(NormalSimpleModel(id: -1, name: "全部"), at: 0) |
| | | self?.storesData.accept(datas) |
| | | } |
| | | }) { error in |
| | | Services.queryStoreList().subscribe(onNext: {[weak self] data in |
| | | if var datas = data.data{ |
| | | datas.insert(NormalSimpleModel(id: -1, name: "全部"), at: 0) |
| | | self?.storesData.accept(datas) |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | | class CourseListVC: BaseVC{ |
| | | |
| | | @IBOutlet weak var view_topView: UIView! |
| | | @IBOutlet weak var tf_search: QMUITextField! |
| | | @IBOutlet weak var tableView: BaseTableView! |
| | | @IBOutlet weak var btn_courseType: QMUIButton! |
| | | @IBOutlet weak var btn_stores: QMUIButton! |
| | | @IBOutlet weak var btn_sales: QMUIButton! |
| | | @IBOutlet weak var btn_distance: QMUIButton! |
| | | @IBOutlet weak var view_topView: UIView! |
| | | @IBOutlet weak var tf_search: QMUITextField! |
| | | @IBOutlet weak var tableView: BaseTableView! |
| | | @IBOutlet weak var btn_courseType: QMUIButton! |
| | | @IBOutlet weak var btn_stores: QMUIButton! |
| | | @IBOutlet weak var btn_sales: QMUIButton! |
| | | @IBOutlet weak var btn_distance: QMUIButton! |
| | | |
| | | private var viewModel = CourseListViewModel() |
| | | private var showSubTypeView:CourseSubTypeView? |
| | | private var viewModel = CourseListViewModel() |
| | | private var showSubTypeView:CourseSubTypeView? |
| | | |
| | | init(selectStore:NormalSimpleModel? = nil) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | if selectStore != nil{ |
| | | viewModel.selectStore.accept(selectStore) |
| | | } |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "运动营列表" |
| | | viewModel.getDefaultData() |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | override func setUI() { |
| | | btn_courseType.imagePosition = .right |
| | | btn_stores.imagePosition = .right |
| | | btn_sales.imagePosition = .right |
| | | btn_distance.imagePosition = .right |
| | | |
| | | btn_courseType.spacingBetweenImageAndTitle = 5 |
| | | btn_stores.spacingBetweenImageAndTitle = 5 |
| | | btn_sales.spacingBetweenImageAndTitle = 5 |
| | | btn_distance.spacingBetweenImageAndTitle = 5 |
| | | init(selectStore:NormalSimpleModel? = nil) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | if selectStore != nil{ |
| | | viewModel.selectStore.accept(selectStore) |
| | | } |
| | | } |
| | | |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.register(UINib(nibName: "CourseTCell", bundle: nil), forCellReuseIdentifier: "_CourseTCell") |
| | | tableView.separatorStyle = .none |
| | | tf_search.delegate = self |
| | | viewModel.configure(tableView,needMore: false) |
| | | btn_stores.setTitle(viewModel.selectStore.value?.name ?? "所在门店", for: .normal) |
| | | } |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "运动营列表" |
| | | viewModel.getDefaultData() |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | override func setRx() { |
| | | tf_search.rx.controlEvent(.editingDidEnd).subscribe(onNext: { [weak self] in |
| | | if self?.tf_search.text?.isEmpty ?? true{ |
| | | self?.viewModel.search.accept(nil) |
| | | }else{ |
| | | self?.viewModel.search.accept(self?.tf_search.text!) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | override func setUI() { |
| | | btn_courseType.imagePosition = .right |
| | | btn_stores.imagePosition = .right |
| | | btn_sales.imagePosition = .right |
| | | btn_distance.imagePosition = .right |
| | | |
| | | private func cleanOther(){ |
| | | showSubTypeView?.removeFromSuperview() |
| | | btn_courseType.isSelected = false |
| | | btn_stores.isSelected = false |
| | | btn_sales.isSelected = false |
| | | btn_distance.isSelected = false |
| | | } |
| | | |
| | | @IBAction func searchAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | guard !tf_search.isEmpty else { |
| | | alert(msg: "请输入搜索内容");return |
| | | } |
| | | viewModel.beginRefresh() |
| | | } |
| | | btn_courseType.spacingBetweenImageAndTitle = 5 |
| | | btn_stores.spacingBetweenImageAndTitle = 5 |
| | | btn_sales.spacingBetweenImageAndTitle = 5 |
| | | btn_distance.spacingBetweenImageAndTitle = 5 |
| | | |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.register(UINib(nibName: "CourseTCell", bundle: nil), forCellReuseIdentifier: "_CourseTCell") |
| | | tableView.separatorStyle = .none |
| | | tf_search.delegate = self |
| | | viewModel.configure(tableView,needMore: false) |
| | | btn_stores.setTitle(viewModel.selectStore.value?.name ?? "所在门店", for: .normal) |
| | | } |
| | | |
| | | override func setRx() { |
| | | tf_search.rx.controlEvent(.editingDidEnd).subscribe(onNext: { [weak self] in |
| | | if self?.tf_search.text?.isEmpty ?? true{ |
| | | self?.viewModel.search.accept(nil) |
| | | }else{ |
| | | self?.viewModel.search.accept(self?.tf_search.text!) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | private func cleanOther(){ |
| | | showSubTypeView?.removeFromSuperview() |
| | | btn_courseType.isSelected = false |
| | | btn_stores.isSelected = false |
| | | btn_sales.isSelected = false |
| | | btn_distance.isSelected = false |
| | | } |
| | | |
| | | @IBAction func searchAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | guard !tf_search.isEmpty else { |
| | | alert(msg: "请输入搜索内容");return |
| | | } |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | |
| | | @IBAction func enrolledAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | let vc = SignUpCourseVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | |
| | | @IBAction func crouseTypeAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | guard viewModel.packageTypeData.value != nil else { |
| | | alertError(msg: "分类数据加载失败,请再试一次") |
| | | viewModel.getDefaultData() |
| | | return |
| | | } |
| | | |
| | | guard !sender.isSelected else {return} |
| | | cleanOther() |
| | | sender.isSelected = true |
| | | showSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: viewModel.packageTypeData.value!,selectModel: viewModel.selectPackeType.value) { [weak self] m in |
| | | if m.name != "全部"{ |
| | | sender.setTitle(m.name, for: .normal) |
| | | self?.viewModel.selectPackeType.accept(m) |
| | | }else{ |
| | | sender.setTitle("运动营类型", for: .normal) |
| | | self?.viewModel.selectPackeType.accept(nil) |
| | | } |
| | | sender.isSelected = false |
| | | self?.viewModel.beginRefresh() |
| | | } closeClouse: { |
| | | sender.isSelected = false |
| | | } |
| | | } |
| | | |
| | | @IBAction func inStoresAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | guard viewModel.storesData.value != nil else { |
| | | alertError(msg: "分类数据加载失败,请再试一次") |
| | | viewModel.getDefaultData() |
| | | return |
| | | } |
| | | |
| | | guard !sender.isSelected else {return} |
| | | cleanOther() |
| | | sender.isSelected = true |
| | | showSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: viewModel.storesData.value!,selectModel: viewModel.selectStore.value) { [weak self] m in |
| | | if m.name != "全部"{ |
| | | sender.setTitle(m.name, for: .normal) |
| | | self?.viewModel.selectStore.accept(m) |
| | | }else{ |
| | | sender.setTitle("所在门店", for: .normal) |
| | | self?.viewModel.selectStore.accept(nil) |
| | | } |
| | | sender.isSelected = false |
| | | self?.viewModel.beginRefresh() |
| | | } closeClouse: { |
| | | sender.isSelected = false |
| | | } |
| | | } |
| | | |
| | | @IBAction func saleAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | sender.isSelected = !sender.isSelected |
| | | let sortType = sender.isSelected ? SortType.desc:SortType.asc |
| | | viewModel.salesRanking.accept(sortType) |
| | | sender.setImage(viewModel.salesRanking.value?.img, for: .normal) |
| | | |
| | | //复原距离 |
| | | viewModel.distanceSort.accept(nil) |
| | | btn_distance.isSelected = false |
| | | btn_distance.setImage(SortType.def.img, for: .normal) |
| | | |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | @IBAction func distanceAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | sender.isSelected = !sender.isSelected |
| | | let sortType = sender.isSelected ? SortType.desc:SortType.asc |
| | | viewModel.distanceSort.accept(sortType) |
| | | sender.setImage(viewModel.distanceSort.value?.img, for: .normal) |
| | | @IBAction func enrolledAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | let vc = SignUpCourseVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | |
| | | //复原销量 |
| | | viewModel.salesRanking.accept(nil) |
| | | btn_sales.isSelected = false |
| | | btn_sales.setImage(SortType.def.img, for: .normal) |
| | | @IBAction func crouseTypeAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | guard viewModel.packageTypeData.value != nil else { |
| | | alertError(msg: "分类数据加载失败,请再试一次") |
| | | viewModel.getDefaultData() |
| | | return |
| | | } |
| | | |
| | | viewModel.beginRefresh() |
| | | } |
| | | guard !sender.isSelected else {return} |
| | | cleanOther() |
| | | sender.isSelected = true |
| | | showSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: viewModel.packageTypeData.value!,selectModel: viewModel.selectPackeType.value) { [weak self] m in |
| | | if m.name != "全部"{ |
| | | sender.setTitle(m.name, for: .normal) |
| | | self?.viewModel.selectPackeType.accept(m) |
| | | }else{ |
| | | sender.setTitle("运动营类型", for: .normal) |
| | | self?.viewModel.selectPackeType.accept(nil) |
| | | } |
| | | sender.isSelected = false |
| | | self?.viewModel.beginRefresh() |
| | | } closeClouse: { |
| | | sender.isSelected = false |
| | | } |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | @IBAction func inStoresAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | guard viewModel.storesData.value != nil else { |
| | | alertError(msg: "分类数据加载失败,请再试一次") |
| | | viewModel.getDefaultData() |
| | | return |
| | | } |
| | | |
| | | guard !sender.isSelected else {return} |
| | | cleanOther() |
| | | sender.isSelected = true |
| | | showSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: viewModel.storesData.value!,selectModel: viewModel.selectStore.value) { [weak self] m in |
| | | if m.name != "全部"{ |
| | | sender.setTitle(m.name, for: .normal) |
| | | self?.viewModel.selectStore.accept(m) |
| | | }else{ |
| | | sender.setTitle("所在门店", for: .normal) |
| | | self?.viewModel.selectStore.accept(nil) |
| | | } |
| | | sender.isSelected = false |
| | | self?.viewModel.beginRefresh() |
| | | } closeClouse: { |
| | | sender.isSelected = false |
| | | } |
| | | } |
| | | |
| | | @IBAction func saleAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | sender.isSelected = !sender.isSelected |
| | | let sortType = sender.isSelected ? SortType.desc:SortType.asc |
| | | viewModel.salesRanking.accept(sortType) |
| | | sender.setImage(viewModel.salesRanking.value?.img, for: .normal) |
| | | |
| | | //复原距离 |
| | | viewModel.distanceSort.accept(nil) |
| | | btn_distance.isSelected = false |
| | | btn_distance.setImage(SortType.def.img, for: .normal) |
| | | |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | @IBAction func distanceAction(_ sender: UIButton) { |
| | | view.endEditing(true) |
| | | sender.isSelected = !sender.isSelected |
| | | let sortType = sender.isSelected ? SortType.desc:SortType.asc |
| | | viewModel.distanceSort.accept(sortType) |
| | | sender.setImage(viewModel.distanceSort.value?.img, for: .normal) |
| | | |
| | | |
| | | //复原销量 |
| | | viewModel.salesRanking.accept(nil) |
| | | btn_sales.isSelected = false |
| | | btn_sales.setImage(SortType.def.img, for: .normal) |
| | | |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | } |
| | | |
| | | extension CourseListVC:UITableViewDelegate{ |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | let item = viewModel.dataSource.value[indexPath.row] |
| | | let vc = CourseDetailVC(id: item.id) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | let item = viewModel.dataSource.value[indexPath.row] |
| | | let vc = CourseDetailVC(id: item.id) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | } |
| | | |
| | | extension CourseListVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseTCell") as! CourseTCell |
| | | cell.courseItemModel = viewModel.dataSource.value[indexPath.row] |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseTCell") as! CourseTCell |
| | | cell.courseItemModel = viewModel.dataSource.value[indexPath.row] |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | } |
| | | |
| | | extension CourseListVC:QMUITextFieldDelegate{ |
| | | func textFieldShouldReturn(_ textField: UITextField) -> Bool { |
| | | textField.resignFirstResponder() |
| | | viewModel.beginRefresh() |
| | | return true |
| | | } |
| | | func textFieldShouldReturn(_ textField: UITextField) -> Bool { |
| | | textField.resignFirstResponder() |
| | | viewModel.beginRefresh() |
| | | return true |
| | | } |
| | | } |
| | |
| | | import RxSwift |
| | | |
| | | class GamesDataSourceViewModel:RefreshModel<GamesRecordModel>{ |
| | | private var type:GamesSubType! |
| | | private var type:GamesSubType! |
| | | |
| | | init(type:GamesSubType) { |
| | | super.init() |
| | | self.type = type |
| | | } |
| | | init(type:GamesSubType) { |
| | | super.init() |
| | | self.type = type |
| | | } |
| | | |
| | | let userId = BehaviorRelay<Int>(value:0) |
| | | let userId = BehaviorRelay<Int>(value:0) |
| | | |
| | | override func api() -> (Observable<BaseResponse<[GamesRecordModel]>>)? { |
| | | if type == .offline{ |
| | | return Services.game_generalGameRecord(userId: userId.value, page: page) |
| | | }else if type == .crossMatch{ |
| | | return Services.game_generalGameCrossRecord(userId: userId.value, page: page) |
| | | }else{ |
| | | return Services.game_generalGameAccuracyRecord(userId: userId.value, page: page) |
| | | } |
| | | } |
| | | override func api() -> (Observable<BaseResponse<[GamesRecordModel]>>)? { |
| | | if type == .offline{ |
| | | return Services.game_generalGameRecord(userId: userId.value, page: page) |
| | | }else if type == .crossMatch{ |
| | | return Services.game_generalGameCrossRecord(userId: userId.value, page: page) |
| | | }else{ |
| | | return Services.game_generalGameAccuracyRecord(userId: userId.value, page: page) |
| | | } |
| | | } |
| | | } |
| | | |
| | | class GamesDataSourceSubListVC: BaseVC { |
| | | |
| | | private var type:GamesSubType! |
| | | private var tableView:BaseTableView! |
| | | private var viewModel:GamesDataSourceViewModel! |
| | | private var type:GamesSubType! |
| | | private var tableView:BaseTableView! |
| | | private var viewModel:GamesDataSourceViewModel! |
| | | |
| | | init(type:GamesSubType) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.viewModel = GamesDataSourceViewModel(type: type) |
| | | } |
| | | init(type:GamesSubType) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.viewModel = GamesDataSourceViewModel(type: type) |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | |
| | | |
| | | // tableView.jq_setEmptyView() |
| | | viewModel.configure(tableView) |
| | | Services.userDetails().subscribe(onNext: {[weak self] data in |
| | | if let userId = data.data?.userId{ |
| | | self?.viewModel.userId.accept(userId) |
| | | self?.viewModel.beginRefresh() |
| | | } |
| | | }) { error in |
| | | // tableView.jq_setEmptyView() |
| | | viewModel.configure(tableView) |
| | | Services.userDetails().subscribe(onNext: {[weak self] data in |
| | | if let userId = data.data?.userId{ |
| | | self?.viewModel.userId.accept(userId) |
| | | self?.viewModel.beginRefresh() |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView = BaseTableView(frame: .zero, style: .plain) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "GamesDataSourceTCell", bundle: nil), forCellReuseIdentifier: "_GamesDataSourceTCell") |
| | | view.addSubview(tableView) |
| | | tableView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview().inset(UIEdgeInsets(top: 7.5, left: 0, bottom: 0, right: 0)) |
| | | } |
| | | } |
| | | override func setUI() { |
| | | tableView = BaseTableView(frame: .zero, style: .plain) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "GamesDataSourceTCell", bundle: nil), forCellReuseIdentifier: "_GamesDataSourceTCell") |
| | | view.addSubview(tableView) |
| | | tableView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview().inset(UIEdgeInsets(top: 7.5, left: 0, bottom: 0, right: 0)) |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension GamesDataSourceSubListVC:UITableViewDelegate{ |
| | |
| | | } |
| | | |
| | | extension GamesDataSourceSubListVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_GamesDataSourceTCell") as! GamesDataSourceTCell |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_GamesDataSourceTCell") as! GamesDataSourceTCell |
| | | |
| | | if type == .offline{ |
| | | cell.label_gameName.text = viewModel.dataSource.value[indexPath.row].game_name |
| | | cell.label_score.text = "\(viewModel.dataSource.value[indexPath.row].score)" |
| | | cell.label_type.text = viewModel.dataSource.value[indexPath.row].time |
| | | } |
| | | return cell |
| | | } |
| | | if type == .offline{ |
| | | cell.label_gameName.text = viewModel.dataSource.value[indexPath.row].game_name |
| | | cell.label_score.text = "\(viewModel.dataSource.value[indexPath.row].score)" |
| | | cell.label_type.text = viewModel.dataSource.value[indexPath.row].time |
| | | } |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | if type == .offline{ |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | return 0 |
| | | } |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | if type == .offline{ |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | return 0 |
| | | } |
| | | } |
| | |
| | | // |
| | | // GamesDataSourceVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2023/9/15. |
| | | // |
| | | // |
| | | // GamesDataSourceVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2023/9/15. |
| | | // |
| | | |
| | | import UIKit |
| | | import SPPageMenu |
| | |
| | | |
| | | class GamesDataSourceVC: BaseVC { |
| | | |
| | | private var pageMenu:SPPageMenu = { |
| | | let pageMenu = SPPageMenu(frame: .zero, trackerStyle: .line) |
| | | // 追踪线 |
| | | pageMenu.trackerWidth = 56 |
| | | pageMenu.setTrackerHeight(3, cornerRadius: 1.5) |
| | | pageMenu.tracker.backgroundColor = Def_ThemeColor |
| | | pageMenu.trackerFollowingMode = .always |
| | | pageMenu.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) |
| | | private var pageMenu:SPPageMenu = { |
| | | let pageMenu = SPPageMenu(frame: .zero, trackerStyle: .line) |
| | | // 追踪线 |
| | | pageMenu.trackerWidth = 56 |
| | | pageMenu.setTrackerHeight(3, cornerRadius: 1.5) |
| | | pageMenu.tracker.backgroundColor = Def_ThemeColor |
| | | pageMenu.trackerFollowingMode = .always |
| | | pageMenu.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) |
| | | |
| | | // 分割线 |
| | | pageMenu.dividingLine.backgroundColor = .clear |
| | | pageMenu.dividingLineHeight = 1 |
| | | // 分割线 |
| | | pageMenu.dividingLine.backgroundColor = .clear |
| | | pageMenu.dividingLineHeight = 1 |
| | | |
| | | // item |
| | | pageMenu.spacing = 20.0 |
| | | pageMenu.permutationWay = .notScrollEqualWidths |
| | | // pageMenu.setItems(["单机游戏","跨城赛","90°准度赛"], selectedItemIndex: 0) |
| | | pageMenu.setItems(["单机游戏"], selectedItemIndex: 0) |
| | | // item |
| | | pageMenu.spacing = 20.0 |
| | | pageMenu.permutationWay = .notScrollEqualWidths |
| | | // pageMenu.setItems(["单机游戏","跨城赛","90°准度赛"], selectedItemIndex: 0) |
| | | pageMenu.setItems(["单机游戏"], selectedItemIndex: 0) |
| | | |
| | | // 字体 |
| | | pageMenu.selectedItemTitleFont = UIFont.systemFont(ofSize: 14, weight: .semibold) |
| | | pageMenu.unSelectedItemTitleFont = UIFont.systemFont(ofSize: 14,weight: .medium) |
| | | // 颜色 |
| | | pageMenu.selectedItemTitleColor = .black.withAlphaComponent(0.8) |
| | | pageMenu.unSelectedItemTitleColor = .black.withAlphaComponent(0.6) |
| | | // 字体 |
| | | pageMenu.selectedItemTitleFont = UIFont.systemFont(ofSize: 14, weight: .semibold) |
| | | pageMenu.unSelectedItemTitleFont = UIFont.systemFont(ofSize: 14,weight: .medium) |
| | | // 颜色 |
| | | pageMenu.selectedItemTitleColor = .black.withAlphaComponent(0.8) |
| | | pageMenu.unSelectedItemTitleColor = .black.withAlphaComponent(0.6) |
| | | |
| | | return pageMenu |
| | | }() |
| | | return pageMenu |
| | | }() |
| | | |
| | | lazy var pageViewController:FFPageViewController = { |
| | | let pageVC = FFPageViewController() |
| | | pageVC.view.backgroundColor = .clear |
| | | pageVC.scrollview.backgroundColor = .clear |
| | | lazy var pageViewController:FFPageViewController = { |
| | | let pageVC = FFPageViewController() |
| | | pageVC.view.backgroundColor = .clear |
| | | pageVC.scrollview.backgroundColor = .clear |
| | | |
| | | pageVC.scrollview.bounces = false |
| | | return pageVC |
| | | }() |
| | | pageVC.scrollview.bounces = false |
| | | return pageVC |
| | | }() |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "我的数据" |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "我的数据" |
| | | |
| | | pageMenu.delegate = self |
| | | pageViewController.delegate = self |
| | | } |
| | | pageMenu.delegate = self |
| | | pageViewController.delegate = self |
| | | } |
| | | |
| | | override func setUI() { |
| | | pageMenu.layer.shadowColor = UIColor(hexStr: "#EFEEEE").withAlphaComponent(0.5).cgColor |
| | | pageMenu.layer.shadowOffset = CGSize(width: 0, height: 2) |
| | | pageMenu.layer.shadowOpacity = 1 |
| | | view.addSubview(pageMenu) |
| | | pageMenu.snp.makeConstraints { make in |
| | | make.top.equalTo(view.safeAreaLayoutGuide) |
| | | make.left.right.equalToSuperview() |
| | | make.height.equalTo(45) |
| | | } |
| | | override func setUI() { |
| | | pageMenu.layer.shadowColor = UIColor(hexStr: "#EFEEEE").withAlphaComponent(0.5).cgColor |
| | | pageMenu.layer.shadowOffset = CGSize(width: 0, height: 2) |
| | | pageMenu.layer.shadowOpacity = 1 |
| | | view.addSubview(pageMenu) |
| | | pageMenu.snp.makeConstraints { make in |
| | | make.top.equalTo(view.safeAreaLayoutGuide) |
| | | make.left.right.equalToSuperview() |
| | | make.height.equalTo(45) |
| | | } |
| | | |
| | | view.backgroundColor = .white |
| | | addChild(pageViewController) |
| | | view.insertSubview(pageViewController.view, at: 0) |
| | | pageViewController.didMove(toParent: self) |
| | | view.backgroundColor = .white |
| | | addChild(pageViewController) |
| | | view.insertSubview(pageViewController.view, at: 0) |
| | | pageViewController.didMove(toParent: self) |
| | | |
| | | pageViewController.view.snp.makeConstraints { make in |
| | | make.top.equalTo(pageMenu.snp.bottom) |
| | | make.left.right.bottom.equalToSuperview() |
| | | } |
| | | } |
| | | pageViewController.view.snp.makeConstraints { make in |
| | | make.top.equalTo(pageMenu.snp.bottom) |
| | | make.left.right.bottom.equalToSuperview() |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension GamesDataSourceVC:SPPageMenuDelegate{ |
| | | func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { |
| | | pageViewController.scroll(toPage: index, animation: true) |
| | | } |
| | | func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { |
| | | pageViewController.scroll(toPage: index, animation: true) |
| | | } |
| | | } |
| | | |
| | | |
| | | extension GamesDataSourceVC:FFPageViewControllerDelegate{ |
| | | |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | pageMenu.selectedItemIndex = currentPage |
| | | } |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | pageMenu.selectedItemIndex = currentPage |
| | | } |
| | | |
| | | func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { |
| | | return 3 |
| | | } |
| | | func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { |
| | | return 3 |
| | | } |
| | | |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | let vc = GamesDataSourceSubListVC(type: GamesSubType(rawValue: page)!) |
| | | return vc |
| | | } |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | let vc = GamesDataSourceSubListVC(type: GamesSubType(rawValue: page)!) |
| | | return vc |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | class GamesListVC: BaseVC { |
| | | |
| | | private var model:QRCodeModel! |
| | | private(set) var pageMenu:SPPageMenu = { |
| | | let pageMenu = SPPageMenu(frame: .zero, trackerStyle: .line) |
| | | // 追踪线 |
| | | pageMenu.trackerWidth = 0 |
| | | pageMenu.setTrackerHeight(0, cornerRadius: 1.5) |
| | | pageMenu.tracker.backgroundColor = .clear |
| | | pageMenu.trackerFollowingMode = .always |
| | | pageMenu.contentInset = UIEdgeInsets(top: 0, left: 19, bottom: 0, right: 19) |
| | | // pageMenu.setItems(["单机游戏","互联游戏"], selectedItemIndex: 0) |
| | | pageMenu.setItems(["单机游戏"], selectedItemIndex: 0) |
| | | private var model:QRCodeModel! |
| | | private(set) var pageMenu:SPPageMenu = { |
| | | let pageMenu = SPPageMenu(frame: .zero, trackerStyle: .line) |
| | | // 追踪线 |
| | | pageMenu.trackerWidth = 0 |
| | | pageMenu.setTrackerHeight(0, cornerRadius: 1.5) |
| | | pageMenu.tracker.backgroundColor = .clear |
| | | pageMenu.trackerFollowingMode = .always |
| | | pageMenu.contentInset = UIEdgeInsets(top: 0, left: 19, bottom: 0, right: 19) |
| | | // pageMenu.setItems(["单机游戏","互联游戏"], selectedItemIndex: 0) |
| | | pageMenu.setItems(["单机游戏"], selectedItemIndex: 0) |
| | | |
| | | // 分割线 |
| | | pageMenu.dividingLine.backgroundColor = .clear |
| | | pageMenu.dividingLineHeight = 1 |
| | | // 分割线 |
| | | pageMenu.dividingLine.backgroundColor = .clear |
| | | pageMenu.dividingLineHeight = 1 |
| | | |
| | | // item |
| | | pageMenu.spacing = 27.0 |
| | | pageMenu.permutationWay = .scrollAdaptContent |
| | | // item |
| | | pageMenu.spacing = 27.0 |
| | | pageMenu.permutationWay = .scrollAdaptContent |
| | | |
| | | // 字体 |
| | | pageMenu.selectedItemTitleFont = UIFont.systemFont(ofSize: 21, weight: .medium) |
| | | pageMenu.unSelectedItemTitleFont = UIFont.systemFont(ofSize: 18,weight: .medium) |
| | | // 颜色 |
| | | pageMenu.selectedItemTitleColor = UIColor(hexStr: "#6CC366") |
| | | pageMenu.unSelectedItemTitleColor = UIColor(hexStr: "#A4A4A4") |
| | | return pageMenu |
| | | }() |
| | | // 字体 |
| | | pageMenu.selectedItemTitleFont = UIFont.systemFont(ofSize: 21, weight: .medium) |
| | | pageMenu.unSelectedItemTitleFont = UIFont.systemFont(ofSize: 18,weight: .medium) |
| | | // 颜色 |
| | | pageMenu.selectedItemTitleColor = UIColor(hexStr: "#6CC366") |
| | | pageMenu.unSelectedItemTitleColor = UIColor(hexStr: "#A4A4A4") |
| | | return pageMenu |
| | | }() |
| | | |
| | | lazy var pageViewController:FFPageViewController = { |
| | | let pageVC = FFPageViewController() |
| | | pageVC.view.backgroundColor = .clear |
| | | pageVC.scrollview.backgroundColor = .clear |
| | | lazy var pageViewController:FFPageViewController = { |
| | | let pageVC = FFPageViewController() |
| | | pageVC.view.backgroundColor = .clear |
| | | pageVC.scrollview.backgroundColor = .clear |
| | | |
| | | pageVC.scrollview.bounces = false |
| | | return pageVC |
| | | }() |
| | | pageVC.scrollview.bounces = false |
| | | return pageVC |
| | | }() |
| | | |
| | | init(model:QRCodeModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.model = model |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "智慧球场" |
| | | init(model:QRCodeModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.model = model |
| | | } |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | | view.backgroundColor = Def_ThemeColor |
| | | pageMenu.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: 91) |
| | | pageMenu.delegate = self |
| | | view.addSubview(pageMenu) |
| | | view.addSubview(pageViewController.view) |
| | | pageViewController.view.backgroundColor = .clear |
| | | pageViewController.delegate = self |
| | | pageViewController.view.snp.makeConstraints { make in |
| | | make.top.equalTo(pageMenu.snp.bottom) |
| | | make.left.right.bottom.equalToSuperview() |
| | | } |
| | | } |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "智慧球场" |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | | view.backgroundColor = Def_ThemeColor |
| | | pageMenu.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: 91) |
| | | pageMenu.delegate = self |
| | | view.addSubview(pageMenu) |
| | | view.addSubview(pageViewController.view) |
| | | pageViewController.view.backgroundColor = .clear |
| | | pageViewController.delegate = self |
| | | pageViewController.view.snp.makeConstraints { make in |
| | | make.top.equalTo(pageMenu.snp.bottom) |
| | | make.left.right.bottom.equalToSuperview() |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension GamesListVC:SPPageMenuDelegate{ |
| | | func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { |
| | | pageViewController.scroll(toPage: index, animation: true) |
| | | } |
| | | func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { |
| | | pageViewController.scroll(toPage: index, animation: true) |
| | | } |
| | | } |
| | | |
| | | |
| | | extension GamesListVC:FFPageViewControllerDelegate{ |
| | | |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | pageMenu.selectedItemIndex = currentPage |
| | | } |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | pageMenu.selectedItemIndex = currentPage |
| | | } |
| | | |
| | | func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { |
| | | return 2 |
| | | } |
| | | func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { |
| | | return 2 |
| | | } |
| | | |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | let vc = GamesSubListVC(type: GamesSubType(rawValue: page)!,model: model) |
| | | return vc |
| | | } |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | let vc = GamesSubListVC(type: GamesSubType(rawValue: page)!,model: model) |
| | | return vc |
| | | } |
| | | } |
| | |
| | | import RxSwift |
| | | |
| | | enum GamesSubType:Int{ |
| | | case offline = 0 |
| | | case crossMatch = 1 |
| | | case accuracyMatch = 2 |
| | | case offline = 0 |
| | | case crossMatch = 1 |
| | | case accuracyMatch = 2 |
| | | } |
| | | |
| | | class GamesOffLineViewModel:RefreshModel<GameListModel>{ |
| | | let spaceId = BehaviorRelay<Int>(value: 0) |
| | | let sutuId = BehaviorRelay<Int>(value: 0) |
| | | let storeId = BehaviorRelay<Int>(value: 0) |
| | | let spaceId = BehaviorRelay<Int>(value: 0) |
| | | let sutuId = BehaviorRelay<Int>(value: 0) |
| | | let storeId = BehaviorRelay<Int>(value: 0) |
| | | |
| | | override func api() -> (Observable<BaseResponse<[GameListModel]>>)? { |
| | | return Services.game_gameList(spaceId: spaceId.value, storeId: storeId.value) |
| | | } |
| | | override func api() -> (Observable<BaseResponse<[GameListModel]>>)? { |
| | | return Services.game_gameList(spaceId: spaceId.value, storeId: storeId.value) |
| | | } |
| | | } |
| | | |
| | | class GamesSubListVC: BaseVC { |
| | | private var type:GamesSubType! |
| | | private var model:QRCodeModel! |
| | | private var type:GamesSubType! |
| | | private var model:QRCodeModel! |
| | | |
| | | private let offLineViewModel = GamesOffLineViewModel() |
| | | private var homeStoreModel:HomeStoreModel! |
| | | private var tableView:BaseTableView! |
| | | private let offLineViewModel = GamesOffLineViewModel() |
| | | private var homeStoreModel:HomeStoreModel! |
| | | private var tableView:BaseTableView! |
| | | |
| | | init(type:GamesSubType,model:QRCodeModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.model = model |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ |
| | | if let deserModel = HomeStoreModel.deserialize(from: storeStr){ |
| | | offLineViewModel.storeId.accept(deserModel.storeId) |
| | | |
| | | if type == .offline{ |
| | | offLineViewModel.spaceId.accept(model.space_id!) |
| | | offLineViewModel.sutuId.accept(model.sutu_id!) |
| | | offLineViewModel.configure(tableView, needMore: false) |
| | | offLineViewModel.beginRefresh() |
| | | init(type:GamesSubType,model:QRCodeModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.model = model |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView = BaseTableView(frame: .zero, style: .plain) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.register(UINib(nibName: "GamesTCell", bundle: nil), forCellReuseIdentifier: "_GamesTCell") |
| | | view.addSubview(tableView) |
| | | tableView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | // tableView.jq_setEmptyView() |
| | | } |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ |
| | | if let deserModel = HomeStoreModel.deserialize(from: storeStr){ |
| | | offLineViewModel.storeId.accept(deserModel.storeId) |
| | | |
| | | if type == .offline{ |
| | | offLineViewModel.spaceId.accept(model.space_id!) |
| | | offLineViewModel.sutuId.accept(model.sutu_id!) |
| | | offLineViewModel.configure(tableView, needMore: false) |
| | | offLineViewModel.beginRefresh() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView = BaseTableView(frame: .zero, style: .plain) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.register(UINib(nibName: "GamesTCell", bundle: nil), forCellReuseIdentifier: "_GamesTCell") |
| | | view.addSubview(tableView) |
| | | tableView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | |
| | | // tableView.jq_setEmptyView() |
| | | } |
| | | } |
| | | |
| | | extension GamesSubListVC:UITableViewDelegate{ |
| | | |
| | | |
| | | } |
| | | |
| | | extension GamesSubListVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_GamesTCell") as! GamesTCell |
| | | if type == .offline{ |
| | | cell.gameListModel = offLineViewModel.dataSource.value[indexPath.row] |
| | | cell.QRCodeModel = model |
| | | cell.spaceId = offLineViewModel.spaceId.value |
| | | cell.storeId = offLineViewModel.storeId.value |
| | | cell.sutuId = offLineViewModel.sutuId.value |
| | | } |
| | | return cell |
| | | } |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_GamesTCell") as! GamesTCell |
| | | if type == .offline{ |
| | | cell.gameListModel = offLineViewModel.dataSource.value[indexPath.row] |
| | | cell.QRCodeModel = model |
| | | cell.spaceId = offLineViewModel.spaceId.value |
| | | cell.storeId = offLineViewModel.storeId.value |
| | | cell.sutuId = offLineViewModel.sutuId.value |
| | | } |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
| | | return 212 |
| | | } |
| | | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
| | | return 212 |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return offLineViewModel.dataSource.value.count |
| | | } |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return offLineViewModel.dataSource.value.count |
| | | } |
| | | } |
| | |
| | | import HandyJSON |
| | | |
| | | struct HomeStoreModel:HandyJSON{ |
| | | var isVip = 0 |
| | | var storeId = 0 |
| | | var name = "" |
| | | var lon:Double = 0 |
| | | var lat:Double = 0 |
| | | var isVip = 0 |
| | | var storeId = 0 |
| | | var name = "" |
| | | var lon:Double = 0 |
| | | var lat:Double = 0 |
| | | |
| | | var province = "" |
| | | var provinceCode:Int = 0 |
| | | var city:String = "" |
| | | var cityCode:Int = 0 |
| | | var province = "" |
| | | var provinceCode:Int = 0 |
| | | var city:String = "" |
| | | var cityCode:Int = 0 |
| | | } |
| | | |
| | | class HomeStoreConfigModel:HandyJSON { |
| | | |
| | | required init() {} |
| | | required init() {} |
| | | |
| | | var type:HomeItemType = .none |
| | | var isOpen:Int = 0 |
| | | var sort:Int = 0 |
| | | var backgroundImage:String = "" |
| | | var cellHeight:Double = 270 |
| | | var type:HomeItemType = .worldcup |
| | | var isOpen:Int = 0 |
| | | var sort:Int = 0 |
| | | var backgroundImage:String = "" |
| | | var cellHeight:Double = 270 |
| | | } |
| | | |
| | | class HomeStoreTopBannerModel:HandyJSON{ |
| | | |
| | | required init() {} |
| | | required init() {} |
| | | |
| | | var backgroundImage:String = "" |
| | | var name = "" //模块 |
| | | var page = "" //页面 |
| | | var type:String = "" //类型 |
| | | var turnId:Int? |
| | | var model = "" |
| | | var sort = 0 |
| | | var cellHeight:Double = 270 |
| | | var backgroundImage:String = "" |
| | | var name = "" //模块 |
| | | var page = "" //页面 |
| | | var type:String = "" //类型 |
| | | var turnId:Int? |
| | | var model = "" |
| | | var sort = 0 |
| | | var cellHeight:Double = 270 |
| | | } |
| | | |
| | | struct NormalSimpleModel:HandyJSON{ |
| | | var id = 0 |
| | | var name = "" |
| | | var id = 0 |
| | | var name = "" |
| | | |
| | | } |
New file |
| | |
| | | // |
| | | // WorldCupModel.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/28. |
| | | // |
| | | |
| | | import Foundation |
| | | import HandyJSON |
| | | |
| | | struct WorldCupListModel:HandyJSON{ |
| | | var age: String = "" |
| | | var content: String = "" |
| | | var coverImg: String = "" |
| | | var heat: Int = 0 |
| | | var id: String = "" |
| | | var lat: String = "" |
| | | var lon: String = "" |
| | | var matchNumber: Int = 0 |
| | | var name: String = "" |
| | | var registrationClosingTime: String = "" |
| | | } |
| | |
| | | // |
| | | // HomeVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 杨锴 on 2023/6/8. |
| | | // |
| | | // |
| | | // HomeVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 杨锴 on 2023/6/8. |
| | | // |
| | | |
| | | import UIKit |
| | | import JQTools |
| | |
| | | let UpdateCurrentStore_Noti = Notification.Name.init("UpdateCurrentStore_Noti") |
| | | |
| | | class HomeVC: BaseVC{ |
| | | @IBOutlet weak var collectionView: BaseCollectionView! |
| | | @IBOutlet weak var label_vipInfo: UILabel! |
| | | @IBOutlet weak var view_banner: CommonBannerView! |
| | | @IBOutlet weak var btn_localTap: TapBtn! |
| | | private var layout:FlowLayout! |
| | | @IBOutlet weak var label_store: UILabel! |
| | | private var items = Array<Any>() |
| | | private var storeModel:HomeStoreModel? |
| | | private var storeId:Int? |
| | | private var currentLocal:CLLocation? |
| | | @IBOutlet weak var collectionView: BaseCollectionView! |
| | | @IBOutlet weak var label_vipInfo: UILabel! |
| | | @IBOutlet weak var view_banner: CommonBannerView! |
| | | @IBOutlet weak var btn_localTap: TapBtn! |
| | | private var layout:FlowLayout! |
| | | @IBOutlet weak var label_store: UILabel! |
| | | private var items = Array<Any>() |
| | | private var storeModel:HomeStoreModel? |
| | | private var storeId:Int? |
| | | private var currentLocal:CLLocation? |
| | | |
| | | override func viewDidAppear(_ animated: Bool) { |
| | | super.viewDidAppear(animated) |
| | | if let nav = navigationController as? BaseNav{ |
| | | nav.navigationController(nav, willShow: self, animated: true) |
| | | } |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | startLocation() |
| | | Services.bannerList(position: .homeTop).subscribe(onNext: {[weak self] data in |
| | | if let models = data.data{ |
| | | var bannerResources = [CommonBannerModel]() |
| | | for (i,item) in models.enumerated() { |
| | | bannerResources.append(CommonBannerModel(index:i,resource:item.img,mediaType:.imageUrl)) |
| | | } |
| | | self?.view_banner.setItems(items: bannerResources,selectClouse: { m in |
| | | jumpPage(model: models[m.index].model, page: models[m.index].page, type: models[m.index].type, id: models[m.index].turnId) |
| | | }) |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | | view.backgroundColor = UIColor(hexStr: "EEF0F3") |
| | | |
| | | layout = FlowLayout() |
| | | layout.sectionInset = UIEdgeInsets(top: 14, left: 34, bottom: 14, right: 34) |
| | | collectionView.collectionViewLayout = layout |
| | | collectionView.delegate = self |
| | | collectionView.dataSource = self |
| | | collectionView.backgroundColor = .white |
| | | collectionView.register(UINib(nibName: "HomeCCell", bundle: nil), forCellWithReuseIdentifier: "_HomeCCell") |
| | | // collectionView.jq_setEmptyView("无数据", image: UIImage(named: "icon_LOGO")?.jq_imageWithTintColor(color: .gray), foregroundColor: .gray, clouse: nil) |
| | | } |
| | | |
| | | override func setRx() { |
| | | NotificationCenter.default.rx.notification(ChooseHomeStore_Noti).take(until: self.rx.deallocated).subscribe(onNext: { [weak self] noti in |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.chooseStoresAction(weakSelf.btn_localTap) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | private func getStoreInfo(){ |
| | | Services.homeInfo().subscribe(onNext: {[weak self] data in |
| | | if let m = data.data{ |
| | | self?.storeModel = m |
| | | var text = "欢迎来到 快乐运动俱乐部" |
| | | if m.storeId != 0{ |
| | | self?.label_store.text = m.name.isEmpty ? "门店获取失败":m.name |
| | | self?.storeModel = m |
| | | self?.storeId = m.storeId |
| | | if m.isVip == 0{text.append("\n加入我们 成为会员")} |
| | | self?.label_vipInfo.text = text |
| | | UserDefaults.standard.set(m.toJSONString(), forKey: "CurrentStore") |
| | | UserDefaults.standard.synchronize() |
| | | self?.getStoreItemList() |
| | | } |
| | | } |
| | | }) { [weak self] error in |
| | | self?.label_store.text = "门店获取失败" |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | private func getStoreItemList(){ |
| | | |
| | | items.removeAll() |
| | | |
| | | Services.homeStoreConfig(storeId: storeId!).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | self?.items.append(contentsOf: (data.data ?? []).filter({$0.isOpen == 1})) |
| | | Services.homeStoreConfig2(storeId: weakSelf.storeId!).subscribe(onNext: {[weak self] data in |
| | | self?.items.append(contentsOf: (data.data ?? [])) |
| | | self?.downloadImgs() |
| | | }) { error in |
| | | |
| | | }.disposed(by: weakSelf.disposeBag) |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | //图片下载 |
| | | private func downloadImgs(){ |
| | | let group = DispatchGroup() |
| | | let queue = DispatchQueue(label: "imgRadio") |
| | | let w = (view.frame.width - 78.0) / 2.0 |
| | | for item in items{ |
| | | if let m = item as? HomeStoreConfigModel{ |
| | | queue.async(group: group){ () in |
| | | group.enter() |
| | | guard SDImageCache.shared.diskImageDataExists(withKey: m.backgroundImage) else { |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage), options: .useNSURLCache) { _, _,_ in |
| | | } completed: { image, data, error, status in |
| | | if let img = image{ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | }else{ |
| | | m.cellHeight = w / (m.type.defaultImg.size.width / m.type.defaultImg.size.height) |
| | | } |
| | | group.leave() |
| | | } |
| | | return |
| | | } |
| | | if let data = SDImageCache.shared.diskCache.data(forKey: m.backgroundImage),let img = UIImage(data: data){ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | group.leave() |
| | | } |
| | | } |
| | | } |
| | | |
| | | if let m = item as? HomeStoreTopBannerModel{ |
| | | queue.async(group: group){() in |
| | | group.enter() |
| | | guard SDImageCache.shared.diskImageDataExists(withKey: m.backgroundImage) else { |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage), options: .useNSURLCache) { _, _,_ in |
| | | } completed: { image, data, error, status in |
| | | if let img = image{ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | } |
| | | group.leave() |
| | | } |
| | | return |
| | | } |
| | | |
| | | if let data = SDImageCache.shared.diskCache.data(forKey: m.backgroundImage),let img = UIImage(data: data){ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | group.leave() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | group.notify(queue: .main) { |
| | | self.items = self.items.sorted { v1, v2 in |
| | | |
| | | var sort1 = 0 |
| | | var sort2 = 0 |
| | | |
| | | if let m = v1 as? HomeStoreTopBannerModel{ |
| | | sort1 = m.sort |
| | | override func viewDidAppear(_ animated: Bool) { |
| | | super.viewDidAppear(animated) |
| | | if let nav = navigationController as? BaseNav{ |
| | | nav.navigationController(nav, willShow: self, animated: true) |
| | | } |
| | | } |
| | | |
| | | if let m = v1 as? HomeStoreConfigModel{ |
| | | sort1 = m.sort |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | startLocation() |
| | | Services.bannerList(position: .homeTop).subscribe(onNext: {[weak self] data in |
| | | if let models = data.data{ |
| | | var bannerResources = [CommonBannerModel]() |
| | | for (i,item) in models.enumerated() { |
| | | bannerResources.append(CommonBannerModel(index:i,resource:item.img,mediaType:.imageUrl)) |
| | | } |
| | | self?.view_banner.setItems(items: bannerResources,selectClouse: { m in |
| | | jumpPage(model: models[m.index].model, page: models[m.index].page, type: models[m.index].type, id: models[m.index].turnId) |
| | | }) |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | if let m = v2 as? HomeStoreTopBannerModel{ |
| | | sort2 = m.sort |
| | | override func setUI() { |
| | | view.backgroundColor = UIColor(hexStr: "EEF0F3",darkStr: nil) |
| | | |
| | | layout = FlowLayout() |
| | | layout.sectionInset = UIEdgeInsets(top: 14, left: 34, bottom: 14, right: 34) |
| | | collectionView.collectionViewLayout = layout |
| | | collectionView.delegate = self |
| | | collectionView.dataSource = self |
| | | collectionView.backgroundColor = .white |
| | | collectionView.register(UINib(nibName: "HomeCCell", bundle: nil), forCellWithReuseIdentifier: "_HomeCCell") |
| | | // collectionView.jq_setEmptyView("无数据", image: UIImage(named: "icon_LOGO")?.jq_imageWithTintColor(color: .gray), foregroundColor: .gray, clouse: nil) |
| | | } |
| | | |
| | | if let m = v2 as? HomeStoreConfigModel{ |
| | | sort2 = m.sort |
| | | override func setRx() { |
| | | NotificationCenter.default.rx.notification(ChooseHomeStore_Noti).take(until: self.rx.deallocated).subscribe(onNext: { [weak self] noti in |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.chooseStoresAction(weakSelf.btn_localTap) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | return sort1 < sort2 |
| | | } |
| | | |
| | | let v = self.items.compactMap { any in |
| | | if let m = any as? HomeStoreTopBannerModel{ |
| | | return "\(m.sort)" |
| | | private func getStoreInfo(){ |
| | | Services.homeInfo().subscribe(onNext: {[weak self] data in |
| | | if let m = data.data{ |
| | | self?.storeModel = m |
| | | var text = "欢迎来到 快乐运动俱乐部" |
| | | if m.storeId != 0{ |
| | | self?.label_store.text = m.name.isEmpty ? "门店获取失败":m.name |
| | | self?.storeModel = m |
| | | self?.storeId = m.storeId |
| | | if m.isVip == 0{text.append("\n加入我们 成为会员")} |
| | | self?.label_vipInfo.text = text |
| | | UserDefaults.standard.set(m.toJSONString(), forKey: "CurrentStore") |
| | | UserDefaults.standard.synchronize() |
| | | self?.getStoreItemList() |
| | | } |
| | | } |
| | | }) { [weak self] error in |
| | | self?.label_store.text = "门店获取失败" |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | if let m = any as? HomeStoreConfigModel{ |
| | | return "\(m.sort)" |
| | | |
| | | private func getStoreItemList(){ |
| | | |
| | | items.removeAll() |
| | | |
| | | Services.homeStoreConfig(storeId: storeId!).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | self?.items.append(contentsOf: (data.data ?? []).filter({$0.isOpen == 1})) |
| | | Services.homeStoreConfig2(storeId: weakSelf.storeId!).subscribe(onNext: {[weak self] data in |
| | | self?.items.append(contentsOf: (data.data ?? [])) |
| | | self?.downloadImgs() |
| | | }) { error in |
| | | |
| | | }.disposed(by: weakSelf.disposeBag) |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | return "" |
| | | } |
| | | |
| | | self.layout.collectionView?.reloadData() |
| | | self.collectionView.reloadData() |
| | | } |
| | | } |
| | | //图片下载 |
| | | private func downloadImgs(){ |
| | | let group = DispatchGroup() |
| | | let queue = DispatchQueue(label: "imgRadio") |
| | | let w = (view.frame.width - 78.0) / 2.0 |
| | | for item in items{ |
| | | if let m = item as? HomeStoreConfigModel{ |
| | | queue.async(group: group){ () in |
| | | group.enter() |
| | | guard SDImageCache.shared.diskImageDataExists(withKey: m.backgroundImage) else { |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage), options: .useNSURLCache) { _, _,_ in |
| | | } completed: { image, data, error, status in |
| | | if let img = image{ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | }else{ |
| | | m.cellHeight = w / (m.type.defaultImg.size.width / m.type.defaultImg.size.height) |
| | | } |
| | | group.leave() |
| | | } |
| | | return |
| | | } |
| | | if let data = SDImageCache.shared.diskCache.data(forKey: m.backgroundImage),let img = UIImage(data: data){ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | group.leave() |
| | | } |
| | | } |
| | | } |
| | | |
| | | private func startLocation(){ |
| | | locationTool.startLocation { [weak self] local in |
| | | guard self!.currentLocal != nil else { |
| | | self!.currentLocal = local |
| | | self!.getStoreInfo() |
| | | locationTool.stopLocation() |
| | | return |
| | | } |
| | | if let m = item as? HomeStoreTopBannerModel{ |
| | | queue.async(group: group){() in |
| | | group.enter() |
| | | guard SDImageCache.shared.diskImageDataExists(withKey: m.backgroundImage) else { |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage), options: .useNSURLCache) { _, _,_ in |
| | | } completed: { image, data, error, status in |
| | | if let img = image{ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | } |
| | | group.leave() |
| | | } |
| | | return |
| | | } |
| | | |
| | | } errorClouse: { [weak self] error in |
| | | alertError(msg: "定位获取失败") |
| | | self?.label_store.text = "定位获取失败" |
| | | } |
| | | } |
| | | if let data = SDImageCache.shared.diskCache.data(forKey: m.backgroundImage),let img = UIImage(data: data){ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | group.leave() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @IBAction func scanAction(_ sender: UIButton) { |
| | | let codeVC = CommonScanQRCodeVC {[weak self] text, status in |
| | | if status{ |
| | | if let model = QRCodeModel.deserialize(from: text){ |
| | | if model.scan_type == .games{ |
| | | let gamesListVC = GamesListVC(model: model) |
| | | self?.push(vc: gamesListVC) |
| | | }else if model.scan_type == .yard{ |
| | | let vc = YardDetailVC(id: model.id!) |
| | | self?.push(vc: vc) |
| | | }else if model.scan_type == .course{ |
| | | let vc = CourseDetailVC(id: model.id!) |
| | | self?.push(vc: vc) |
| | | } |
| | | }else{ |
| | | alertError(msg: "识别失败") |
| | | group.notify(queue: .main) { |
| | | self.items = self.items.sorted { v1, v2 in |
| | | |
| | | var sort1 = 0 |
| | | var sort2 = 0 |
| | | |
| | | if let m = v1 as? HomeStoreTopBannerModel{ |
| | | sort1 = m.sort |
| | | } |
| | | |
| | | if let m = v1 as? HomeStoreConfigModel{ |
| | | sort1 = m.sort |
| | | } |
| | | |
| | | if let m = v2 as? HomeStoreTopBannerModel{ |
| | | sort2 = m.sort |
| | | } |
| | | |
| | | if let m = v2 as? HomeStoreConfigModel{ |
| | | sort2 = m.sort |
| | | } |
| | | return sort1 < sort2 |
| | | } |
| | | |
| | | let v = self.items.compactMap { any in |
| | | if let m = any as? HomeStoreTopBannerModel{ |
| | | return "\(m.sort)" |
| | | } |
| | | if let m = any as? HomeStoreConfigModel{ |
| | | return "\(m.sort)" |
| | | } |
| | | return "" |
| | | } |
| | | |
| | | self.layout.collectionView?.reloadData() |
| | | self.collectionView.reloadData() |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | push(vc: codeVC) |
| | | } |
| | | |
| | | private func startLocation(){ |
| | | locationTool.startLocation { [weak self] local in |
| | | guard self!.currentLocal != nil else { |
| | | self!.currentLocal = local |
| | | self!.getStoreInfo() |
| | | locationTool.stopLocation() |
| | | return |
| | | } |
| | | |
| | | @IBAction func joinMemberAction(_ sender: UIButton) { |
| | | let joinMemberVC = JoinMemberIntroduceVC() |
| | | push(vc: joinMemberVC) |
| | | } |
| | | |
| | | |
| | | @IBAction func chooseStoresAction(_ sender: TapBtn) { |
| | | StoresChooseView.show(defaultM: storeModel) { [weak self] province,city,store in |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.storeId = store.id |
| | | weakSelf.label_store.text = store.name |
| | | weakSelf.storeModel = HomeStoreModel(isVip: weakSelf.storeModel?.isVip ?? 0, storeId: store.id, name: store.name, lon: 0, lat: 0, province: province.name, provinceCode: province.code, city: city?.name ?? "", cityCode: city?.code ?? 0) |
| | | weakSelf.items.removeAll() |
| | | weakSelf.getStoreItemList() |
| | | } errorClouse: { [weak self] error in |
| | | alertError(msg: "定位获取失败") |
| | | self?.label_store.text = "定位获取失败" |
| | | } |
| | | } |
| | | |
| | | UserDefaults.standard.set(weakSelf.storeModel!.toJSONString(), forKey: "CurrentStore") |
| | | UserDefaults.standard.synchronize() |
| | | NotificationCenter.default.post(name: UpdateCurrentStore_Noti, object: nil, userInfo: nil) |
| | | @IBAction func scanAction(_ sender: UIButton) { |
| | | let codeVC = CommonScanQRCodeVC {[weak self] text, status in |
| | | if status{ |
| | | if let model = QRCodeModel.deserialize(from: text){ |
| | | if model.scan_type == .games{ |
| | | let gamesListVC = GamesListVC(model: model) |
| | | self?.push(vc: gamesListVC) |
| | | }else if model.scan_type == .yard{ |
| | | let vc = YardDetailVC(id: model.id!) |
| | | self?.push(vc: vc) |
| | | }else if model.scan_type == .course{ |
| | | let vc = CourseDetailVC(id: model.id!) |
| | | self?.push(vc: vc) |
| | | } |
| | | }else{ |
| | | alertError(msg: "识别失败") |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | push(vc: codeVC) |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .lightContent |
| | | } |
| | | |
| | | @IBAction func joinMemberAction(_ sender: UIButton) { |
| | | let joinMemberVC = JoinMemberIntroduceVC() |
| | | push(vc: joinMemberVC) |
| | | } |
| | | |
| | | |
| | | @IBAction func chooseStoresAction(_ sender: TapBtn) { |
| | | StoresChooseView.show(defaultM: storeModel) { [weak self] province,city,store in |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.storeId = store.id |
| | | weakSelf.label_store.text = store.name |
| | | weakSelf.storeModel = HomeStoreModel(isVip: weakSelf.storeModel?.isVip ?? 0, storeId: store.id, name: store.name, lon: 0, lat: 0, province: province.name, provinceCode: province.code, city: city?.name ?? "", cityCode: city?.code ?? 0) |
| | | weakSelf.items.removeAll() |
| | | weakSelf.getStoreItemList() |
| | | |
| | | UserDefaults.standard.set(weakSelf.storeModel!.toJSONString(), forKey: "CurrentStore") |
| | | UserDefaults.standard.synchronize() |
| | | NotificationCenter.default.post(name: UpdateCurrentStore_Noti, object: nil, userInfo: nil) |
| | | |
| | | } |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .lightContent |
| | | } |
| | | } |
| | | |
| | | extension HomeVC:UICollectionViewDelegate,UICollectionViewDelegateWaterFlowLayout{ |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, colum section: Int) -> Int { |
| | | return 2 |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacing section: Int) -> CGFloat { |
| | | return 10 |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sectionInsetForItems section: Int) -> UIEdgeInsets { |
| | | return UIEdgeInsets(top: 0, left: 34, bottom: 14, right: 34) |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, itemWidth: CGFloat, caculateHeight indexPath: IndexPath) -> CGFloat { |
| | | let item = items[indexPath.row] |
| | | if let m = item as? HomeStoreConfigModel{ |
| | | return m.cellHeight |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, colum section: Int) -> Int { |
| | | return 2 |
| | | } |
| | | |
| | | if let m = item as? HomeStoreTopBannerModel{ |
| | | return m.cellHeight |
| | | } |
| | | return 200 |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacing section: Int) -> CGFloat { |
| | | return 10 |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sectionInsetForItems section: Int) -> UIEdgeInsets { |
| | | return UIEdgeInsets(top: 0, left: 34, bottom: 14, right: 34) |
| | | } |
| | | |
| | | var simpleModel:NormalSimpleModel? |
| | | if storeModel != nil{ |
| | | simpleModel = NormalSimpleModel(id: storeModel!.storeId, name: storeModel!.name) |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, itemWidth: CGFloat, caculateHeight indexPath: IndexPath) -> CGFloat { |
| | | let item = items[indexPath.row] |
| | | if let m = item as? HomeStoreConfigModel{ |
| | | return m.cellHeight |
| | | } |
| | | |
| | | let item = items[indexPath.row] |
| | | if let m = item as? HomeStoreConfigModel{ |
| | | switch m.type{ |
| | | case .course: |
| | | let vc = CourseListVC(selectStore: simpleModel) |
| | | push(vc: vc) |
| | | case .booking: |
| | | let vc = YardListVC(selectStore: simpleModel) |
| | | push(vc: vc) |
| | | case .activity: |
| | | let vc = ActivityListVC(cityModel: storeModel) |
| | | push(vc: vc) |
| | | case .video: |
| | | let vc = CourseOnlineListVC(position: 2) |
| | | vc.title = "看视频得奖励" |
| | | push(vc: vc) |
| | | case .coin: |
| | | let vc = CourseOnlineListVC(position: 1) |
| | | vc.title = "线上课得积分" |
| | | push(vc: vc) |
| | | case .ticket: |
| | | let vc = CoinStoreCenterVC(selectStore: simpleModel,type: .ticket) |
| | | push(vc: vc) |
| | | if let m = item as? HomeStoreTopBannerModel{ |
| | | return m.cellHeight |
| | | } |
| | | return 200 |
| | | } |
| | | |
| | | case .wisdomCourt: |
| | | guard storeId != 0 else {alert(msg: "请先选择门店");return} |
| | | let vc = GamesVC() |
| | | push(vc: vc) |
| | | case .welfare: |
| | | if storeId != 0{ |
| | | Services.queryStoreFreeBenefit(id: storeId!).subscribe(onNext: {[weak self] data in |
| | | if let m = data.data{ |
| | | let vc = WelfareFreeVC(m) |
| | | self?.push(vc: vc) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | alertError(msg: "当前门店获取失败") |
| | | } |
| | | case .none:break |
| | | } |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | |
| | | if let m = item as? HomeStoreTopBannerModel{ |
| | | jumpPage(model: m.name, page: m.page, type: m.type,id: m.turnId) |
| | | } |
| | | } |
| | | |
| | | var simpleModel:NormalSimpleModel? |
| | | if storeModel != nil{ |
| | | simpleModel = NormalSimpleModel(id: storeModel!.storeId, name: storeModel!.name) |
| | | } |
| | | |
| | | let item = items[indexPath.row] |
| | | if let m = item as? HomeStoreConfigModel{ |
| | | switch m.type{ |
| | | case .worldcup: |
| | | let vc = WorldCupIntroVC() |
| | | push(vc: vc) |
| | | case .course: |
| | | let vc = CourseListVC(selectStore: simpleModel) |
| | | push(vc: vc) |
| | | case .booking: |
| | | let vc = YardListVC(selectStore: simpleModel) |
| | | push(vc: vc) |
| | | case .activity: |
| | | let vc = ActivityListVC(cityModel: storeModel) |
| | | push(vc: vc) |
| | | case .video: |
| | | let vc = CourseOnlineListVC(position: 2) |
| | | vc.title = "看视频得奖励" |
| | | push(vc: vc) |
| | | case .coin: |
| | | let vc = CourseOnlineListVC(position: 1) |
| | | vc.title = "线上课得积分" |
| | | push(vc: vc) |
| | | case .ticket: |
| | | let vc = CoinStoreCenterVC(selectStore: simpleModel,type: .ticket) |
| | | push(vc: vc) |
| | | |
| | | case .wisdomCourt: |
| | | guard storeId != 0 else {alert(msg: "请先选择门店");return} |
| | | let vc = GamesVC() |
| | | push(vc: vc) |
| | | case .welfare: |
| | | if storeId != 0{ |
| | | Services.queryStoreFreeBenefit(id: storeId!).subscribe(onNext: {[weak self] data in |
| | | if let m = data.data{ |
| | | let vc = WelfareFreeVC(m) |
| | | self?.push(vc: vc) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | alertError(msg: "当前门店获取失败") |
| | | } |
| | | case .nothing: |
| | | break |
| | | } |
| | | } |
| | | |
| | | if let m = item as? HomeStoreTopBannerModel{ |
| | | jumpPage(model: m.name, page: m.page, type: m.type,id: m.turnId) |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | extension HomeVC:UICollectionViewDataSource{ |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeCCell", for: indexPath) as! HomeCCell |
| | | guard indexPath.row < items.count else {return cell} |
| | | let item = items[indexPath.row] |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeCCell", for: indexPath) as! HomeCCell |
| | | guard indexPath.row < items.count else {return cell} |
| | | let item = items[indexPath.row] |
| | | |
| | | if let m = item as? HomeStoreConfigModel{ |
| | | cell.img.sd_setImage(with: URL(string: m.backgroundImage), placeholderImage: nil, options: .lowPriority) |
| | | } |
| | | if let m = item as? HomeStoreConfigModel{ |
| | | cell.img.sd_setImage(with: URL(string: m.backgroundImage), placeholderImage: nil, options: .lowPriority) |
| | | } |
| | | |
| | | if let m = item as? HomeStoreTopBannerModel{ |
| | | cell.img.sd_setImage(with: URL(string: m.backgroundImage), placeholderImage: nil, options: .lowPriority) |
| | | } |
| | | cell.img.cornerRadius = 10 |
| | | return cell |
| | | } |
| | | if let m = item as? HomeStoreTopBannerModel{ |
| | | cell.img.sd_setImage(with: URL(string: m.backgroundImage), placeholderImage: nil, options: .lowPriority) |
| | | } |
| | | cell.img.cornerRadius = 10 |
| | | return cell |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | return items.count |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | return items.count |
| | | } |
| | | } |
| | | |
| | |
| | | import JQTools |
| | | |
| | | class JoinMemberIntroduceVC: BaseVC { |
| | | @IBOutlet weak var btn_join: QMUIButton! |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var btn_join: QMUIButton! |
| | | @IBOutlet weak var webView: WKWebView! |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "成为会员" |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "成为会员" |
| | | |
| | | Services.querySystemImg(type: .becomeVip).subscribe(onNext: {data in |
| | | if let imgString = data.data{ |
| | | let html = "<img src='\(imgString)' width='\(JQ_ScreenW)' loading=eager/>" |
| | | self.webView.loadHTMLString(html.jq_wrapHtml(), baseURL: nil) |
| | | } |
| | | }) { error in |
| | | Services.querySystemImg(type: .becomeVip).subscribe(onNext: {data in |
| | | if let imgString = data.data{ |
| | | let html = "<img src='\(imgString)' width='\(JQ_ScreenW)' loading=eager/>" |
| | | self.webView.loadHTMLString(html.jq_wrapHtml(), baseURL: nil) |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setUI() { |
| | | btn_join.spacingBetweenImageAndTitle = 3 |
| | | btn_join.imagePosition = .left |
| | | } |
| | | override func setUI() { |
| | | btn_join.spacingBetweenImageAndTitle = 3 |
| | | btn_join.imagePosition = .left |
| | | } |
| | | |
| | | |
| | | @IBAction func joinAction(_ sender: QMUIButton) { |
| | | @IBAction func joinAction(_ sender: QMUIButton) { |
| | | |
| | | var price = 0.01 |
| | | var price = 0.01 |
| | | #if !DEBUG |
| | | price = 199 |
| | | price = 199 |
| | | #endif |
| | | |
| | | PaymentView.show(enumType: .joinMember, money: (ali:price,wx:price,coin:nil,course:nil,integral:nil)) { type in |
| | | Services.enrollMember(paytype: type).subscribe(onNext: {data in |
| | | switch type { |
| | | case .aliPay: |
| | | if let orderString = data.data?.orderString{ |
| | | YYPaymentManager.shared.sendPaymentRequest(YYAlipayRequest(orderString: orderString)) {[weak self] result in |
| | | guard let weakSelf = self else { return } |
| | | switch result { |
| | | case .success: |
| | | let vc = PaymentResultVC(result: .success, objType: .member, handleVC: nil, courseConfigId: nil, againClouse: nil) |
| | | weakSelf.push(vc: vc) |
| | | case .cancel: |
| | | let vc = PaymentResultVC(result: .fail("已取消支付", 0), objType: .member, handleVC: nil, courseConfigId: nil, againClouse: nil) |
| | | weakSelf.push(vc: vc) |
| | | case .failure(let error): |
| | | if let er = error as? NetworkRequest.NetRequestError{ |
| | | switch er { |
| | | case .Other(let code,let string): |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .member) |
| | | weakSelf.push(vc: vc) |
| | | default: |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .member) |
| | | weakSelf.push(vc: vc) |
| | | } |
| | | } |
| | | PaymentView.show(enumType: .joinMember, money: (ali:price,wx:price,coin:nil,course:nil,integral:nil)) { type in |
| | | Services.enrollMember(paytype: type).subscribe(onNext: {data in |
| | | switch type { |
| | | case .aliPay: |
| | | if let orderString = data.data?.orderString{ |
| | | YYPaymentManager.shared.sendPaymentRequest(YYAlipayRequest(orderString: orderString)) {[weak self] result in |
| | | guard let weakSelf = self else { return } |
| | | switch result { |
| | | case .success: |
| | | let vc = PaymentResultVC(result: .success, objType: .member, handleVC: nil, courseConfigId: nil, againClouse: nil) |
| | | weakSelf.push(vc: vc) |
| | | case .cancel: |
| | | let vc = PaymentResultVC(result: .fail("已取消支付", 0), objType: .member, handleVC: nil, courseConfigId: nil, againClouse: nil) |
| | | weakSelf.push(vc: vc) |
| | | case .failure(let error): |
| | | if let er = error as? NetworkRequest.NetRequestError{ |
| | | switch er { |
| | | case .Other(let code,let string): |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .member) |
| | | weakSelf.push(vc: vc) |
| | | default: |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .member) |
| | | weakSelf.push(vc: vc) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | case .wechat:break |
| | | default:break |
| | | } |
| | | }).disposed(by: self.disposeBag) |
| | | } |
| | | } |
| | | } |
| | | case .wechat:break |
| | | default:break |
| | | } |
| | | }).disposed(by: self.disposeBag) |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | // |
| | | // WorldCupListVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/28. |
| | | // |
| | | |
| | | import UIKit |
| | | import JQTools |
| | | import QMUIKit |
| | | import RxRelay |
| | | import RxSwift |
| | | |
| | | class WorldCupListViewModel:RefreshModel<WorldCupListModel>{ |
| | | |
| | | var search = BehaviorRelay<String?>(value:nil) |
| | | var gender = BehaviorRelay<Int?>(value:nil) |
| | | var sort = BehaviorRelay<Int?>(value:nil) |
| | | var storeId = BehaviorRelay<Int?>(value: nil) |
| | | |
| | | |
| | | override func api() -> (Observable<BaseResponse<[WorldCupListModel]>>)? { |
| | | let deserModel = HomeStoreModel.deserialize(from: UserDefaults.standard.object(forKey: "CurrentStore") as? String) |
| | | return Services.worldCupList(id: deserModel!.storeId, content: search.value, gender: gender.value, sort: sort.value, storeId: storeId.value) |
| | | } |
| | | } |
| | | |
| | | class WorldCupListVC: BaseVC { |
| | | |
| | | private var tableview:BaseTableView! |
| | | private var pointView:CourseSubTypeView? |
| | | private var conditionView:CourseSubTypeView? |
| | | private var hotView:CourseSubTypeView? |
| | | |
| | | private var viewModel = WorldCupListViewModel() |
| | | |
| | | private var headerView:CommonBannerView = { |
| | | var banner = CommonBannerView() |
| | | banner.backgroundColor = .white |
| | | banner.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.564) |
| | | return banner |
| | | |
| | | }() |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "社区世界杯" |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | override func setUI() { |
| | | let bgImg = UIImageView(image: UIImage(named: "bg_long")) |
| | | bgImg.contentMode = .scaleAspectFill |
| | | view.addSubview(bgImg) |
| | | bgImg.snp.makeConstraints { make in |
| | | make.top.equalTo(200) |
| | | make.left.right.bottom.equalToSuperview() |
| | | } |
| | | |
| | | tableview = BaseTableView(frame: .zero, style: .plain) |
| | | tableview.tableHeaderView = headerView |
| | | view.addSubview(tableview) |
| | | tableview.delegate = self |
| | | tableview.dataSource = self |
| | | if #available(iOS 15.0, *) { |
| | | tableview.sectionHeaderTopPadding = 0 |
| | | } |
| | | tableview.backgroundColor = .clear |
| | | tableview.register(UINib(nibName: "WorldCupTCell", bundle: nil), forCellReuseIdentifier: "_WorldCupTCell") |
| | | tableview.register(UINib(nibName: "WorldCupHeadView", bundle: nil), forHeaderFooterViewReuseIdentifier: "_headerView") |
| | | tableview.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | |
| | | viewModel.configure(tableview) |
| | | } |
| | | } |
| | | |
| | | |
| | | extension WorldCupListVC:UITableViewDelegate & UITableViewDataSource{ |
| | | |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | let vc = WorldCupContentApplyVC() |
| | | push(vc: vc) |
| | | |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | // return viewModel.dataSource.value.count |
| | | return 1 |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_WorldCupTCell") as! WorldCupTCell |
| | | cell.backgroundColor = .clear |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { |
| | | let headView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "_headerView") as! WorldCupHeadView |
| | | headView.delegate = self |
| | | return headView |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { |
| | | return 105 |
| | | } |
| | | } |
| | | |
| | | extension WorldCupListVC:WorldCupHeadDelegate{ |
| | | func search(text: String) { |
| | | |
| | | } |
| | | |
| | | func atPoint(_ btn: QMUIButton) { |
| | | conditionView?.removeFromSuperview() |
| | | hotView?.removeFromSuperview() |
| | | btn.isSelected = true |
| | | pointView = CourseSubTypeView.show(inView: self.view, afterView: btn, items: [NormalSimpleModel(id: 0, name: "测试")]) { model in |
| | | |
| | | } closeClouse: { |
| | | btn.isSelected = false |
| | | } |
| | | } |
| | | |
| | | func atCondition(_ btn: QMUIButton) { |
| | | pointView?.removeFromSuperview() |
| | | hotView?.removeFromSuperview() |
| | | btn.isSelected = true |
| | | var items = [NormalSimpleModel]() |
| | | items.append(NormalSimpleModel(id: 0, name: "全部")) |
| | | items.append(NormalSimpleModel(id: 1, name: "男")) |
| | | items.append(NormalSimpleModel(id: 2, name: "女")) |
| | | conditionView = CourseSubTypeView.show(inView: self.view, afterView: btn, items: items) { model in |
| | | btn.setTitle(model.name, for: .normal) |
| | | } closeClouse: { |
| | | btn.isSelected = false |
| | | } |
| | | } |
| | | |
| | | func atHot(_ btn: QMUIButton) { |
| | | pointView?.removeFromSuperview() |
| | | conditionView?.removeFromSuperview() |
| | | btn.isSelected = !btn.isSelected |
| | | let sortType = btn.isSelected ? SortType.desc:SortType.asc |
| | | btn.setImage(sortType.img, for: .normal) |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WorldCupListVC" customModule="WanPai" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | </connections> |
| | | </placeholder> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sfF-Oz-h9P"> |
| | | <rect key="frame" x="0.0" y="59" width="393" height="105"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hSD-2a-yWS"> |
| | | <rect key="frame" x="14" y="15" width="326" height="38"/> |
| | | <subviews> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_search" translatesAutoresizingMaskIntoConstraints="NO" id="J6l-AT-tQO"> |
| | | <rect key="frame" x="4" y="10.666666666666671" width="17" height="17"/> |
| | | </imageView> |
| | | <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="输入赛事名称" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="c9g-cP-dFW" customClass="QMUITextField"> |
| | | <rect key="frame" x="25" y="0.0" width="291" height="38"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <textInputTraits key="textInputTraits" returnKeyType="search"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor"> |
| | | <color key="value" red="0.7843137255" green="0.79215686269999996" blue="0.83921568629999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </textField> |
| | | </subviews> |
| | | <color key="backgroundColor" red="0.96470588239999999" green="0.96470588239999999" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="38" id="4hc-7s-hLB"/> |
| | | <constraint firstAttribute="bottom" secondItem="c9g-cP-dFW" secondAttribute="bottom" id="HnE-hi-l8y"/> |
| | | <constraint firstItem="c9g-cP-dFW" firstAttribute="top" secondItem="hSD-2a-yWS" secondAttribute="top" id="Owk-5n-M1i"/> |
| | | <constraint firstAttribute="trailing" secondItem="c9g-cP-dFW" secondAttribute="trailing" constant="10" id="Ut2-Dt-LcB"/> |
| | | <constraint firstItem="J6l-AT-tQO" firstAttribute="centerY" secondItem="hSD-2a-yWS" secondAttribute="centerY" id="VLq-HI-ZUn"/> |
| | | <constraint firstItem="J6l-AT-tQO" firstAttribute="leading" secondItem="hSD-2a-yWS" secondAttribute="leading" constant="4" id="fDj-Ud-97S"/> |
| | | <constraint firstItem="c9g-cP-dFW" firstAttribute="leading" secondItem="J6l-AT-tQO" secondAttribute="trailing" constant="4" id="l1i-sJ-Ggh"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> |
| | | <real key="value" value="4.1600000000000001"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Eog-I3-3Qf"> |
| | | <rect key="frame" x="340" y="15" width="53" height="38"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="搜索"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | </button> |
| | | <stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" spacing="34" translatesAutoresizingMaskIntoConstraints="NO" id="fVz-yT-yaM"> |
| | | <rect key="frame" x="14" y="53" width="268" height="52"/> |
| | | <subviews> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Z7Q-0r-hlk" customClass="QMUIButton"> |
| | | <rect key="frame" x="0.0" y="0.0" width="79" height="52"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="举办城市" image="icon_down_arrow"> |
| | | <color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </state> |
| | | <state key="selected" image="icon_down_arrow_s"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | </button> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8O9-Hj-qgP" customClass="QMUIButton"> |
| | | <rect key="frame" x="113" y="0.0" width="79" height="52"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="报名条件" image="icon_down_arrow"> |
| | | <color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </state> |
| | | <state key="selected" image="icon_down_arrow_s"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | </button> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9cf-8N-H7O" customClass="QMUIButton"> |
| | | <rect key="frame" x="226" y="0.0" width="42" height="52"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="热度" image="icon_sort_normal"> |
| | | <color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </state> |
| | | <state key="highlighted" image="icon_sort_normal"/> |
| | | </button> |
| | | </subviews> |
| | | </stackView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="Eog-I3-3Qf" firstAttribute="bottom" secondItem="hSD-2a-yWS" secondAttribute="bottom" id="4VU-um-GMd"/> |
| | | <constraint firstAttribute="trailing" secondItem="Eog-I3-3Qf" secondAttribute="trailing" id="CKQ-ss-wf6"/> |
| | | <constraint firstAttribute="bottom" secondItem="fVz-yT-yaM" secondAttribute="bottom" id="JyY-zS-pwk"/> |
| | | <constraint firstItem="fVz-yT-yaM" firstAttribute="top" secondItem="hSD-2a-yWS" secondAttribute="bottom" id="SfR-zD-gnR"/> |
| | | <constraint firstAttribute="height" constant="105" id="Uls-pD-o8d"/> |
| | | <constraint firstItem="Eog-I3-3Qf" firstAttribute="top" secondItem="hSD-2a-yWS" secondAttribute="top" id="UqT-Cr-0hd"/> |
| | | <constraint firstAttribute="trailing" secondItem="hSD-2a-yWS" secondAttribute="trailing" constant="53" id="YAA-8p-MeB"/> |
| | | <constraint firstItem="Eog-I3-3Qf" firstAttribute="leading" secondItem="hSD-2a-yWS" secondAttribute="trailing" id="Zly-xe-KpI"/> |
| | | <constraint firstItem="fVz-yT-yaM" firstAttribute="leading" secondItem="sfF-Oz-h9P" secondAttribute="leading" constant="14" id="dJs-42-7Jq"/> |
| | | <constraint firstItem="hSD-2a-yWS" firstAttribute="top" secondItem="sfF-Oz-h9P" secondAttribute="top" constant="15" id="wVC-eP-Tat"/> |
| | | <constraint firstItem="hSD-2a-yWS" firstAttribute="leading" secondItem="sfF-Oz-h9P" secondAttribute="leading" constant="14" id="yf5-fm-joh"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset"> |
| | | <size key="value" width="0.0" height="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="shadowColor"> |
| | | <color key="value" red="0.87450980389999999" green="0.87450980389999999" blue="0.87450980389999999" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | </subviews> |
| | | <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="sfF-Oz-h9P" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="PQE-xC-ztr"/> |
| | | <constraint firstItem="sfF-Oz-h9P" firstAttribute="trailing" secondItem="fnl-2z-Ty3" secondAttribute="trailing" id="gVk-X4-GWi"/> |
| | | <constraint firstItem="sfF-Oz-h9P" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="vnA-5Y-0Gm"/> |
| | | </constraints> |
| | | <point key="canvasLocation" x="140" y="21"/> |
| | | </view> |
| | | </objects> |
| | | <resources> |
| | | <image name="icon_down_arrow" width="13" height="8"/> |
| | | <image name="icon_down_arrow_s" width="13" height="8"/> |
| | | <image name="icon_search" width="17" height="17"/> |
| | | <image name="icon_sort_normal" width="9" height="12"/> |
| | | <namedColor name="FE6E0D"> |
| | | <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
New file |
| | |
| | | // |
| | | // WorldCupHeadView.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/28. |
| | | // |
| | | |
| | | import UIKit |
| | | import JQTools |
| | | import QMUIKit |
| | | |
| | | protocol WorldCupHeadDelegate { |
| | | func search(text:String) |
| | | func atPoint(_ btn:QMUIButton) |
| | | func atCondition(_ btn:QMUIButton) |
| | | func atHot(_ btn:QMUIButton) |
| | | } |
| | | |
| | | class WorldCupHeadView: UITableViewHeaderFooterView,JQNibView{ |
| | | @IBOutlet weak var tf_search: QMUITextField! |
| | | @IBOutlet weak var btn_search: UIButton! |
| | | @IBOutlet weak var btn_point: QMUIButton! |
| | | @IBOutlet weak var btn_condition: QMUIButton! |
| | | @IBOutlet weak var btn_hot: QMUIButton! |
| | | var delegate:WorldCupHeadDelegate? |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | |
| | | btn_point.spacingBetweenImageAndTitle = 5 |
| | | btn_condition.spacingBetweenImageAndTitle = 5 |
| | | btn_hot.spacingBetweenImageAndTitle = 5 |
| | | btn_point.imagePosition = .right |
| | | btn_condition.imagePosition = .right |
| | | btn_hot.imagePosition = .right |
| | | |
| | | tf_search.returnKeyType = .search |
| | | tf_search.delegate = self |
| | | } |
| | | |
| | | @IBAction func atPointAction(_ sender: QMUIButton) { |
| | | btn_point.isSelected = true |
| | | btn_condition.isSelected = false |
| | | btn_hot.isSelected = false |
| | | delegate?.atPoint(sender) |
| | | } |
| | | |
| | | @IBAction func atCoditionAction(_ sender: QMUIButton) { |
| | | btn_condition.isSelected = true |
| | | btn_point.isSelected = false |
| | | btn_hot.isSelected = false |
| | | delegate?.atCondition(sender) |
| | | } |
| | | |
| | | @IBAction func atHotAction(_ sender: QMUIButton) { |
| | | btn_condition.isSelected = false |
| | | btn_point.isSelected = false |
| | | delegate?.atHot(sender) |
| | | } |
| | | |
| | | @IBAction func searchAction(_ sender: QMUIButton) { |
| | | delegate?.search(text: tf_search.text!) |
| | | } |
| | | } |
| | | |
| | | extension WorldCupHeadView:QMUITextFieldDelegate{ |
| | | func textFieldShouldReturn(_ textField: UITextField) -> Bool { |
| | | textField.resignFirstResponder() |
| | | delegate?.search(text: textField.text!) |
| | | return true |
| | | } |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="WorldCupHeadView" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="118"/> |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ek4-ol-Kwt"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="105"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CXW-eJ-9qe"> |
| | | <rect key="frame" x="14" y="15" width="326" height="38"/> |
| | | <subviews> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_search" translatesAutoresizingMaskIntoConstraints="NO" id="dJg-KL-qo2"> |
| | | <rect key="frame" x="4" y="10.666666666666668" width="17" height="17"/> |
| | | </imageView> |
| | | <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="搜索" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="ZL5-mj-nIt" customClass="QMUITextField"> |
| | | <rect key="frame" x="25" y="0.0" width="291" height="38"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <textInputTraits key="textInputTraits" returnKeyType="search"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor"> |
| | | <color key="value" red="0.7843137255" green="0.79215686269999996" blue="0.83921568629999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </textField> |
| | | </subviews> |
| | | <color key="backgroundColor" red="0.96470588239999999" green="0.96470588239999999" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="38" id="AES-Ub-ySP"/> |
| | | <constraint firstItem="ZL5-mj-nIt" firstAttribute="top" secondItem="CXW-eJ-9qe" secondAttribute="top" id="JaC-ZI-4a8"/> |
| | | <constraint firstAttribute="bottom" secondItem="ZL5-mj-nIt" secondAttribute="bottom" id="V3x-6h-0iA"/> |
| | | <constraint firstAttribute="trailing" secondItem="ZL5-mj-nIt" secondAttribute="trailing" constant="10" id="dzm-lA-rZu"/> |
| | | <constraint firstItem="dJg-KL-qo2" firstAttribute="leading" secondItem="CXW-eJ-9qe" secondAttribute="leading" constant="4" id="hxb-EH-Sig"/> |
| | | <constraint firstItem="ZL5-mj-nIt" firstAttribute="leading" secondItem="dJg-KL-qo2" secondAttribute="trailing" constant="4" id="viY-qz-F47"/> |
| | | <constraint firstItem="dJg-KL-qo2" firstAttribute="centerY" secondItem="CXW-eJ-9qe" secondAttribute="centerY" id="yog-6x-AwH"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> |
| | | <real key="value" value="4.1600000000000001"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ae0-Ig-puo"> |
| | | <rect key="frame" x="340" y="15" width="53" height="38"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="搜索"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | <connections> |
| | | <action selector="searchAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="VE9-mw-Tkg"/> |
| | | </connections> |
| | | </button> |
| | | <stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" spacing="34" translatesAutoresizingMaskIntoConstraints="NO" id="RAp-2w-eQZ"> |
| | | <rect key="frame" x="14" y="53" width="268" height="52"/> |
| | | <subviews> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="UqK-cy-hEv" customClass="QMUIButton"> |
| | | <rect key="frame" x="0.0" y="0.0" width="79" height="52"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="所在赛点" image="icon_down_arrow"> |
| | | <color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </state> |
| | | <state key="selected" image="icon_down_arrow_s"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | <connections> |
| | | <action selector="atPointAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="KD0-WJ-wGM"/> |
| | | </connections> |
| | | </button> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="g0f-NI-dTH" customClass="QMUIButton"> |
| | | <rect key="frame" x="113" y="0.0" width="79" height="52"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="报名条件" image="icon_down_arrow"> |
| | | <color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </state> |
| | | <state key="selected" image="icon_down_arrow_s"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | <connections> |
| | | <action selector="atCoditionAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="nNg-7D-SU7"/> |
| | | </connections> |
| | | </button> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fJe-vk-DMh" customClass="QMUIButton"> |
| | | <rect key="frame" x="226" y="0.0" width="42" height="52"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="热度" image="icon_sort_normal"> |
| | | <color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </state> |
| | | <state key="highlighted" image="icon_sort_normal"/> |
| | | <connections> |
| | | <action selector="atHotAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="JE1-P3-UEA"/> |
| | | </connections> |
| | | </button> |
| | | </subviews> |
| | | </stackView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="RAp-2w-eQZ" firstAttribute="leading" secondItem="Ek4-ol-Kwt" secondAttribute="leading" constant="14" id="98L-lP-7L9"/> |
| | | <constraint firstAttribute="trailing" secondItem="CXW-eJ-9qe" secondAttribute="trailing" constant="53" id="GW1-lv-oN9"/> |
| | | <constraint firstItem="CXW-eJ-9qe" firstAttribute="leading" secondItem="Ek4-ol-Kwt" secondAttribute="leading" constant="14" id="RKt-uT-fh2"/> |
| | | <constraint firstItem="RAp-2w-eQZ" firstAttribute="top" secondItem="CXW-eJ-9qe" secondAttribute="bottom" id="XEQ-sf-I56"/> |
| | | <constraint firstAttribute="height" constant="105" id="Xj4-xu-u70"/> |
| | | <constraint firstItem="ae0-Ig-puo" firstAttribute="leading" secondItem="CXW-eJ-9qe" secondAttribute="trailing" id="aEz-jx-oTK"/> |
| | | <constraint firstItem="CXW-eJ-9qe" firstAttribute="top" secondItem="Ek4-ol-Kwt" secondAttribute="top" constant="15" id="eAf-pr-old"/> |
| | | <constraint firstAttribute="bottom" secondItem="RAp-2w-eQZ" secondAttribute="bottom" id="fdT-0M-4u5"/> |
| | | <constraint firstAttribute="trailing" secondItem="ae0-Ig-puo" secondAttribute="trailing" id="h4Z-5Y-Cpt"/> |
| | | <constraint firstItem="ae0-Ig-puo" firstAttribute="bottom" secondItem="CXW-eJ-9qe" secondAttribute="bottom" id="s4c-7m-Wpt"/> |
| | | <constraint firstItem="ae0-Ig-puo" firstAttribute="top" secondItem="CXW-eJ-9qe" secondAttribute="top" id="wBa-In-t7T"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset"> |
| | | <size key="value" width="0.0" height="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="shadowColor"> |
| | | <color key="value" red="0.87450980389999999" green="0.87450980389999999" blue="0.87450980389999999" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="Ek4-ol-Kwt" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="9If-Sf-EKU"/> |
| | | <constraint firstItem="Ek4-ol-Kwt" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="UVo-c1-zQd"/> |
| | | <constraint firstAttribute="trailing" secondItem="Ek4-ol-Kwt" secondAttribute="trailing" id="pOT-gq-tRk"/> |
| | | </constraints> |
| | | <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> |
| | | <connections> |
| | | <outlet property="btn_condition" destination="g0f-NI-dTH" id="tV5-1H-D9h"/> |
| | | <outlet property="btn_hot" destination="fJe-vk-DMh" id="Xtv-FB-qlb"/> |
| | | <outlet property="btn_point" destination="UqK-cy-hEv" id="QRi-Xq-lWy"/> |
| | | <outlet property="btn_search" destination="ae0-Ig-puo" id="g1g-Na-9EG"/> |
| | | <outlet property="tf_search" destination="ZL5-mj-nIt" id="7eB-4q-NQf"/> |
| | | </connections> |
| | | <point key="canvasLocation" x="139.69465648854961" y="-238.02816901408451"/> |
| | | </view> |
| | | </objects> |
| | | <resources> |
| | | <image name="icon_down_arrow" width="13" height="8"/> |
| | | <image name="icon_down_arrow_s" width="13" height="8"/> |
| | | <image name="icon_search" width="17" height="17"/> |
| | | <image name="icon_sort_normal" width="9" height="12"/> |
| | | <namedColor name="FE6E0D"> |
| | | <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
| | |
| | | import JQTools |
| | | |
| | | class LoginVC: BaseVC { |
| | | |
| | | @IBOutlet weak var btn_pwdLogin: UIButton! |
| | | @IBOutlet weak var btn_smsCodeLogin: UIButton! |
| | | |
| | | @IBOutlet weak var tf_phone: QMUITextField! |
| | | @IBOutlet weak var tf_verify: QMUITextField! |
| | | @IBOutlet weak var btn_getCode: UIButton! |
| | | @IBOutlet weak var btn_eye: UIButton! |
| | | @IBOutlet weak var btn_wechat: QMUIButton! |
| | | @IBOutlet weak var textView_treaty: UITextView! |
| | | @IBOutlet weak var btn_login: UIButton! |
| | | @IBOutlet weak var btn_register: UIButton! |
| | | @IBOutlet weak var cons_registerCenterX: NSLayoutConstraint! |
| | | @IBOutlet weak var cons_loginCenterX: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_reader: UIButton! |
| | | @IBOutlet weak var cons_stackHei: NSLayoutConstraint! |
| | | @IBOutlet weak var stack_handleView: UIStackView! |
| | | @IBOutlet weak var view_threeParty: UIView! |
| | | |
| | | |
| | | @IBOutlet weak var cons_loginWidth: NSLayoutConstraint! |
| | | private let loginType = BehaviorRelay<LoginType>(value: .pwd) |
| | | @IBOutlet weak var btn_pwdLogin: UIButton! |
| | | @IBOutlet weak var btn_smsCodeLogin: UIButton! |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | | |
| | | view_threeParty.isHidden = !WXApi.isWXAppInstalled() |
| | | btn_wechat.imagePosition = .top |
| | | btn_wechat.spacingBetweenImageAndTitle = 8 |
| | | |
| | | |
| | | textView_treaty.isEditable = false |
| | | textView_treaty.linkTextAttributes = [.foregroundColor:UIColor(hexStr: "#3a9edc").withAlphaComponent(0.8)] |
| | | let paragraphStyle = NSMutableParagraphStyle() |
| | | paragraphStyle.lineBreakMode = NSLineBreakMode.byCharWrapping |
| | | paragraphStyle.lineSpacing = 5 |
| | | |
| | | let content = "我已阅读并同意\n《隐私协议》\n《用户协议》\n《运动安全告知书》" |
| | | let attribute = NSMutableAttributedString(string: content) |
| | | attribute.addAttribute(.foregroundColor, value: UIColor.black.withAlphaComponent(0.6), range: NSRange(location: 0, length: content.count)) |
| | | attribute.addAttribute(.font, value: UIFont.systemFont(ofSize: 12, weight: .medium), range: NSRange(location: 0, length: content.count)) |
| | | attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://treaty")!], range: content.jq_subRange("《隐私协议》")!) |
| | | attribute.addAttribute(NSAttributedString.Key.underlineStyle, value: NSNumber(value:NSUnderlineStyle.single.rawValue), range: content.jq_subRange("《隐私协议》")!) |
| | | attribute.addAttribute(.underlineColor, value: UIColor(hexStr: "#3a9edc"), range: content.jq_subRange("《隐私协议》")!) |
| | | |
| | | attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://user")!], range: content.jq_subRange("《用户协议》")!) |
| | | attribute.addAttribute(NSAttributedString.Key.underlineStyle, value: NSNumber(value:NSUnderlineStyle.single.rawValue), range: content.jq_subRange("《用户协议》")!) |
| | | attribute.addAttribute(.underlineColor, value: UIColor(hexStr: "#3a9edc"), range: content.jq_subRange("《用户协议》")!) |
| | | @IBOutlet weak var tf_phone: QMUITextField! |
| | | @IBOutlet weak var tf_verify: QMUITextField! |
| | | @IBOutlet weak var btn_getCode: UIButton! |
| | | @IBOutlet weak var btn_eye: UIButton! |
| | | @IBOutlet weak var btn_wechat: QMUIButton! |
| | | @IBOutlet weak var textView_treaty: UITextView! |
| | | @IBOutlet weak var btn_login: UIButton! |
| | | @IBOutlet weak var btn_register: UIButton! |
| | | @IBOutlet weak var cons_registerCenterX: NSLayoutConstraint! |
| | | @IBOutlet weak var cons_loginCenterX: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_reader: UIButton! |
| | | @IBOutlet weak var cons_stackHei: NSLayoutConstraint! |
| | | @IBOutlet weak var stack_handleView: UIStackView! |
| | | @IBOutlet weak var view_threeParty: UIView! |
| | | |
| | | |
| | | attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://sportSafety")!], range: content.jq_subRange("《运动安全告知书》")!) |
| | | attribute.addAttribute(NSAttributedString.Key.underlineStyle, value: NSNumber(value:NSUnderlineStyle.single.rawValue), range: content.jq_subRange("《运动安全告知书》")!) |
| | | attribute.addAttribute(.underlineColor, value: UIColor(hexStr: "#3a9edc"), range: content.jq_subRange("《运动安全告知书》")!) |
| | | @IBOutlet weak var cons_loginWidth: NSLayoutConstraint! |
| | | private let loginType = BehaviorRelay<LoginType>(value: .pwd) |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | | |
| | | view_threeParty.isHidden = !WXApi.isWXAppInstalled() |
| | | btn_wechat.imagePosition = .top |
| | | btn_wechat.spacingBetweenImageAndTitle = 8 |
| | | |
| | | |
| | | attribute.addAttributes([.paragraphStyle:paragraphStyle], range: _NSRange(location: 0, length: content.count)) |
| | | self.textView_treaty.attributedText = attribute |
| | | self.textView_treaty.delegate = self |
| | | textView_treaty.isEditable = false |
| | | textView_treaty.linkTextAttributes = [.foregroundColor:UIColor(hexStr: "#3a9edc").withAlphaComponent(0.8)] |
| | | let paragraphStyle = NSMutableParagraphStyle() |
| | | paragraphStyle.lineBreakMode = NSLineBreakMode.byCharWrapping |
| | | paragraphStyle.lineSpacing = 5 |
| | | |
| | | btn_login.localGradientColor(cornerRadius: 20) |
| | | } |
| | | |
| | | override func setRx() { |
| | | loginType.subscribe(onNext: { [weak self] type in |
| | | guard let weakSelf = self else {return} |
| | | weakSelf.tf_verify.text = "" |
| | | weakSelf.btn_getCode.isHidden = type == .pwd |
| | | weakSelf.btn_eye.isHidden = type == .smsCode |
| | | switch type { |
| | | case .pwd: |
| | | weakSelf.tf_verify.isSecureTextEntry = !weakSelf.btn_eye.isSelected |
| | | weakSelf.tf_verify.keyboardType = .default |
| | | weakSelf.tf_verify.maximumTextLength = 18 |
| | | weakSelf.tf_verify.placeholder = "请输入密码" |
| | | case .smsCode: |
| | | weakSelf.tf_verify.isSecureTextEntry = false |
| | | weakSelf.tf_verify.keyboardType = .numberPad |
| | | weakSelf.tf_verify.maximumTextLength = 6 |
| | | weakSelf.tf_verify.placeholder = "请输入验证码" |
| | | } |
| | | |
| | | }).disposed(by: disposeBag) |
| | | |
| | | } |
| | | let content = "我已阅读并同意\n《隐私协议》\n《用户协议》\n《运动安全告知书》" |
| | | let attribute = NSMutableAttributedString(string: content) |
| | | attribute.addAttribute(.foregroundColor, value: UIColor.black.withAlphaComponent(0.6), range: NSRange(location: 0, length: content.count)) |
| | | attribute.addAttribute(.font, value: UIFont.systemFont(ofSize: 12, weight: .medium), range: NSRange(location: 0, length: content.count)) |
| | | attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://treaty")!], range: content.jq_subRange("《隐私协议》")!) |
| | | attribute.addAttribute(NSAttributedString.Key.underlineStyle, value: NSNumber(value:NSUnderlineStyle.single.rawValue), range: content.jq_subRange("《隐私协议》")!) |
| | | attribute.addAttribute(.underlineColor, value: UIColor(hexStr: "#3a9edc"), range: content.jq_subRange("《隐私协议》")!) |
| | | |
| | | @IBAction func exchangeLoginTypeAction(_ sender: UIButton) { |
| | | btn_pwdLogin.isSelected = sender.tag == 10 |
| | | btn_smsCodeLogin.isSelected = sender.tag == 11 |
| | | let type:LoginType = sender.tag == 10 ? .pwd:.smsCode |
| | | loginType.accept(type) |
| | | |
| | | cons_registerCenterX.constant = btn_pwdLogin.isSelected ? -82:0 |
| | | cons_loginCenterX.constant = btn_pwdLogin.isSelected ? 82:0 |
| | | cons_loginWidth.constant = btn_pwdLogin.isSelected ? 144:189 |
| | | |
| | | let str = btn_pwdLogin.isSelected ? "登录":"注册/登录" |
| | | |
| | | self.cons_stackHei.constant = self.btn_pwdLogin.isSelected ? 25:0 |
| | | attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://user")!], range: content.jq_subRange("《用户协议》")!) |
| | | attribute.addAttribute(NSAttributedString.Key.underlineStyle, value: NSNumber(value:NSUnderlineStyle.single.rawValue), range: content.jq_subRange("《用户协议》")!) |
| | | attribute.addAttribute(.underlineColor, value: UIColor(hexStr: "#3a9edc"), range: content.jq_subRange("《用户协议》")!) |
| | | |
| | | UIView.animate(withDuration: 0.4) { |
| | | self.view.layoutIfNeeded() |
| | | self.btn_login.setTitle(str, for: .normal) |
| | | if self.btn_pwdLogin.isSelected{ |
| | | self.stack_handleView.alpha = 1 |
| | | self.btn_login.localGradientColor(cornerRadius: 20,bounds: CGRect(x: 0, y: 0, width: 144, height: 40)) |
| | | }else{ |
| | | self.stack_handleView.alpha = 0 |
| | | self.btn_login.localGradientColor(cornerRadius: 20,bounds: CGRect(x: 0, y: 0, width: 189, height: 40)) |
| | | } |
| | | } completion: { _ in |
| | | self.tf_verify.text = "" |
| | | self.view.endEditing(false) |
| | | } |
| | | } |
| | | |
| | | @IBAction func eyeAction(_ sender: UIButton) { |
| | | sender.isSelected = !sender.isSelected |
| | | if loginType.value == .pwd{ |
| | | tf_verify.isSecureTextEntry = !sender.isSelected |
| | | } |
| | | } |
| | | |
| | | @IBAction func getCodeAction(_ sender: UIButton) { |
| | | guard !tf_phone.text!.isEmpty else {alertError(msg: tf_phone.placeholder!);return} |
| | | guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的手机号");return} |
| | | Services.getSMSCode(phone: tf_phone.text!, type: .login).subscribe(onNext: {data in |
| | | if data.code == 200{ |
| | | sender.openCountDown() |
| | | }else{ |
| | | alertError(msg: data.msg) |
| | | } |
| | | }) { error in |
| | | alertError(msg: error.localizedDescription) |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func loginAction(_ sender: UIButton) { |
| | | attribute.addAttributes([NSAttributedString.Key.link:URL(string: "tip://sportSafety")!], range: content.jq_subRange("《运动安全告知书》")!) |
| | | attribute.addAttribute(NSAttributedString.Key.underlineStyle, value: NSNumber(value:NSUnderlineStyle.single.rawValue), range: content.jq_subRange("《运动安全告知书》")!) |
| | | attribute.addAttribute(.underlineColor, value: UIColor(hexStr: "#3a9edc"), range: content.jq_subRange("《运动安全告知书》")!) |
| | | |
| | | let type = loginType.value |
| | | guard !tf_phone.text!.isEmpty else {alertError(msg: tf_phone.placeholder!);return} |
| | | guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的手机号");return} |
| | | guard !tf_verify.text!.isEmpty else {alertError(msg: tf_verify.placeholder!);return} |
| | | guard btn_reader.isSelected else {alert(msg: "请阅读并同意《隐私协议》《用户协议》《运动安全告知书》");return} |
| | | |
| | | Services.login(phone: tf_phone.text!, verity: tf_verify.text!, type: type).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | if let token = data.data{ |
| | | UserViewModel.saveToken(token) |
| | | Services.userDetails().subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | if let m = data.data{ |
| | | //需要修改密码 |
| | | if m.needChange == 1{ |
| | | let vc = LoginRegOrForgotVC(type: .updatePwd,force: weakSelf.tf_phone.text!) |
| | | self?.push(vc: vc) |
| | | }else{ |
| | | m.save() |
| | | app.registerAndLoginSuccess() |
| | | } |
| | | } |
| | | }) { error in |
| | | attribute.addAttributes([.paragraphStyle:paragraphStyle], range: _NSRange(location: 0, length: content.count)) |
| | | self.textView_treaty.attributedText = attribute |
| | | self.textView_treaty.delegate = self |
| | | |
| | | }.disposed(by: weakSelf.disposeBag) |
| | | } |
| | | }) { error in |
| | | btn_login.localGradientColor(cornerRadius: 20) |
| | | } |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func updatePwdAction(_ sender: UIButton) { |
| | | let vc = LoginRegOrForgotVC(type: .updatePwd) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func forgotPwdAction(_ sender: UIButton) { |
| | | let vc = LoginRegOrForgotVC(type: .forgotPwd) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func registerAction(_ sender: UIButton) { |
| | | guard btn_reader.isSelected else {alert(msg: "请阅读并同意《隐私协议》《用户协议》《运动安全告知书》");return} |
| | | let vc = LoginRegOrForgotVC(type: .register) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | |
| | | @IBAction func readAgreentAction(_ sender: UIButton) { |
| | | override func setRx() { |
| | | loginType.subscribe(onNext: { [weak self] type in |
| | | guard let weakSelf = self else {return} |
| | | weakSelf.tf_verify.text = "" |
| | | weakSelf.btn_getCode.isHidden = type == .pwd |
| | | weakSelf.btn_eye.isHidden = type == .smsCode |
| | | switch type { |
| | | case .pwd: |
| | | weakSelf.tf_verify.isSecureTextEntry = !weakSelf.btn_eye.isSelected |
| | | weakSelf.tf_verify.keyboardType = .default |
| | | weakSelf.tf_verify.maximumTextLength = 18 |
| | | weakSelf.tf_verify.placeholder = "请输入密码" |
| | | case .smsCode: |
| | | weakSelf.tf_verify.isSecureTextEntry = false |
| | | weakSelf.tf_verify.keyboardType = .numberPad |
| | | weakSelf.tf_verify.maximumTextLength = 6 |
| | | weakSelf.tf_verify.placeholder = "请输入验证码" |
| | | } |
| | | |
| | | var temp = [String]() |
| | | }).disposed(by: disposeBag) |
| | | |
| | | let v1 = UserDefaults.standard.value(forKey: "agreent_1") |
| | | let v2 = UserDefaults.standard.value(forKey: "agreent_2") |
| | | let v3 = UserDefaults.standard.value(forKey: "agreent_3") |
| | | } |
| | | |
| | | if v1 == nil{temp.append("《隐私协议》")} |
| | | if v2 == nil{temp.append("《用户协议》")} |
| | | if v3 == nil{temp.append("《运动营告知书》")} |
| | | @IBAction func exchangeLoginTypeAction(_ sender: UIButton) { |
| | | btn_pwdLogin.isSelected = sender.tag == 10 |
| | | btn_smsCodeLogin.isSelected = sender.tag == 11 |
| | | let type:LoginType = sender.tag == 10 ? .pwd:.smsCode |
| | | loginType.accept(type) |
| | | |
| | | if temp.count > 0{ |
| | | alert(msg: String(format: "请阅读并同意 %@", temp.joined(separator: ",")));return |
| | | } |
| | | cons_registerCenterX.constant = btn_pwdLogin.isSelected ? -82:0 |
| | | cons_loginCenterX.constant = btn_pwdLogin.isSelected ? 82:0 |
| | | cons_loginWidth.constant = btn_pwdLogin.isSelected ? 144:189 |
| | | |
| | | sender.isSelected = !sender.isSelected |
| | | } |
| | | |
| | | @IBAction func wechatLoginAcion(_ sender: QMUIButton) { |
| | | guard btn_reader.isSelected else {alert(msg: "请阅读并同意《隐私协议》《用户协议》《运动安全告知书》");return} |
| | | showHUD() |
| | | WeChatTools.sendAuthRequest() |
| | | } |
| | | |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .default |
| | | } |
| | | let str = btn_pwdLogin.isSelected ? "登录":"注册/登录" |
| | | |
| | | override var shouldAutorotate: Bool{ |
| | | return false |
| | | } |
| | | self.cons_stackHei.constant = self.btn_pwdLogin.isSelected ? 25:0 |
| | | |
| | | UIView.animate(withDuration: 0.4) { |
| | | self.view.layoutIfNeeded() |
| | | self.btn_login.setTitle(str, for: .normal) |
| | | if self.btn_pwdLogin.isSelected{ |
| | | self.stack_handleView.alpha = 1 |
| | | self.btn_login.localGradientColor(cornerRadius: 20,bounds: CGRect(x: 0, y: 0, width: 144, height: 40)) |
| | | }else{ |
| | | self.stack_handleView.alpha = 0 |
| | | self.btn_login.localGradientColor(cornerRadius: 20,bounds: CGRect(x: 0, y: 0, width: 189, height: 40)) |
| | | } |
| | | } completion: { _ in |
| | | self.tf_verify.text = "" |
| | | self.view.endEditing(false) |
| | | } |
| | | } |
| | | |
| | | @IBAction func eyeAction(_ sender: UIButton) { |
| | | sender.isSelected = !sender.isSelected |
| | | if loginType.value == .pwd{ |
| | | tf_verify.isSecureTextEntry = !sender.isSelected |
| | | } |
| | | } |
| | | |
| | | @IBAction func getCodeAction(_ sender: UIButton) { |
| | | guard !tf_phone.text!.isEmpty else {alertError(msg: tf_phone.placeholder!);return} |
| | | guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的手机号");return} |
| | | Services.getSMSCode(phone: tf_phone.text!, type: .login).subscribe(onNext: {data in |
| | | if data.code == 200{ |
| | | sender.openCountDown() |
| | | }else{ |
| | | alertError(msg: data.msg) |
| | | } |
| | | }) { error in |
| | | alertError(msg: error.localizedDescription) |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func loginAction(_ sender: UIButton) { |
| | | |
| | | let type = loginType.value |
| | | guard !tf_phone.text!.isEmpty else {alertError(msg: tf_phone.placeholder!);return} |
| | | guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的手机号");return} |
| | | guard !tf_verify.text!.isEmpty else {alertError(msg: tf_verify.placeholder!);return} |
| | | |
| | | #if !DEBUG |
| | | guard btn_reader.isSelected else {alert(msg: "请阅读并同意《隐私协议》《用户协议》《运动安全告知书》");return} |
| | | #endif |
| | | |
| | | |
| | | Services.login(phone: tf_phone.text!, verity: tf_verify.text!, type: type).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | if let token = data.data{ |
| | | UserViewModel.saveToken(token) |
| | | Services.userDetails().subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | if let m = data.data{ |
| | | //需要修改密码 |
| | | if m.needChange == 1{ |
| | | let vc = LoginRegOrForgotVC(type: .updatePwd,force: weakSelf.tf_phone.text!) |
| | | self?.push(vc: vc) |
| | | }else{ |
| | | m.save() |
| | | app.registerAndLoginSuccess() |
| | | } |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: weakSelf.disposeBag) |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func updatePwdAction(_ sender: UIButton) { |
| | | let vc = LoginRegOrForgotVC(type: .updatePwd) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func forgotPwdAction(_ sender: UIButton) { |
| | | let vc = LoginRegOrForgotVC(type: .forgotPwd) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func registerAction(_ sender: UIButton) { |
| | | guard btn_reader.isSelected else {alert(msg: "请阅读并同意《隐私协议》《用户协议》《运动安全告知书》");return} |
| | | let vc = LoginRegOrForgotVC(type: .register) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | |
| | | @IBAction func readAgreentAction(_ sender: UIButton) { |
| | | |
| | | var temp = [String]() |
| | | |
| | | let v1 = UserDefaults.standard.value(forKey: "agreent_1") |
| | | let v2 = UserDefaults.standard.value(forKey: "agreent_2") |
| | | let v3 = UserDefaults.standard.value(forKey: "agreent_3") |
| | | |
| | | if v1 == nil{temp.append("《隐私协议》")} |
| | | if v2 == nil{temp.append("《用户协议》")} |
| | | if v3 == nil{temp.append("《运动营告知书》")} |
| | | |
| | | if temp.count > 0{ |
| | | alert(msg: String(format: "请阅读并同意 %@", temp.joined(separator: ",")));return |
| | | } |
| | | |
| | | sender.isSelected = !sender.isSelected |
| | | } |
| | | |
| | | @IBAction func wechatLoginAcion(_ sender: QMUIButton) { |
| | | guard btn_reader.isSelected else {alert(msg: "请阅读并同意《隐私协议》《用户协议》《运动安全告知书》");return} |
| | | showHUD() |
| | | WeChatTools.sendAuthRequest() |
| | | } |
| | | |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .default |
| | | } |
| | | |
| | | override var shouldAutorotate: Bool{ |
| | | return false |
| | | } |
| | | } |
| | | |
| | | extension LoginVC:UITextViewDelegate{ |
| | | func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { |
| | | func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { |
| | | |
| | | var str:String = "" |
| | | var str:String = "" |
| | | |
| | | if #available(iOS 16.0, *) { |
| | | str = URL.host(percentEncoded: true)! |
| | | } else { |
| | | str = URL.host! |
| | | } |
| | | if #available(iOS 16.0, *) { |
| | | str = URL.host(percentEncoded: true)! |
| | | } else { |
| | | str = URL.host! |
| | | } |
| | | |
| | | switch str { |
| | | case "treaty": |
| | | push(vc: CommonWebVC(type: .privacy)) |
| | | case "user": |
| | | push(vc: CommonWebVC(type: .user)) |
| | | case "sportSafety": |
| | | push(vc: CommonWebVC(type: .safe)) |
| | | default:break |
| | | } |
| | | return true |
| | | } |
| | | switch str { |
| | | case "treaty": |
| | | push(vc: CommonWebVC(type: .privacy)) |
| | | case "user": |
| | | push(vc: CommonWebVC(type: .user)) |
| | | case "sportSafety": |
| | | push(vc: CommonWebVC(type: .safe)) |
| | | default:break |
| | | } |
| | | return true |
| | | } |
| | | } |
| | |
| | | import JQTools |
| | | |
| | | class StudentInfo_2_TCell: UITableViewCell { |
| | | |
| | | @IBOutlet weak var img_radio: UIImageView! |
| | | @IBOutlet weak var btn_delete: UIButton! |
| | | @IBOutlet weak var btn_edit: UIButton! |
| | | |
| | | @IBOutlet weak var label_name: UILabel! |
| | | @IBOutlet weak var label_idCard: UILabel! |
| | | @IBOutlet weak var label_age: UILabel! |
| | | @IBOutlet weak var label_phone: UILabel! |
| | | @IBOutlet weak var view_container: UIView! |
| | | @IBOutlet weak var btn_verifiy: UIButton! |
| | | |
| | | var indexPath:IndexPath? |
| | | @IBOutlet weak var img_radio: UIImageView! |
| | | @IBOutlet weak var btn_delete: UIButton! |
| | | @IBOutlet weak var btn_edit: UIButton! |
| | | |
| | | var delClouse:((IndexPath)->Void)? |
| | | // var editClouse:((IndexPath)->Void)? |
| | | @IBOutlet weak var label_name: UILabel! |
| | | @IBOutlet weak var label_idCard: UILabel! |
| | | @IBOutlet weak var label_age: UILabel! |
| | | @IBOutlet weak var label_phone: UILabel! |
| | | @IBOutlet weak var view_container: UIView! |
| | | @IBOutlet weak var btn_verifiy: UIButton! |
| | | |
| | | var activityDetailPartModel:ActivityDetailPartModel!{ |
| | | didSet{ |
| | | label_name.text = activityDetailPartModel.name |
| | | label_idCard.text = activityDetailPartModel.idcard |
| | | label_age.text = "\(activityDetailPartModel.age)岁" |
| | | label_phone.text = activityDetailPartModel.phone |
| | | } |
| | | } |
| | | |
| | | var isChoose:Bool!{ |
| | | didSet{ |
| | | img_radio.isHidden = !isChoose |
| | | btn_delete.isHidden = isChoose |
| | | btn_edit.isHidden = isChoose |
| | | } |
| | | } |
| | | var indexPath:IndexPath? |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | selectionStyle = .none |
| | | } |
| | | |
| | | @IBAction func editAction(_ sender: UIButton) { |
| | | StudentUpdateInfoView.show(activityDetailPartModel) |
| | | } |
| | | var delClouse:((IndexPath)->Void)? |
| | | // var editClouse:((IndexPath)->Void)? |
| | | |
| | | var activityDetailPartModel:ActivityDetailPartModel!{ |
| | | didSet{ |
| | | label_name.text = activityDetailPartModel.name |
| | | label_idCard.text = activityDetailPartModel.idcard |
| | | label_age.text = "\(activityDetailPartModel.age)岁" |
| | | label_phone.text = activityDetailPartModel.phone |
| | | } |
| | | } |
| | | |
| | | var isChoose:Bool!{ |
| | | didSet{ |
| | | img_radio.isHidden = !isChoose |
| | | btn_delete.isHidden = isChoose |
| | | btn_edit.isHidden = isChoose |
| | | } |
| | | } |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | selectionStyle = .none |
| | | } |
| | | |
| | | @IBAction func editAction(_ sender: UIButton) { |
| | | StudentUpdateInfoView.show(activityDetailPartModel) |
| | | } |
| | | |
| | | |
| | | @IBAction func delAction(_ sender: UIButton) { |
| | | if let index = indexPath{ |
| | | delClouse?(index) |
| | | } |
| | | } |
| | | @IBAction func delAction(_ sender: UIButton) { |
| | | if let index = indexPath{ |
| | | delClouse?(index) |
| | | } |
| | | } |
| | | |
| | | @IBAction func verifyAction(_ sender: UIButton) { |
| | | let vc = AddStudentVC(activityDetailPartModel: activityDetailPartModel) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | } |
| | | @IBAction func verifyAction(_ sender: UIButton) { |
| | | let vc = AddStudentVC(activityDetailPartModel: activityDetailPartModel) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | } |
| | | } |
| | |
| | | import JQTools |
| | | |
| | | class ProfileVC: BaseVC { |
| | | @IBOutlet weak var btn_userProfile: UIButton! |
| | | @IBOutlet weak var tf_username: UITextField! |
| | | @IBOutlet weak var label_contact: UILabel! |
| | | @IBOutlet weak var tf_gender: UITextField! |
| | | @IBOutlet weak var tf_birthday: UITextField! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_vipDutime: UILabel! |
| | | @IBOutlet weak var view_vipExpired: UIView! |
| | | |
| | | private var profileImg:UIImage? |
| | | @IBOutlet weak var btn_userProfile: UIButton! |
| | | @IBOutlet weak var tf_username: UITextField! |
| | | @IBOutlet weak var label_contact: UILabel! |
| | | @IBOutlet weak var tf_gender: UITextField! |
| | | @IBOutlet weak var tf_birthday: UITextField! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_vipDutime: UILabel! |
| | | @IBOutlet weak var view_vipExpired: UIView! |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | private var profileImg:UIImage? |
| | | |
| | | title = "个人信息" |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | tf_gender.delegate = self |
| | | tf_birthday.delegate = self |
| | | title = "个人信息" |
| | | |
| | | Services.userDetails().subscribe(onNext: {[weak self] data in |
| | | if let model = data.data{ |
| | | self?.tf_username.text = model.userName |
| | | self?.label_contact.text = model.userPhone |
| | | self?.tf_gender.text = model.sex |
| | | self?.tf_birthday.text = model.birthday |
| | | self?.label_address.text = model.address |
| | | self?.label_vipDutime.text = model.memberLifespan |
| | | self?.btn_userProfile.sd_setImage(with: URL(string: model.userImage), for: .normal,placeholderImage: UIImage(named: "btn_userProfile")) |
| | | self?.view_vipExpired.isHidden = model.isVip == 0 |
| | | } |
| | | tf_gender.delegate = self |
| | | tf_birthday.delegate = self |
| | | |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | Services.userDetails().subscribe(onNext: {[weak self] data in |
| | | if let model = data.data{ |
| | | self?.tf_username.text = model.userName |
| | | self?.label_contact.text = model.userPhone |
| | | self?.tf_gender.text = model.sex |
| | | self?.tf_birthday.text = model.birthday |
| | | self?.label_address.text = model.address |
| | | self?.label_vipDutime.text = model.memberLifespan |
| | | self?.btn_userProfile.sd_setImage(with: URL(string: model.userImage), for: .normal,placeholderImage: UIImage(named: "btn_userProfile")) |
| | | self?.view_vipExpired.isHidden = model.isVip == 0 |
| | | } |
| | | |
| | | override func setRx() { |
| | | tf_username.rx.controlEvent(.editingDidEnd).subscribe(onNext: {[weak self] () in |
| | | guard let weakSelf = self else { return } |
| | | if weakSelf.tf_username.isEmpty{ |
| | | alertError(msg: "请输入用户名称");return |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | Services.updateInfo(birthday: nil, gender: nil, name: weakSelf.tf_username.text).subscribe(onNext: {[weak self] data in |
| | | self?.updateUserInfo() |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | override func setRx() { |
| | | tf_username.rx.controlEvent(.editingDidEnd).subscribe(onNext: {[weak self] () in |
| | | guard let weakSelf = self else { return } |
| | | if weakSelf.tf_username.isEmpty{ |
| | | alertError(msg: "请输入用户名称");return |
| | | } |
| | | |
| | | private func updateUserInfo(){ |
| | | Services.userDetails().subscribe(onNext: {data in |
| | | if let m = data.data{m.save()} |
| | | alertSuccess(msg: "修改成功") |
| | | NotificationCenter.default.post(name: UpdateWelfare_Noti, object: nil) |
| | | }) { error in |
| | | Services.updateInfo(birthday: nil, gender: nil, name: weakSelf.tf_username.text).subscribe(onNext: {[weak self] data in |
| | | self?.updateUserInfo() |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | private func updateUserInfo(){ |
| | | Services.userDetails().subscribe(onNext: {data in |
| | | if let m = data.data{m.save()} |
| | | alertSuccess(msg: "修改成功") |
| | | NotificationCenter.default.post(name: UpdateWelfare_Noti, object: nil) |
| | | }) { error in |
| | | |
| | | @IBAction func logoutAction(_ sender: UIButton) { |
| | | CommonAlertView.show(title: "提示", content: "确认退出当前账号?",cancelStr: "关闭",completeStr: nil,isSingle: false) { status in |
| | | if status{ |
| | | UserViewModel.clearToken() |
| | | app.needLogin() |
| | | } |
| | | } |
| | | } |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func logOffAction(_ sender: Any) { |
| | | let vc = LogOffVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func logoutAction(_ sender: UIButton) { |
| | | CommonAlertView.show(title: "提示", content: "确认退出当前账号?",cancelStr: "关闭",completeStr: nil,isSingle: false) { status in |
| | | if status{ |
| | | UserViewModel.clearToken() |
| | | app.needLogin() |
| | | } |
| | | } |
| | | } |
| | | |
| | | @IBAction func updateProfileAction(_ sender: UIButton) { |
| | | JQ_ImagePickerTool.getSharedInstance().singleImage({ image in |
| | | self.profileImg = image |
| | | self.btn_userProfile.setImage(image, for: .normal) |
| | | image.uploadImgToService().subscribe { text in |
| | | Services.updateUserProfile(text).subscribe(onNext: {[weak self] _ in |
| | | guard let weakSelf = self else { return } |
| | | alertSuccess(msg: "修改成功") |
| | | self?.btn_userProfile.sd_setImage(with: URL(string: text), for: .normal,placeholderImage: UIImage(named: "btn_userProfile")) |
| | | Services.userDetails().subscribe(onNext: {data in |
| | | if let m = data.data{m.save()} |
| | | alertSuccess(msg: "修改成功") |
| | | NotificationCenter.default.post(name: UpdateWelfare_Noti, object: nil) |
| | | }) { error in |
| | | @IBAction func logOffAction(_ sender: Any) { |
| | | let vc = LogOffVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | }.disposed(by: weakSelf.disposeBag) |
| | | }) { error in |
| | | alertError(msg: error.localizedDescription) |
| | | }.disposed(by: self.disposeBag) |
| | | } onError: { error in |
| | | alertError(msg: error.localizedDescription) |
| | | }.disposed(by: self.disposeBag) |
| | | }, clipSize: CGSize(width: JQ_ScreenW, height: JQ_ScreenW)) |
| | | } |
| | | |
| | | @IBAction func dismissAccountAction(_ sender: UIButton) { |
| | | @IBAction func updateProfileAction(_ sender: UIButton) { |
| | | JQ_ImagePickerTool.getSharedInstance().singleImage({ image in |
| | | self.profileImg = image |
| | | self.btn_userProfile.setImage(image, for: .normal) |
| | | image.uploadImgToService().subscribe { text in |
| | | Services.updateUserProfile(text).subscribe(onNext: {[weak self] _ in |
| | | guard let weakSelf = self else { return } |
| | | alertSuccess(msg: "修改成功") |
| | | self?.btn_userProfile.sd_setImage(with: URL(string: text), for: .normal,placeholderImage: UIImage(named: "btn_userProfile")) |
| | | Services.userDetails().subscribe(onNext: {data in |
| | | if let m = data.data{m.save()} |
| | | alertSuccess(msg: "修改成功") |
| | | NotificationCenter.default.post(name: UpdateWelfare_Noti, object: nil) |
| | | }) { error in |
| | | |
| | | } |
| | | }.disposed(by: weakSelf.disposeBag) |
| | | }) { error in |
| | | alertError(msg: error.localizedDescription) |
| | | }.disposed(by: self.disposeBag) |
| | | } onError: { error in |
| | | alertError(msg: error.localizedDescription) |
| | | }.disposed(by: self.disposeBag) |
| | | }, clipSize: CGSize(width: JQ_ScreenW, height: JQ_ScreenW)) |
| | | } |
| | | |
| | | @IBAction func dismissAccountAction(_ sender: UIButton) { |
| | | |
| | | } |
| | | } |
| | | |
| | | extension ProfileVC:UITextFieldDelegate{ |
| | | func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
| | | view.endEditing(true) |
| | | if textField == tf_gender{ |
| | | let items = ["男","女"] |
| | | CommonAlertSheetView.show(items: items) {[weak self] index in |
| | | guard let weakSelf = self else { return } |
| | | guard textField.text != items[index] else {return} |
| | | textField.text = items[index] |
| | | var gender:GenderType! |
| | | func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
| | | view.endEditing(true) |
| | | if textField == tf_gender{ |
| | | let items = ["男","女"] |
| | | CommonAlertSheetView.show(items: items) {[weak self] index in |
| | | guard let weakSelf = self else { return } |
| | | guard textField.text != items[index] else {return} |
| | | textField.text = items[index] |
| | | var gender:GenderType! |
| | | |
| | | if index == 0{ |
| | | gender = .man |
| | | }else{ |
| | | gender = .woman |
| | | if index == 0{ |
| | | gender = .man |
| | | }else{ |
| | | gender = .woman |
| | | } |
| | | |
| | | Services.updateInfo(birthday: nil, gender: gender.rawValue, name: nil).subscribe(onNext: {[weak self] data in |
| | | self?.updateUserInfo() |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | } |
| | | |
| | | if textField == tf_birthday{ |
| | | CommonDatePickerView.show(before: 60, after: 0, type: .YMD) {[weak self] year, month, day, _, _ in |
| | | guard let weakSelf = self else { return } |
| | | let date = String(format: "%ld-%02ld-%02ld", year!,month!,day!) |
| | | guard textField.text != date else {return} |
| | | textField.text = date |
| | | Services.updateInfo(birthday: textField.text, gender: nil, name: nil).subscribe(onNext: {[weak self] data in |
| | | self?.updateUserInfo() |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | } |
| | | return false |
| | | } |
| | | |
| | | Services.updateInfo(birthday: nil, gender: gender.rawValue, name: nil).subscribe(onNext: {[weak self] data in |
| | | self?.updateUserInfo() |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | } |
| | | |
| | | if textField == tf_birthday{ |
| | | CommonDatePickerView.show(before: 60, after: 0, type: .YMD) {[weak self] year, month, day, _, _ in |
| | | guard let weakSelf = self else { return } |
| | | let date = String(format: "%ld-%02ld-%02ld", year!,month!,day!) |
| | | guard textField.text != date else {return} |
| | | textField.text = date |
| | | Services.updateInfo(birthday: textField.text, gender: nil, name: nil).subscribe(onNext: {[weak self] data in |
| | | self?.updateUserInfo() |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | } |
| | | return false |
| | | } |
| | | } |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="SearchBannerCCell" customModule="WanPai" customModuleProvider="target"> |
| | | <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_SearchBannerCCell" id="gTV-IL-0wX" customClass="SearchBannerCCell" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="0.0" width="382" height="187"/> |
| | | <autoresizingMask key="autoresizingMask"/> |
| | | <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> |
New file |
| | |
| | | // |
| | | // MyQRCodeTCell.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/26. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class MyQRCodeTCell: UITableViewCell { |
| | | @IBOutlet weak var view_container: UIView! |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | // Initialization code |
| | | view_container.borderColor = UIColor(hexString: "#FD8602") |
| | | view_container.borderWidth = 1 |
| | | view_container.cornerRadius = 4 |
| | | selectionStyle = .none |
| | | } |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="_MyQRCodeTCell" rowHeight="207" id="KGk-i7-Jjw" customClass="MyQRCodeTCell" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="0.0" width="462" height="207"/> |
| | | <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
| | | <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> |
| | | <rect key="frame" x="0.0" y="0.0" width="462" height="207"/> |
| | | <autoresizingMask key="autoresizingMask"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OzX-LD-ebb"> |
| | | <rect key="frame" x="14" y="7" width="434" height="193"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="姓名:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DWx-WW-QMK"> |
| | | <rect key="frame" x="8" y="88" width="36" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Hlr-vD-idp"> |
| | | <rect key="frame" x="44" y="88" width="13.333333333333336" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KwF-AF-WE6"> |
| | | <rect key="frame" x="105.33333333333333" y="88" width="13.333333333333329" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="hOG-rl-POS"> |
| | | <rect key="frame" x="357" y="66.666666666666671" width="60" height="60"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="60" id="MdW-PM-sUS"/> |
| | | <constraint firstAttribute="width" constant="60" id="PTp-ML-UZf"/> |
| | | </constraints> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="年龄:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZFl-29-gbc"> |
| | | <rect key="frame" x="69.333333333333329" y="88" width="36" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="点击查看二维码" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Kr-Zx-4BQ"> |
| | | <rect key="frame" x="251" y="88" width="100" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.30980392156862746" green="0.30588235294117649" blue="0.30196078431372547" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="KwF-AF-WE6" firstAttribute="leading" secondItem="ZFl-29-gbc" secondAttribute="trailing" id="7aV-MS-9Iw"/> |
| | | <constraint firstItem="DWx-WW-QMK" firstAttribute="leading" secondItem="OzX-LD-ebb" secondAttribute="leading" constant="8" id="HC2-wx-Td9"/> |
| | | <constraint firstItem="Hlr-vD-idp" firstAttribute="leading" secondItem="DWx-WW-QMK" secondAttribute="trailing" id="Laa-j8-s7g"/> |
| | | <constraint firstItem="hOG-rl-POS" firstAttribute="leading" secondItem="4Kr-Zx-4BQ" secondAttribute="trailing" constant="6" id="TBX-Ot-GVW"/> |
| | | <constraint firstItem="DWx-WW-QMK" firstAttribute="centerY" secondItem="OzX-LD-ebb" secondAttribute="centerY" id="TF3-1A-eXd"/> |
| | | <constraint firstItem="ZFl-29-gbc" firstAttribute="leading" secondItem="Hlr-vD-idp" secondAttribute="trailing" constant="12" id="TNA-r7-InE"/> |
| | | <constraint firstItem="Hlr-vD-idp" firstAttribute="centerY" secondItem="DWx-WW-QMK" secondAttribute="centerY" id="bbG-vu-r9O"/> |
| | | <constraint firstItem="hOG-rl-POS" firstAttribute="centerY" secondItem="DWx-WW-QMK" secondAttribute="centerY" id="jaS-7D-1N9"/> |
| | | <constraint firstItem="4Kr-Zx-4BQ" firstAttribute="centerY" secondItem="DWx-WW-QMK" secondAttribute="centerY" id="uGo-RE-QzM"/> |
| | | <constraint firstItem="ZFl-29-gbc" firstAttribute="centerY" secondItem="DWx-WW-QMK" secondAttribute="centerY" id="vH0-Ra-M3e"/> |
| | | <constraint firstItem="KwF-AF-WE6" firstAttribute="centerY" secondItem="ZFl-29-gbc" secondAttribute="centerY" id="vpB-YO-2zI"/> |
| | | <constraint firstAttribute="trailing" secondItem="hOG-rl-POS" secondAttribute="trailing" constant="17" id="wan-ln-9Vq"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | <constraints> |
| | | <constraint firstAttribute="trailing" secondItem="OzX-LD-ebb" secondAttribute="trailing" constant="14" id="KzL-qb-i20"/> |
| | | <constraint firstItem="OzX-LD-ebb" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="7" id="XjE-QD-6BJ"/> |
| | | <constraint firstAttribute="bottom" secondItem="OzX-LD-ebb" secondAttribute="bottom" constant="7" id="elT-Vz-NzY"/> |
| | | <constraint firstItem="OzX-LD-ebb" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="mPB-aB-eKF"/> |
| | | </constraints> |
| | | </tableViewCellContentView> |
| | | <connections> |
| | | <outlet property="view_container" destination="OzX-LD-ebb" id="7ap-FZ-Wsy"/> |
| | | </connections> |
| | | <point key="canvasLocation" x="247.32824427480915" y="77.816901408450704"/> |
| | | </tableViewCell> |
| | | </objects> |
| | | <resources> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
New file |
| | |
| | | // |
| | | // StudentInfo_4_TCell.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/28. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class StudentInfo_4_TCell: UITableViewCell { |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="_StudentInfo_4_TCell" rowHeight="103" id="KGk-i7-Jjw" customClass="StudentInfo_4_TCell" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="0.0" width="403" height="103"/> |
| | | <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
| | | <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> |
| | | <rect key="frame" x="0.0" y="0.0" width="403" height="103"/> |
| | | <autoresizingMask key="autoresizingMask"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lrQ-mr-sWP"> |
| | | <rect key="frame" x="14" y="7" width="375" height="76"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="姓名:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eWZ-Em-PQG"> |
| | | <rect key="frame" x="10" y="13" width="36" height="20"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20" id="zFd-cz-VQz"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h4n-nl-K9g"> |
| | | <rect key="frame" x="46" y="14.666666666666668" width="13.333333333333336" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="身份证号:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Nm2-xJ-jxS"> |
| | | <rect key="frame" x="114" y="13" width="72" height="20"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20" id="B82-1y-Fbe"/> |
| | | <constraint firstAttribute="width" constant="72" id="o3i-lB-8Jp"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="tqb-xC-9qk"> |
| | | <rect key="frame" x="186" y="14.666666666666668" width="13.333333333333343" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="年龄:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eaR-JM-XUJ"> |
| | | <rect key="frame" x="10" y="44" width="36" height="20"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20" id="Y2c-YW-6sh"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Rtg-7l-b7G"> |
| | | <rect key="frame" x="46" y="45.666666666666664" width="13.333333333333336" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="联系电话:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HAc-KK-Chh"> |
| | | <rect key="frame" x="114" y="44" width="64.666666666666686" height="20"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20" id="iiL-jE-dh8"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z6w-gZ-omO"> |
| | | <rect key="frame" x="178.66666666666666" y="45.666666666666664" width="13.333333333333343" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="DCI-Sz-1AX"> |
| | | <rect key="frame" x="337" y="33" width="30" height="30"/> |
| | | <color key="backgroundColor" systemColor="systemGray5Color"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="30" id="aI6-s0-d6m"/> |
| | | <constraint firstAttribute="height" constant="30" id="f0E-c6-1a5"/> |
| | | </constraints> |
| | | </imageView> |
| | | </subviews> |
| | | <viewLayoutGuide key="safeArea" id="bhV-d6-1Sg"/> |
| | | <color key="backgroundColor" red="1" green="0.90588235289999997" blue="0.80000000000000004" alpha="0.080000000000000002" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstItem="Nm2-xJ-jxS" firstAttribute="leading" secondItem="lrQ-mr-sWP" secondAttribute="leading" constant="114" id="4dS-HB-dTR"/> |
| | | <constraint firstItem="eaR-JM-XUJ" firstAttribute="leading" secondItem="lrQ-mr-sWP" secondAttribute="leading" constant="10" id="88R-n9-FZs"/> |
| | | <constraint firstAttribute="trailing" secondItem="DCI-Sz-1AX" secondAttribute="trailing" constant="8" id="9Eh-QF-rOj"/> |
| | | <constraint firstAttribute="height" constant="76" id="9nc-TG-xhN"/> |
| | | <constraint firstItem="tqb-xC-9qk" firstAttribute="centerY" secondItem="Nm2-xJ-jxS" secondAttribute="centerY" id="Ld7-vd-fEr"/> |
| | | <constraint firstItem="eaR-JM-XUJ" firstAttribute="top" secondItem="eWZ-Em-PQG" secondAttribute="bottom" constant="11" id="Ry0-a6-onh"/> |
| | | <constraint firstItem="HAc-KK-Chh" firstAttribute="centerY" secondItem="eaR-JM-XUJ" secondAttribute="centerY" id="SbV-Dd-fbT"/> |
| | | <constraint firstItem="Nm2-xJ-jxS" firstAttribute="centerY" secondItem="eWZ-Em-PQG" secondAttribute="centerY" id="Tgd-B2-xAz"/> |
| | | <constraint firstItem="Rtg-7l-b7G" firstAttribute="leading" secondItem="eaR-JM-XUJ" secondAttribute="trailing" id="TiF-od-rsK"/> |
| | | <constraint firstItem="h4n-nl-K9g" firstAttribute="centerY" secondItem="eWZ-Em-PQG" secondAttribute="centerY" id="TyB-tL-JP3"/> |
| | | <constraint firstAttribute="bottom" secondItem="DCI-Sz-1AX" secondAttribute="bottom" constant="13" id="alz-VD-tW3"/> |
| | | <constraint firstItem="z6w-gZ-omO" firstAttribute="leading" secondItem="HAc-KK-Chh" secondAttribute="trailing" id="bIV-pH-hJ5"/> |
| | | <constraint firstItem="Rtg-7l-b7G" firstAttribute="centerY" secondItem="eaR-JM-XUJ" secondAttribute="centerY" id="bMO-EN-qF1"/> |
| | | <constraint firstItem="eWZ-Em-PQG" firstAttribute="top" secondItem="lrQ-mr-sWP" secondAttribute="top" constant="13" id="frQ-I3-Hni"/> |
| | | <constraint firstItem="HAc-KK-Chh" firstAttribute="leading" secondItem="Nm2-xJ-jxS" secondAttribute="leading" id="gsH-PE-w8V"/> |
| | | <constraint firstItem="z6w-gZ-omO" firstAttribute="centerY" secondItem="HAc-KK-Chh" secondAttribute="centerY" id="juP-6o-dCQ"/> |
| | | <constraint firstItem="h4n-nl-K9g" firstAttribute="leading" secondItem="eWZ-Em-PQG" secondAttribute="trailing" id="k4L-Um-CVt"/> |
| | | <constraint firstItem="eWZ-Em-PQG" firstAttribute="leading" secondItem="lrQ-mr-sWP" secondAttribute="leading" constant="10" id="seN-gS-VQt"/> |
| | | <constraint firstItem="tqb-xC-9qk" firstAttribute="leading" secondItem="Nm2-xJ-jxS" secondAttribute="trailing" id="zV1-UF-HvO"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="borderColor"> |
| | | <color key="value" red="0.99215686270000003" green="0.47450980390000003" blue="0.0078431372550000003" alpha="0.28000000000000003" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="4"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | </subviews> |
| | | <constraints> |
| | | <constraint firstItem="lrQ-mr-sWP" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="7" id="CNl-qS-Zrj"/> |
| | | <constraint firstItem="lrQ-mr-sWP" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="NzU-hG-Kzc"/> |
| | | <constraint firstAttribute="trailing" secondItem="lrQ-mr-sWP" secondAttribute="trailing" constant="14" id="c59-Sg-d1q"/> |
| | | <constraint firstAttribute="bottom" secondItem="lrQ-mr-sWP" secondAttribute="bottom" constant="7" id="xHK-B8-9Ww"/> |
| | | </constraints> |
| | | </tableViewCellContentView> |
| | | <viewLayoutGuide key="safeArea" id="njF-e1-oar"/> |
| | | <point key="canvasLocation" x="144.27480916030532" y="41.197183098591552"/> |
| | | </tableViewCell> |
| | | </objects> |
| | | <resources> |
| | | <systemColor name="systemGray5Color"> |
| | | <color red="0.89803921568627454" green="0.89803921568627454" blue="0.91764705882352937" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
New file |
| | |
| | | // |
| | | // WorldCupRankTCell.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/28. |
| | | // |
| | | |
| | | import UIKit |
| | | import JQTools |
| | | |
| | | class WorldCupRankTCell: UITableViewCell { |
| | | |
| | | private var rankImg:UIImageView! |
| | | private var rankLabel:UILabel! |
| | | private var userImg:UIImageView! |
| | | private var userNameLabel:UILabel! |
| | | private var numerLabel:UILabel! |
| | | private var radioLabel:UILabel! |
| | | |
| | | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { |
| | | super.init(style: .default, reuseIdentifier: reuseIdentifier) |
| | | setUI() |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | |
| | | private func setUI(){ |
| | | |
| | | selectionStyle = .none |
| | | |
| | | rankImg = UIImageView(image: UIImage(named: "rank_1")) |
| | | contentView.addSubview(rankImg) |
| | | rankImg.snp.makeConstraints { make in |
| | | make.left.equalTo(15) |
| | | make.top.equalTo(12) |
| | | make.width.equalTo(22) |
| | | make.height.equalTo(26) |
| | | } |
| | | |
| | | rankLabel = UILabel() |
| | | rankLabel.text = "1" |
| | | rankLabel.font = UIFont.init(name: "Impact", size: 12) |
| | | rankLabel.textColor = UIColor(hexString: "#777777") |
| | | rankLabel.textAlignment = .center |
| | | contentView.addSubview(rankLabel) |
| | | rankLabel.snp.makeConstraints { make in |
| | | make.center.equalTo(rankImg) |
| | | } |
| | | |
| | | userImg = UIImageView() |
| | | userImg.backgroundColor = .black.withAlphaComponent(0.4) |
| | | userImg.cornerRadius = 17 |
| | | contentView.addSubview(userImg) |
| | | userImg.snp.makeConstraints { make in |
| | | make.left.equalTo(rankImg.snp.right).offset(37) |
| | | make.centerY.equalToSuperview() |
| | | make.width.height.equalTo(34) |
| | | } |
| | | |
| | | userNameLabel = UILabel() |
| | | userNameLabel.text = "wang" |
| | | userNameLabel.font = UIFont.systemFont(ofSize: 14, weight: .medium) |
| | | userNameLabel.textColor = .black |
| | | contentView.addSubview(userNameLabel) |
| | | userNameLabel.snp.makeConstraints { make in |
| | | make.left.equalTo(userImg.snp.right).offset(10) |
| | | make.centerY.equalToSuperview() |
| | | make.height.equalTo(20) |
| | | } |
| | | |
| | | |
| | | numerLabel = UILabel() |
| | | numerLabel.text = "0" |
| | | numerLabel.font = UIFont.systemFont(ofSize: 12) |
| | | numerLabel.textColor = .black.withAlphaComponent(0.6) |
| | | numerLabel.textAlignment = .center |
| | | contentView.addSubview(numerLabel) |
| | | numerLabel.snp.makeConstraints { make in |
| | | make.left.equalToSuperview().offset((JQ_ScreenW - 28) * 0.469) |
| | | make.centerY.equalToSuperview() |
| | | make.height.equalTo(17) |
| | | make.right.equalToSuperview().offset(-((JQ_ScreenW - 28) * 0.201)) |
| | | } |
| | | |
| | | |
| | | radioLabel = UILabel() |
| | | radioLabel.text = "0%" |
| | | radioLabel.font = UIFont.systemFont(ofSize: 12) |
| | | radioLabel.textColor = .black.withAlphaComponent(0.6) |
| | | radioLabel.textAlignment = .center |
| | | contentView.addSubview(radioLabel) |
| | | radioLabel.snp.makeConstraints { make in |
| | | make.left.equalTo(numerLabel.snp.right) |
| | | make.centerY.equalToSuperview() |
| | | make.height.equalTo(17) |
| | | make.right.equalToSuperview() |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | // |
| | | // WorldCupRecordTCell.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/27. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class WorldCupRecordTCell: UITableViewCell { |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | backgroundColor = .clear |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="_WorldCupRecordTCell" rowHeight="123" id="KGk-i7-Jjw" customClass="WorldCupRecordTCell" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="0.0" width="494" height="123"/> |
| | | <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
| | | <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> |
| | | <rect key="frame" x="0.0" y="0.0" width="494" height="123"/> |
| | | <autoresizingMask key="autoresizingMask"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="67p-OH-6vX"> |
| | | <rect key="frame" x="14" y="6.6666666666666643" width="466" height="110"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WLz-mA-V2e"> |
| | | <rect key="frame" x="10" y="12" width="36" height="20"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20" id="xjt-TO-ZAY"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="比分: " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ycz-Dk-ChZ"> |
| | | <rect key="frame" x="9.9999999999999964" y="40" width="46.666666666666657" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0:0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LL4-oU-Vn8"> |
| | | <rect key="frame" x="56.666666666666671" y="34.666666666666671" width="35.333333333333329" height="27.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="24"/> |
| | | <color key="textColor" name="FE6E0D"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0000.00.00 00:00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="49D-wu-uWd"> |
| | | <rect key="frame" x="10" y="64" width="95.666666666666671" height="14.333333333333329"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="11"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="获得积分:0" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LHg-l0-pUp"> |
| | | <rect key="frame" x="389.66666666666669" y="47.666666666666671" width="69.333333333333314" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <color key="textColor" name="FE6E0D"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_winner" translatesAutoresizingMaskIntoConstraints="NO" id="2Te-if-XIR"> |
| | | <rect key="frame" x="444" y="0.0" width="22" height="24"/> |
| | | </imageView> |
| | | </subviews> |
| | | <color key="backgroundColor" red="1" green="0.90588235294117647" blue="0.80000000000000004" alpha="0.080000000000000002" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="trailing" secondItem="2Te-if-XIR" secondAttribute="trailing" id="A8M-Pg-S6f"/> |
| | | <constraint firstItem="49D-wu-uWd" firstAttribute="leading" secondItem="WLz-mA-V2e" secondAttribute="leading" id="AKr-WD-GxM"/> |
| | | <constraint firstItem="LHg-l0-pUp" firstAttribute="centerY" secondItem="67p-OH-6vX" secondAttribute="centerY" id="BFn-3b-FmZ"/> |
| | | <constraint firstItem="LL4-oU-Vn8" firstAttribute="leading" secondItem="Ycz-Dk-ChZ" secondAttribute="trailing" id="Sni-AN-30G"/> |
| | | <constraint firstItem="2Te-if-XIR" firstAttribute="top" secondItem="67p-OH-6vX" secondAttribute="top" id="WKp-ua-Q6U"/> |
| | | <constraint firstItem="WLz-mA-V2e" firstAttribute="top" secondItem="67p-OH-6vX" secondAttribute="top" constant="12" id="cUA-zQ-4xD"/> |
| | | <constraint firstItem="LL4-oU-Vn8" firstAttribute="centerY" secondItem="Ycz-Dk-ChZ" secondAttribute="centerY" id="dO1-6s-y7B"/> |
| | | <constraint firstItem="49D-wu-uWd" firstAttribute="top" secondItem="Ycz-Dk-ChZ" secondAttribute="bottom" constant="7" id="mMF-0d-y2V"/> |
| | | <constraint firstItem="Ycz-Dk-ChZ" firstAttribute="top" secondItem="WLz-mA-V2e" secondAttribute="bottom" constant="8" id="of5-3m-FA3"/> |
| | | <constraint firstItem="Ycz-Dk-ChZ" firstAttribute="leading" secondItem="67p-OH-6vX" secondAttribute="leading" constant="10" id="ooT-IF-dpa"/> |
| | | <constraint firstAttribute="trailing" secondItem="LHg-l0-pUp" secondAttribute="trailing" constant="7" id="yGx-oa-WSc"/> |
| | | <constraint firstItem="WLz-mA-V2e" firstAttribute="leading" secondItem="67p-OH-6vX" secondAttribute="leading" constant="10" id="yna-nJ-0Qz"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> |
| | | <color key="value" red="0.99215686270000003" green="0.47450980390000003" blue="0.0078431372550000003" alpha="0.28000000000000003" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="4"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | </subviews> |
| | | <constraints> |
| | | <constraint firstItem="67p-OH-6vX" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="IfT-Bb-50e"/> |
| | | <constraint firstAttribute="trailing" secondItem="67p-OH-6vX" secondAttribute="trailing" constant="14" id="J7c-dv-mJT"/> |
| | | <constraint firstItem="67p-OH-6vX" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="6.5" id="ekC-B2-KYj"/> |
| | | <constraint firstAttribute="bottom" secondItem="67p-OH-6vX" secondAttribute="bottom" constant="6.5" id="h4k-c2-X0T"/> |
| | | </constraints> |
| | | </tableViewCellContentView> |
| | | <viewLayoutGuide key="safeArea" id="njF-e1-oar"/> |
| | | <point key="canvasLocation" x="271.75572519083971" y="48.239436619718312"/> |
| | | </tableViewCell> |
| | | </objects> |
| | | <resources> |
| | | <image name="icon_winner" width="22" height="24"/> |
| | | <namedColor name="FE6E0D"> |
| | | <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | </resources> |
| | | </document> |
New file |
| | |
| | | // |
| | | // WorldCupTCell.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/27. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class WorldCupTCell: UITableViewCell { |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | selectionStyle = .none |
| | | } |
| | | |
| | | override func setSelected(_ selected: Bool, animated: Bool) { |
| | | super.setSelected(selected, animated: animated) |
| | | |
| | | // Configure the view for the selected state |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="_WorldCupTCell" rowHeight="288" id="KGk-i7-Jjw" customClass="WorldCupTCell" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="0.0" width="518" height="288"/> |
| | | <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
| | | <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> |
| | | <rect key="frame" x="0.0" y="0.0" width="518" height="288"/> |
| | | <autoresizingMask key="autoresizingMask"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oFc-5H-7bu"> |
| | | <rect key="frame" x="20.666666666666671" y="37" width="50" height="20.666666666666671"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20.5" id="2jX-yQ-pBm"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="21"/> |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="y0L-La-CTe"> |
| | | <rect key="frame" x="481.66666666666669" y="40.666666666666664" width="13" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="INC-Mr-eUQ"> |
| | | <rect key="frame" x="460.33333333333331" y="34.666666666666664" width="11.666666666666686" height="23"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="19"/> |
| | | <color key="textColor" red="1" green="0.4823529411764706" blue="0.086274509803921567" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_hot_1" translatesAutoresizingMaskIntoConstraints="NO" id="idI-Bn-7t7"> |
| | | <rect key="frame" x="433" y="29.666666666666671" width="24" height="28"/> |
| | | </imageView> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="NAy-P9-bIs"> |
| | | <rect key="frame" x="16" y="77.666666666666671" width="111" height="148.33333333333331"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="148.5" id="Zyi-pO-3bz"/> |
| | | <constraint firstAttribute="width" constant="111" id="a2M-YX-Bmz"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="5"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Aw5-DE-ZTd"> |
| | | <rect key="frame" x="141.00000000000003" y="77.666666666666671" width="348.66666666666674" height="18"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="15"/> |
| | | <color key="textColor" red="0.62352941176470589" green="0.62745098039215685" blue="0.62745098039215685" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_age" translatesAutoresizingMaskIntoConstraints="NO" id="bT7-Y5-qoi"> |
| | | <rect key="frame" x="145" y="192" width="17.666666666666657" height="21.666666666666657"/> |
| | | </imageView> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_time_1" translatesAutoresizingMaskIntoConstraints="NO" id="e7G-ry-OMa"> |
| | | <rect key="frame" x="143" y="154" width="22" height="22"/> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OGN-Ix-gGZ"> |
| | | <rect key="frame" x="180.33333333333334" y="193.66666666666666" width="14" height="18"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="15"/> |
| | | <color key="textColor" red="0.62352941176470589" green="0.62745098039215685" blue="0.62745098039215685" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SpG-d6-Mry"> |
| | | <rect key="frame" x="180.33333333333334" y="156" width="14" height="18"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="15"/> |
| | | <color key="textColor" red="0.62352941179999999" green="0.62745098040000002" blue="0.62745098040000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="详情" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aek-ei-GPD"> |
| | | <rect key="frame" x="393" y="193" width="96" height="33"/> |
| | | <color key="backgroundColor" red="0.082352941176470587" green="0.18823529411764706" blue="0.44705882352941173" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="96" id="7ia-ML-84A"/> |
| | | <constraint firstAttribute="height" constant="33" id="kHE-zK-JNl"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="19"/> |
| | | <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="16.5"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </label> |
| | | </subviews> |
| | | <constraints> |
| | | <constraint firstItem="NAy-P9-bIs" firstAttribute="top" secondItem="oFc-5H-7bu" secondAttribute="bottom" constant="20" id="5X1-Ji-YkO"/> |
| | | <constraint firstItem="oFc-5H-7bu" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="37" id="85e-cl-qd0"/> |
| | | <constraint firstAttribute="trailing" secondItem="Aw5-DE-ZTd" secondAttribute="trailing" constant="28.5" id="BSI-kj-WEz"/> |
| | | <constraint firstItem="NAy-P9-bIs" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="CWg-TO-saA"/> |
| | | <constraint firstItem="SpG-d6-Mry" firstAttribute="centerY" secondItem="e7G-ry-OMa" secondAttribute="centerY" id="F6s-bY-LKk"/> |
| | | <constraint firstItem="Aw5-DE-ZTd" firstAttribute="leading" secondItem="NAy-P9-bIs" secondAttribute="trailing" constant="14" id="JBj-Uz-DN6"/> |
| | | <constraint firstItem="y0L-La-CTe" firstAttribute="bottom" secondItem="oFc-5H-7bu" secondAttribute="bottom" id="Jhb-q7-a96"/> |
| | | <constraint firstItem="OGN-Ix-gGZ" firstAttribute="leading" secondItem="bT7-Y5-qoi" secondAttribute="trailing" constant="17.5" id="RO1-4l-siK"/> |
| | | <constraint firstItem="bT7-Y5-qoi" firstAttribute="centerX" secondItem="e7G-ry-OMa" secondAttribute="centerX" id="S2R-pm-p9d"/> |
| | | <constraint firstItem="INC-Mr-eUQ" firstAttribute="leading" secondItem="idI-Bn-7t7" secondAttribute="trailing" constant="3.5" id="SiA-Z0-Kmo"/> |
| | | <constraint firstItem="y0L-La-CTe" firstAttribute="leading" secondItem="INC-Mr-eUQ" secondAttribute="trailing" constant="9.5" id="Txg-fh-c2e"/> |
| | | <constraint firstItem="aek-ei-GPD" firstAttribute="bottom" secondItem="NAy-P9-bIs" secondAttribute="bottom" id="V4N-eG-lah"/> |
| | | <constraint firstItem="oFc-5H-7bu" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="20.5" id="Xjs-6e-rGf"/> |
| | | <constraint firstAttribute="bottom" secondItem="NAy-P9-bIs" secondAttribute="bottom" constant="23" id="aUI-v3-ilP"/> |
| | | <constraint firstItem="OGN-Ix-gGZ" firstAttribute="leading" secondItem="SpG-d6-Mry" secondAttribute="leading" id="cRp-bJ-md4"/> |
| | | <constraint firstItem="Aw5-DE-ZTd" firstAttribute="top" secondItem="NAy-P9-bIs" secondAttribute="top" id="dwB-i0-o0R"/> |
| | | <constraint firstItem="bT7-Y5-qoi" firstAttribute="leading" secondItem="NAy-P9-bIs" secondAttribute="trailing" constant="18" id="ehR-kF-Z0n"/> |
| | | <constraint firstItem="bT7-Y5-qoi" firstAttribute="top" secondItem="e7G-ry-OMa" secondAttribute="bottom" constant="16" id="lv9-Kj-R7x"/> |
| | | <constraint firstItem="INC-Mr-eUQ" firstAttribute="bottom" secondItem="idI-Bn-7t7" secondAttribute="bottom" id="oT2-DL-cMO"/> |
| | | <constraint firstItem="bT7-Y5-qoi" firstAttribute="bottom" secondItem="NAy-P9-bIs" secondAttribute="bottom" constant="-12.5" id="pql-FI-e49"/> |
| | | <constraint firstAttribute="trailing" secondItem="y0L-La-CTe" secondAttribute="trailing" constant="23.5" id="pwk-0N-cSQ"/> |
| | | <constraint firstAttribute="trailing" secondItem="aek-ei-GPD" secondAttribute="trailing" constant="29" id="sKj-rM-bvV"/> |
| | | <constraint firstItem="OGN-Ix-gGZ" firstAttribute="centerY" secondItem="bT7-Y5-qoi" secondAttribute="centerY" id="vr1-s1-Um4"/> |
| | | <constraint firstItem="y0L-La-CTe" firstAttribute="bottom" secondItem="INC-Mr-eUQ" secondAttribute="bottom" id="zoH-JO-oVr"/> |
| | | </constraints> |
| | | </tableViewCellContentView> |
| | | <viewLayoutGuide key="safeArea" id="njF-e1-oar"/> |
| | | <point key="canvasLocation" x="288.54961832061065" y="106.33802816901409"/> |
| | | </tableViewCell> |
| | | </objects> |
| | | <resources> |
| | | <image name="icon_age" width="17.666666030883789" height="21.666666030883789"/> |
| | | <image name="icon_hot_1" width="24" height="28"/> |
| | | <image name="icon_time_1" width="22" height="22"/> |
| | | </resources> |
| | | </document> |
| | |
| | | import RxRelay |
| | | |
| | | class CustomerContentViewModel:RefreshModel<NoticeItemModel>{ |
| | | var type = BehaviorRelay<CustomerSubListVC.CustomerSubType>.init(value: .notice) |
| | | override func api() -> (Observable<BaseResponse<[NoticeItemModel]>>)? { |
| | | return Services.exploreNoticeList(type: type.value) |
| | | } |
| | | var type = BehaviorRelay<CustomerSubListVC.CustomerSubType>.init(value: .notice) |
| | | override func api() -> (Observable<BaseResponse<[NoticeItemModel]>>)? { |
| | | return Services.exploreNoticeList(type: type.value) |
| | | } |
| | | } |
| | | |
| | | class CustomerSubListVC: BaseVC { |
| | | |
| | | private let viewModel = CustomerContentViewModel() |
| | | private let viewModel = CustomerContentViewModel() |
| | | |
| | | public enum CustomerSubType { |
| | | case notice,QA |
| | | } |
| | | |
| | | lazy var tableView:BaseTableView = { |
| | | let table = BaseTableView(frame: .zero, style: .plain) |
| | | table.separatorStyle = .none |
| | | table.delegate = self |
| | | table.dataSource = self |
| | | table.register(UINib(nibName: "CustomerContentTCell", bundle: nil), forCellReuseIdentifier: "_CustomerContentTCell") |
| | | table.register(UINib(nibName: "CustomerContentQATCell", bundle: nil), forCellReuseIdentifier: "_CustomerContentQATCell") |
| | | |
| | | return table |
| | | }() |
| | | |
| | | |
| | | init(type: CustomerSubType!) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | viewModel.type.accept(type) |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | if viewModel.type.value == .QA{ |
| | | |
| | | Services.bannerList(position: .qusition).subscribe(onNext: {[weak self]data in |
| | | if let models = data.data,models.count > 0{ |
| | | let bannberView = CommonBannerView(frame: CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.564)) |
| | | self?.tableView.tableHeaderView = bannberView |
| | | |
| | | let imgs = models.map({$0.img}) |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | |
| | | bannberView.setItems(items: items) { m in |
| | | let model = models[m.index] |
| | | jumpPage(model: model.model, page: model.page, type: model.type, id: model.turnId) |
| | | } |
| | | self?.tableView.reloadData() |
| | | public enum CustomerSubType { |
| | | case notice,QA |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | lazy var tableView:BaseTableView = { |
| | | let table = BaseTableView(frame: .zero, style: .plain) |
| | | table.separatorStyle = .none |
| | | table.delegate = self |
| | | table.dataSource = self |
| | | table.register(UINib(nibName: "CustomerContentTCell", bundle: nil), forCellReuseIdentifier: "_CustomerContentTCell") |
| | | table.register(UINib(nibName: "CustomerContentQATCell", bundle: nil), forCellReuseIdentifier: "_CustomerContentQATCell") |
| | | |
| | | viewModel.configure(tableView,needMore: false) |
| | | viewModel.beginRefresh() |
| | | // tableView.jq_setEmptyView() |
| | | } |
| | | return table |
| | | }() |
| | | |
| | | override func setUI() { |
| | | view.addSubview(tableView) |
| | | tableView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | } |
| | | |
| | | init(type: CustomerSubType!) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | viewModel.type.accept(type) |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | if viewModel.type.value == .QA{ |
| | | |
| | | Services.bannerList(position: .qusition).subscribe(onNext: {[weak self]data in |
| | | if let models = data.data,models.count > 0{ |
| | | let bannberView = CommonBannerView(frame: CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.564)) |
| | | self?.tableView.tableHeaderView = bannberView |
| | | |
| | | let imgs = models.map({$0.img}) |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | |
| | | bannberView.setItems(items: items) { m in |
| | | let model = models[m.index] |
| | | jumpPage(model: model.model, page: model.page, type: model.type, id: model.turnId) |
| | | } |
| | | self?.tableView.reloadData() |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | viewModel.configure(tableView,needMore: false) |
| | | viewModel.beginRefresh() |
| | | // tableView.jq_setEmptyView() |
| | | } |
| | | |
| | | override func setUI() { |
| | | view.addSubview(tableView) |
| | | tableView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension CustomerSubListVC:UITableViewDelegate{ |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | let model = viewModel.dataSource.value[indexPath.row] |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | let model = viewModel.dataSource.value[indexPath.row] |
| | | |
| | | var id = 0 |
| | | if viewModel.type.value == .notice{ |
| | | id = model.noticeId |
| | | }else{ |
| | | id = model.quesId |
| | | } |
| | | var id = 0 |
| | | if viewModel.type.value == .notice{ |
| | | id = model.noticeId |
| | | }else{ |
| | | id = model.quesId |
| | | } |
| | | |
| | | let vc = CustomerContentDetailVC(id: id, type: viewModel.type.value) |
| | | push(vc: vc) |
| | | } |
| | | let vc = CustomerContentDetailVC(id: id, type: viewModel.type.value) |
| | | push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | extension CustomerSubListVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let model = viewModel.dataSource.value[indexPath.row] |
| | | if viewModel.type.value == .notice{ |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_CustomerContentTCell") as! CustomerContentTCell |
| | | cell.noticeItemModel = model |
| | | return cell |
| | | }else{ |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_CustomerContentQATCell") as! CustomerContentQATCell |
| | | cell.noticeItemModel = model |
| | | return cell |
| | | } |
| | | } |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let model = viewModel.dataSource.value[indexPath.row] |
| | | if viewModel.type.value == .notice{ |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_CustomerContentTCell") as! CustomerContentTCell |
| | | cell.noticeItemModel = model |
| | | return cell |
| | | }else{ |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_CustomerContentQATCell") as! CustomerContentQATCell |
| | | cell.noticeItemModel = model |
| | | return cell |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | // |
| | | // MeQRCodeVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/26. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class MeQRCodeVC: BaseVC { |
| | | |
| | | @IBOutlet weak var tableView: UITableView! |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "我的二维码" |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "MyQRCodeTCell", bundle: nil), forCellReuseIdentifier: "_MyQRCodeTCell") |
| | | } |
| | | } |
| | | |
| | | extension MeQRCodeVC:UITableViewDelegate,UITableViewDataSource{ |
| | | |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | QRPreview.show("123") |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return 2 |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_MyQRCodeTCell") as! MyQRCodeTCell |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
| | | return 90 |
| | | } |
| | | } |
| | | |
| | | |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MeQRCodeVC" customModule="WanPai" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="tableView" destination="xCU-ZT-TBO" id="aff-vD-UvB"/> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | </connections> |
| | | </placeholder> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="二维码注意事项" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0gE-4P-a4a"> |
| | | <rect key="frame" x="14.999999999999993" y="75" width="114.33333333333331" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="22" id="gBb-xJ-VYA"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kn2-C1-gHg"> |
| | | <rect key="frame" x="15" y="105" width="363" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="xCU-ZT-TBO"> |
| | | <rect key="frame" x="0.0" y="152" width="393" height="666"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | </tableView> |
| | | </subviews> |
| | | <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="kn2-C1-gHg" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="15" id="3Kt-py-gcN"/> |
| | | <constraint firstItem="0gE-4P-a4a" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="15" id="9Ac-Tn-mZu"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="xCU-ZT-TBO" secondAttribute="trailing" id="9Ni-TZ-R2m"/> |
| | | <constraint firstItem="0gE-4P-a4a" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="16" id="GMH-nc-D89"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="kn2-C1-gHg" secondAttribute="trailing" constant="15" id="Gp3-Hk-kVc"/> |
| | | <constraint firstItem="kn2-C1-gHg" firstAttribute="top" secondItem="0gE-4P-a4a" secondAttribute="bottom" constant="8" id="LHr-qK-f3L"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="xCU-ZT-TBO" secondAttribute="bottom" id="NHh-jh-sCv"/> |
| | | <constraint firstItem="xCU-ZT-TBO" firstAttribute="top" secondItem="kn2-C1-gHg" secondAttribute="bottom" constant="30" id="Ujj-3X-9be"/> |
| | | <constraint firstItem="xCU-ZT-TBO" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="fgz-yk-0HY"/> |
| | | </constraints> |
| | | <point key="canvasLocation" x="83" y="21"/> |
| | | </view> |
| | | </objects> |
| | | <resources> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
| | |
| | | import JQTools |
| | | |
| | | class SearchVC: BaseVC { |
| | | @IBOutlet weak var scrollView: UIScrollView! |
| | | @IBOutlet weak var banner_collectionView: UICollectionView! |
| | | @IBOutlet weak var label_empty: UILabel! |
| | | @IBOutlet weak var view_container: UIView! |
| | | // @IBOutlet weak var btn_special: UIButton! |
| | | @IBOutlet weak var btn_userLocal: UIButton! |
| | | // @IBOutlet weak var cons_CollectionAspect: NSLayoutConstraint! |
| | | @IBOutlet weak var scrollView: UIScrollView! |
| | | @IBOutlet weak var banner_collectionView: UICollectionView! |
| | | @IBOutlet weak var func_collectionView: UICollectionView! |
| | | @IBOutlet weak var user_avarImg: UIImageView! |
| | | @IBOutlet weak var label_userName: UILabel! |
| | | @IBOutlet weak var label_vip: UILabel! |
| | | @IBOutlet weak var img_vipMedal: UIImageView! |
| | | @IBOutlet weak var label_wpCoin: UILabel! |
| | | @IBOutlet weak var label_coin: UILabel! |
| | | var benefitHomeModel:BenefitHomeModel? |
| | | private var models = [StartClouseExploreModel]() |
| | | |
| | | private var models = [StartClouseExploreModel]() |
| | | private lazy var mapView:MAMapView = { |
| | | let map = MAMapView() |
| | | map.delegate = self |
| | | map.isShowsUserLocation = true |
| | | map.userTrackingMode = .none |
| | | map.isZoomEnabled = true |
| | | map.isScrollEnabled = true |
| | | return map |
| | | }() |
| | | private var items = ["我的二维码","我的预约","社区世界杯","已报名活动","我的运动营","人员管理","我的券包","兑换记录","消费记录","积分明细","我的玩湃币","裁判入口"] |
| | | |
| | | override func viewDidDisappear(_ animated: Bool) { |
| | | super.viewDidDisappear(animated) |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | scrollView.contentInsetAdjustmentBehavior = .never |
| | | |
| | | Services.exploreHome().subscribe(onNext: {[weak self] data in |
| | | if let models = data.data,models.count > 0{ |
| | | self?.models = models |
| | | self?.loadMap() |
| | | self?.banner_collectionView.reloadData() |
| | | }else{ |
| | | |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | |
| | | override func setUI() { |
| | | banner_collectionView.delegate = self |
| | | banner_collectionView.dataSource = self |
| | | banner_collectionView.register(UINib(nibName: "SearchBannerCCell", bundle: nil), forCellWithReuseIdentifier: "_SearchBannerCCell") |
| | | } |
| | | |
| | | |
| | | private func loadMap(){ |
| | | label_empty.isHidden = true |
| | | view_container.addSubview(mapView) |
| | | mapView.frame = CGRect(origin: .zero, size: view_container.size) |
| | | |
| | | for (index,v) in models.enumerated(){ |
| | | let point = CustomPointAnnotation() |
| | | point.coordinate = CLLocationCoordinate2D(latitude: v.latitude, longitude:v.longitude) |
| | | point.title = v.storeAddr |
| | | point.index = index |
| | | v.index = index |
| | | v.annotation = point |
| | | } |
| | | |
| | | let points = models.map({$0.annotation}) as! [CustomPointAnnotation] |
| | | mapView.addAnnotations(points) |
| | | mapView.showAnnotations(points, animated: true) |
| | | mapView.selectAnnotation(points.first!, animated: true) |
| | | view_container.bringSubviewToFront(btn_userLocal) |
| | | } |
| | | |
| | | override func viewDidLayoutSubviews() { |
| | | super.viewDidLayoutSubviews() |
| | | view_container.cornerRadius = 10 |
| | | } |
| | | |
| | | @IBAction func customerAction(_ sender: Any) { |
| | | let vc = CustomerListVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func privilegeAction(_ sender: UIButton) { |
| | | let vc = JoinMemberIntroduceVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func userLocationAction(_ sender: Any) { |
| | | let userCoordinate = mapView.userLocation.coordinate |
| | | mapView.setCenter(userCoordinate, animated: true) |
| | | } |
| | | |
| | | |
| | | @IBAction func aboutMinProgram(_ sender: Any) { |
| | | |
| | | CommonAlertView.show(title: "提示", content: "即将打开小程序,是否继续?") { status in |
| | | if status{ |
| | | let miniProgam = WXLaunchMiniProgramReq.object() |
| | | miniProgam.userName = WeChatMinProgram |
| | | #if DEBUG |
| | | miniProgam.miniProgramType = .preview |
| | | #else |
| | | miniProgam.miniProgramType = .release |
| | | #endif |
| | | miniProgam.path = WeChatMinProgramPath |
| | | WXApi.send(miniProgam) { s in |
| | | if !s{ |
| | | alert(msg: "打开失败") |
| | | } |
| | | override func viewDidDisappear(_ animated: Bool) { |
| | | super.viewDidDisappear(animated) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .darkContent |
| | | } |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | scrollView.contentInsetAdjustmentBehavior = .never |
| | | |
| | | Services.exploreHome().subscribe(onNext: {[weak self] data in |
| | | if let models = data.data,models.count > 0{ |
| | | self?.models = models |
| | | self?.banner_collectionView.reloadData() |
| | | }else{ |
| | | |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func viewDidAppear(_ animated: Bool) { |
| | | super.viewDidAppear(animated) |
| | | getData() |
| | | } |
| | | |
| | | override func setUI() { |
| | | banner_collectionView.delegate = self |
| | | banner_collectionView.dataSource = self |
| | | banner_collectionView.register(UINib(nibName: "SearchBannerCCell", bundle: nil), forCellWithReuseIdentifier: "_SearchBannerCCell") |
| | | func_collectionView.delegate = self |
| | | func_collectionView.dataSource = self |
| | | func_collectionView.register(UINib(nibName: "FindItemCCell", bundle: nil), forCellWithReuseIdentifier: "_FindItemCCell") |
| | | func_collectionView.contentInset = UIEdgeInsets(top: 25, left: 0, bottom: 25, right: 0) |
| | | } |
| | | |
| | | |
| | | override func viewDidLayoutSubviews() { |
| | | super.viewDidLayoutSubviews() |
| | | } |
| | | |
| | | private func getData(){ |
| | | Services.benefitHome().subscribe(onNext: {[weak self] data in |
| | | if let model = data.data{ |
| | | self?.benefitHomeModel = model |
| | | self?.user_avarImg.sd_setImage(with: URL(string: model.userHeadImg)) |
| | | self?.label_userName.text = model.userName.isEmpty ? "未命名":model.userName |
| | | self?.label_vip.text = model.isMember |
| | | self?.label_wpCoin.text = model.wpCoin.currencyNotPrefix() |
| | | self?.label_coin.text = "\(model.userIntegral)" |
| | | |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func customerAction(_ sender: Any) { |
| | | let vc = CustomerListVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func wpCoinDetailAction(_ sender: Any) { |
| | | let vc = RechargeRecordVC(coin: benefitHomeModel?.wpCoin ?? 0,subtype: .coin) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func coinDetailAction(_ sender: Any) { |
| | | let vc = RechargeRecordVC(coin: benefitHomeModel?.userIntegral ?? 0,subtype: .integral) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | |
| | | @IBAction func settingAction(_ sender: Any) { |
| | | let vc = ProfileVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | |
| | | @IBAction func aboutMinProgram(_ sender: Any) { |
| | | |
| | | CommonAlertView.show(title: "提示", content: "即将打开小程序,是否继续?") { status in |
| | | if status{ |
| | | let miniProgam = WXLaunchMiniProgramReq.object() |
| | | miniProgam.userName = WeChatMinProgram |
| | | #if DEBUG |
| | | miniProgam.miniProgramType = .preview |
| | | #else |
| | | miniProgam.miniProgramType = .release |
| | | #endif |
| | | miniProgam.path = WeChatMinProgramPath |
| | | WXApi.send(miniProgam) { s in |
| | | if !s{ |
| | | alert(msg: "打开失败") |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .darkContent |
| | | } |
| | | } |
| | | |
| | | extension SearchVC:UICollectionViewDelegate{ |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | let model = models[indexPath.row] |
| | | let vc = SearchStoreDetailVC(id: model.storeId) |
| | | push(vc: vc) |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | if collectionView == func_collectionView{ |
| | | switch items[indexPath.row] |
| | | { |
| | | case "我的二维码": |
| | | let vc = MeQRCodeVC() |
| | | push(vc: vc) |
| | | case "我的预约": |
| | | let vc = YardBookingListVC() |
| | | push(vc: vc) |
| | | case "社区世界杯": |
| | | let vc = WorldCupVC() |
| | | push(vc: vc) |
| | | case "已报名活动": |
| | | let vc = ActivitySignupListVC() |
| | | push(vc: vc) |
| | | case "我的运动营": |
| | | self.tabBarController?.selectedIndex = 1 |
| | | case "人员管理": |
| | | break |
| | | case "我的券包": |
| | | let vc = WelfareCouponsListVC() |
| | | push(vc: vc) |
| | | case "兑换记录": |
| | | let vc = WelfareExchangeRecordListVC() |
| | | push(vc: vc) |
| | | case "消费记录": |
| | | let vc = WelfareBillListVC() |
| | | push(vc: vc) |
| | | case "积分明细": |
| | | let vc = RechargeRecordVC(coin: benefitHomeModel?.userIntegral ?? 0,subtype: .integral) |
| | | push(vc: vc) |
| | | case "我的玩湃币": |
| | | let vc = RechargeRecordVC(coin: benefitHomeModel?.wpCoin ?? 0,subtype: .coin) |
| | | push(vc: vc) |
| | | case "裁判入口": |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | |
| | | |
| | | func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { |
| | | let page = Int(scrollView.contentOffset.x / JQ_ScreenW) |
| | | let model = models[page] |
| | | mapView.selectAnnotation(model.annotation, animated: true) |
| | | } |
| | | } |
| | | |
| | | if collectionView == banner_collectionView{ |
| | | let model = models[indexPath.row] |
| | | let vc = SearchStoreDetailVC(id: model.storeId) |
| | | push(vc: vc) |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension SearchVC:UICollectionViewDataSource{ |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | return models.count |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | if collectionView == func_collectionView{ |
| | | return items.count |
| | | } |
| | | return models.count |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_SearchBannerCCell", for: indexPath) as! SearchBannerCCell |
| | | let model = models[indexPath.row] |
| | | cell.startClouseExploreItemModel = model |
| | | return cell |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | |
| | | if collectionView == func_collectionView{ |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_FindItemCCell", for: indexPath) as! FindItemCCell |
| | | cell.label_title.text = items[indexPath.row] |
| | | return cell |
| | | } |
| | | |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_SearchBannerCCell", for: indexPath) as! SearchBannerCCell |
| | | let model = models[indexPath.row] |
| | | cell.startClouseExploreItemModel = model |
| | | return cell |
| | | } |
| | | } |
| | | |
| | | |
| | | extension SearchVC:UICollectionViewDelegateFlowLayout{ |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { |
| | | return 0 |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { |
| | | return 0 |
| | | } |
| | | if collectionView == func_collectionView{ |
| | | return 0 |
| | | } |
| | | return 0 |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { |
| | | return CGSize(width: JQ_ScreenW, height: JQ_ScreenW * 0.6541) |
| | | } |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { |
| | | if collectionView == func_collectionView{ |
| | | return 0 |
| | | } |
| | | return 0 |
| | | } |
| | | |
| | | extension SearchVC:MAMapViewDelegate{ |
| | | |
| | | func mapView(_ mapView: MAMapView!, viewFor annotation: MAAnnotation!) -> MAAnnotationView! { |
| | | if annotation is CustomPointAnnotation{ |
| | | var pointView = mapView.dequeueReusableAnnotationView(withIdentifier: "point") as? CustomPointAnnotationView |
| | | if pointView == nil{ |
| | | pointView = CustomPointAnnotationView(annotation: annotation, reuseIdentifier: "point") |
| | | } |
| | | pointView?.canShowCallout = true |
| | | pointView?.label.text = "\((annotation as! CustomPointAnnotation).index + 1)" |
| | | pointView?.image = UIImage(named: "icon_point")?.withTintColor(UIColor(hexStr: "#f54444")) |
| | | return pointView |
| | | } |
| | | return nil |
| | | } |
| | | |
| | | func mapView(_ mapView: MAMapView!, didSelect view: MAAnnotationView!) { |
| | | view.image = UIImage(named: "icon_point")?.withTintColor(UIColor(hexStr: "#2980ff")) |
| | | } |
| | | |
| | | func mapView(_ mapView: MAMapView!, didDeselect view: MAAnnotationView!) { |
| | | view.image = UIImage(named: "icon_point")?.withTintColor(UIColor(hexStr: "#f54444")) |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { |
| | | if collectionView == func_collectionView{ |
| | | return CGSize(width: JQ_ScreenW/4, height: 120) |
| | | } |
| | | return CGSize(width: JQ_ScreenW, height: JQ_ScreenW * 0.6541) |
| | | } |
| | | } |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <accessibilityOverrides/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SearchVC" customModule="WanPai" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="banner_collectionView" destination="GVG-mQ-5A4" id="keS-lx-iWt"/> |
| | | <outlet property="btn_userLocal" destination="G6c-mm-jtO" id="AS9-Qs-vFK"/> |
| | | <outlet property="label_empty" destination="FYv-6M-gC5" id="SA6-TH-Aqp"/> |
| | | <outlet property="func_collectionView" destination="pyk-ne-JeM" id="eQ5-10-Hci"/> |
| | | <outlet property="img_vipMedal" destination="reN-LL-PRO" id="WIl-zY-wuj"/> |
| | | <outlet property="label_coin" destination="TBO-dZ-vzH" id="aHo-fb-qUS"/> |
| | | <outlet property="label_userName" destination="Iaq-eP-lJ7" id="t4z-lA-fha"/> |
| | | <outlet property="label_vip" destination="qIB-bn-Xg1" id="Sq1-tH-0I7"/> |
| | | <outlet property="label_wpCoin" destination="ywf-si-kai" id="kQb-4s-4nT"/> |
| | | <outlet property="scrollView" destination="Jbe-CY-MmI" id="MM5-aA-VjT"/> |
| | | <outlet property="user_avarImg" destination="IFx-3f-1QD" id="cmc-3A-1pW"/> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | <outlet property="view_container" destination="kz4-Kz-Gzm" id="w2p-IO-YFO"/> |
| | | </connections> |
| | | </placeholder> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jbe-CY-MmI"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="818"/> |
| | | <rect key="frame" x="0.0" y="59" width="393" height="759"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="w1y-Zq-96N"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="838.66666666666663"/> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="1140.6666666666667"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="前往玩湃" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DLd-us-4A3"> |
| | | <rect key="frame" x="23" y="42" width="65.333333333333329" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="22" id="MPB-gD-l4i"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> |
| | | <color key="textColor" red="0.28235294119999998" green="0.28235294119999998" blue="0.28235294119999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kz4-Kz-Gzm"> |
| | | <rect key="frame" x="23" y="81" width="347" height="194.66666666666663"/> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1Yu-z5-de2"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="300"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前城市暂无门店" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FYv-6M-gC5"> |
| | | <rect key="frame" x="0.0" y="0.0" width="347" height="194.66666666666666"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.20392156859999999" green="0.3411764706" blue="0.42352941179999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="IFx-3f-1QD"> |
| | | <rect key="frame" x="26.000000000000007" y="23.666666666666679" width="98.666666666666686" height="98.333333333333314"/> |
| | | <color key="backgroundColor" name="F6F6F6"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="98.5" id="0g6-gD-Ksh"/> |
| | | <constraint firstAttribute="height" constant="98.5" id="UCu-DG-iun"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="49.25"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Iaq-eP-lJ7"> |
| | | <rect key="frame" x="138.66666666666666" y="57.000000000000007" width="19.333333333333343" height="26.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="22"/> |
| | | <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="G6c-mm-jtO"> |
| | | <rect key="frame" x="312" y="159.66666666666666" width="30" height="30"/> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qIB-bn-Xg1"> |
| | | <rect key="frame" x="138.66666666666666" y="94.333333333333343" width="14" height="18"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="15"/> |
| | | <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_vip_medal" translatesAutoresizingMaskIntoConstraints="NO" id="reN-LL-PRO"> |
| | | <rect key="frame" x="166" y="92" width="21" height="23"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="21" id="912-zr-umq"/> |
| | | <constraint firstAttribute="height" constant="23" id="D5U-Mo-93F"/> |
| | | </constraints> |
| | | </imageView> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xGl-Vo-Gjm"> |
| | | <rect key="frame" x="322" y="54.333333333333329" width="37" height="37"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" image="btn_map_local"/> |
| | | <state key="normal" image="btn_setting_find"/> |
| | | <connections> |
| | | <action selector="userLocationAction:" destination="-1" eventType="touchUpInside" id="yGj-0G-xcT"/> |
| | | <action selector="settingAction:" destination="-1" eventType="touchUpInside" id="hsF-IP-mlP"/> |
| | | </connections> |
| | | </button> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ywf-si-kai"> |
| | | <rect key="frame" x="41.666666666666657" y="192" width="119" height="46.333333333333343"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="46.5" id="cbL-nZ-eFp"/> |
| | | <constraint firstAttribute="width" constant="119" id="jaF-0A-wRM"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="24"/> |
| | | <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="23.25"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> |
| | | <color key="value" name="FE6E0D"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="玩湃币" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QKu-db-8Fs"> |
| | | <rect key="frame" x="76.666666666666671" y="163.66666666666666" width="49" height="19.333333333333343"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="16"/> |
| | | <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TBO-dZ-vzH"> |
| | | <rect key="frame" x="232" y="192" width="119" height="46.333333333333343"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="119" id="7lF-XU-ufo"/> |
| | | <constraint firstAttribute="height" constant="46.5" id="Twf-2f-oAl"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="24"/> |
| | | <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="23.25"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> |
| | | <color key="value" name="FE6E0D"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3pw-YC-Oys"> |
| | | <rect key="frame" x="275.33333333333331" y="163.66666666666666" width="32.666666666666686" height="19.333333333333343"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="16"/> |
| | | <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hBG-jc-I1P"> |
| | | <rect key="frame" x="72" y="244.33333333333331" width="58" height="29"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="查看详情"> |
| | | <color key="titleColor" red="1" green="1" blue="1" alpha="0.29999999999999999" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </state> |
| | | <connections> |
| | | <action selector="wpCoinDetailAction:" destination="-1" eventType="touchUpInside" id="MBO-4C-n3j"/> |
| | | </connections> |
| | | </button> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DTA-Zx-9lB"> |
| | | <rect key="frame" x="262.66666666666669" y="244.33333333333331" width="58" height="29"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="查看详情"> |
| | | <color key="titleColor" red="1" green="1" blue="1" alpha="0.29999999999999999" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </state> |
| | | <connections> |
| | | <action selector="coinDetailAction:" destination="-1" eventType="touchUpInside" id="VQC-F2-UZo"/> |
| | | </connections> |
| | | </button> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/> |
| | | <color key="backgroundColor" red="0.10588235294117647" green="0.22745098039215686" blue="0.52941176470588236" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstItem="FYv-6M-gC5" firstAttribute="top" secondItem="kz4-Kz-Gzm" secondAttribute="top" id="6Qg-cL-kbh"/> |
| | | <constraint firstAttribute="width" secondItem="kz4-Kz-Gzm" secondAttribute="height" multiplier="1:0.561" id="8hG-Ai-TyT"/> |
| | | <constraint firstAttribute="bottom" secondItem="FYv-6M-gC5" secondAttribute="bottom" id="Q4a-4F-XMA"/> |
| | | <constraint firstAttribute="trailing" secondItem="G6c-mm-jtO" secondAttribute="trailing" constant="5" id="f1j-Zi-1Aq"/> |
| | | <constraint firstAttribute="trailing" secondItem="FYv-6M-gC5" secondAttribute="trailing" id="kb0-0U-Ri8"/> |
| | | <constraint firstItem="FYv-6M-gC5" firstAttribute="leading" secondItem="kz4-Kz-Gzm" secondAttribute="leading" id="nwW-5i-AUH"/> |
| | | <constraint firstAttribute="bottom" secondItem="G6c-mm-jtO" secondAttribute="bottom" constant="5" id="psO-W6-VUl"/> |
| | | <constraint firstAttribute="bottom" secondItem="ywf-si-kai" secondAttribute="bottom" constant="61.5" id="2Ey-PZ-oVs"/> |
| | | <constraint firstItem="ywf-si-kai" firstAttribute="centerX" secondItem="QKu-db-8Fs" secondAttribute="centerX" id="6rX-2G-Mrr"/> |
| | | <constraint firstItem="Iaq-eP-lJ7" firstAttribute="top" secondItem="IFx-3f-1QD" secondAttribute="top" constant="33.5" id="8T1-8Q-gib"/> |
| | | <constraint firstItem="reN-LL-PRO" firstAttribute="centerY" secondItem="qIB-bn-Xg1" secondAttribute="centerY" id="BeY-KC-laa"/> |
| | | <constraint firstItem="IFx-3f-1QD" firstAttribute="top" secondItem="1Yu-z5-de2" secondAttribute="top" constant="23.5" id="E6N-4k-GPZ"/> |
| | | <constraint firstItem="DTA-Zx-9lB" firstAttribute="top" secondItem="TBO-dZ-vzH" secondAttribute="bottom" constant="6" id="HhC-ff-6wp"/> |
| | | <constraint firstItem="qIB-bn-Xg1" firstAttribute="leading" secondItem="Iaq-eP-lJ7" secondAttribute="leading" id="JzW-jd-ATz"/> |
| | | <constraint firstAttribute="width" secondItem="1Yu-z5-de2" secondAttribute="height" multiplier="1:0.763" id="Kr8-62-LYF"/> |
| | | <constraint firstItem="ywf-si-kai" firstAttribute="top" secondItem="QKu-db-8Fs" secondAttribute="bottom" constant="9" id="L5f-Wd-uEY"/> |
| | | <constraint firstItem="TBO-dZ-vzH" firstAttribute="centerY" secondItem="ywf-si-kai" secondAttribute="centerY" id="LvV-6U-Pmw"/> |
| | | <constraint firstItem="TBO-dZ-vzH" firstAttribute="top" secondItem="3pw-YC-Oys" secondAttribute="bottom" constant="9" id="NGT-uL-LPH"/> |
| | | <constraint firstItem="DTA-Zx-9lB" firstAttribute="centerX" secondItem="TBO-dZ-vzH" secondAttribute="centerX" id="OMM-7I-mY8"/> |
| | | <constraint firstItem="reN-LL-PRO" firstAttribute="leading" secondItem="qIB-bn-Xg1" secondAttribute="trailing" constant="13.5" id="RG9-2c-y1p"/> |
| | | <constraint firstItem="qIB-bn-Xg1" firstAttribute="top" secondItem="Iaq-eP-lJ7" secondAttribute="bottom" constant="11" id="S1p-gw-G8F"/> |
| | | <constraint firstItem="hBG-jc-I1P" firstAttribute="centerX" secondItem="ywf-si-kai" secondAttribute="centerX" id="SKj-6E-fFA"/> |
| | | <constraint firstItem="hBG-jc-I1P" firstAttribute="top" secondItem="ywf-si-kai" secondAttribute="bottom" constant="6" id="ZRW-iT-ity"/> |
| | | <constraint firstItem="ywf-si-kai" firstAttribute="leading" secondItem="1Yu-z5-de2" secondAttribute="leading" constant="41.5" id="dy9-73-RcY"/> |
| | | <constraint firstItem="IFx-3f-1QD" firstAttribute="leading" secondItem="1Yu-z5-de2" secondAttribute="leading" constant="26" id="hAd-UM-xF3"/> |
| | | <constraint firstItem="TBO-dZ-vzH" firstAttribute="centerX" secondItem="3pw-YC-Oys" secondAttribute="centerX" id="oWb-y0-H8A"/> |
| | | <constraint firstAttribute="trailing" secondItem="TBO-dZ-vzH" secondAttribute="trailing" constant="42" id="qQN-dr-eUO"/> |
| | | <constraint firstItem="xGl-Vo-Gjm" firstAttribute="centerY" secondItem="IFx-3f-1QD" secondAttribute="centerY" id="tX3-fg-Fqb"/> |
| | | <constraint firstAttribute="trailing" secondItem="xGl-Vo-Gjm" secondAttribute="trailing" constant="34" id="uEs-l3-zLr"/> |
| | | <constraint firstItem="Iaq-eP-lJ7" firstAttribute="leading" secondItem="IFx-3f-1QD" secondAttribute="trailing" constant="14" id="x9S-au-83K"/> |
| | | </constraints> |
| | | </view> |
| | | <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="W2A-PE-Zq8"> |
| | | <rect key="frame" x="26" y="621.66666666666663" width="341" height="162"/> |
| | | <rect key="frame" x="26" y="923.66666666666663" width="341" height="161.99999999999989"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Lz2-Km-ydI" customClass="TapBtn" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="0.0" width="162.66666666666666" height="162"/> |
| | |
| | | <rect key="frame" x="15" y="15" width="45" height="38"/> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CONTACTS US" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0Md-SF-0cM"> |
| | | <rect key="frame" x="13.999999999999993" y="72" width="109.33333333333331" height="22"/> |
| | | <rect key="frame" x="13.999999999999993" y="72.000000000000114" width="109.33333333333331" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="22" id="HM2-qC-zym"/> |
| | | </constraints> |
| | |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="客服中心" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Y6t-EV-EyM"> |
| | | <rect key="frame" x="15" y="99" width="65.333333333333329" height="22"/> |
| | | <rect key="frame" x="15" y="99.000000000000114" width="65.333333333333329" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="22" id="duk-64-lzR"/> |
| | | </constraints> |
| | |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" red="0.47450980392156861" green="0.85490196078431369" blue="0.88627450980392153" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <color key="backgroundColor" red="0.93725490196078431" green="0.40784313725490196" blue="0.2627450980392157" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstItem="Gep-Rx-b5x" firstAttribute="top" secondItem="Lz2-Km-ydI" secondAttribute="top" constant="15" id="222-ed-hq8"/> |
| | | <constraint firstItem="Gep-Rx-b5x" firstAttribute="leading" secondItem="Lz2-Km-ydI" secondAttribute="leading" constant="15" id="27p-qb-pUW"/> |
| | |
| | | <rect key="frame" x="15" y="15" width="48" height="36"/> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ABOUT US" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Qdw-6R-Ebr"> |
| | | <rect key="frame" x="14" y="70" width="79.666666666666671" height="22"/> |
| | | <rect key="frame" x="14" y="70.000000000000114" width="79.666666666666671" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="22" id="xax-sJ-ZYz"/> |
| | | </constraints> |
| | |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="关于玩湃" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bus-yA-9bf"> |
| | | <rect key="frame" x="15" y="97" width="65.333333333333329" height="22"/> |
| | | <rect key="frame" x="15" y="97.000000000000114" width="65.333333333333329" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="22" id="Z4Q-9e-vKA"/> |
| | | </constraints> |
| | |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" red="0.71764705882352942" green="0.85882352941176465" blue="0.70588235294117641" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <color key="backgroundColor" red="0.98039215686274506" green="0.5725490196078431" blue="0.23529411764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstItem="VHu-Vv-jwl" firstAttribute="top" secondItem="V7G-4l-CVL" secondAttribute="top" constant="15" id="I4c-VH-KpA"/> |
| | | <constraint firstItem="bus-yA-9bf" firstAttribute="leading" secondItem="VHu-Vv-jwl" secondAttribute="leading" id="K4r-tk-7NG"/> |
| | |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="12"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="titleColorForSelected"> |
| | | <color key="value" red="0.98039215686274506" green="0.5725490196078431" blue="0.23529411764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | <connections> |
| | | <action selector="aboutMinProgram:" destination="-1" eventType="touchUpInside" id="e1R-22-FZ6"/> |
| | |
| | | </constraints> |
| | | </stackView> |
| | | <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" pagingEnabled="YES" showsHorizontalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="GVG-mQ-5A4"> |
| | | <rect key="frame" x="0.0" y="307.66666666666669" width="393" height="257.00000000000006"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <rect key="frame" x="0.0" y="650" width="393" height="235.66666666666663"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" secondItem="GVG-mQ-5A4" secondAttribute="height" multiplier="1:0.6541" id="r90-ek-NTR"/> |
| | | <constraint firstAttribute="width" secondItem="GVG-mQ-5A4" secondAttribute="height" multiplier="1:0.6" id="X5h-hG-CdI"/> |
| | | </constraints> |
| | | <collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="QDn-jj-8xs"> |
| | | <size key="itemSize" width="128" height="128"/> |
| | | <size key="headerReferenceSize" width="0.0" height="0.0"/> |
| | | <size key="footerReferenceSize" width="0.0" height="0.0"/> |
| | | <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> |
| | | </collectionViewFlowLayout> |
| | | </collectionView> |
| | | <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="pyk-ne-JeM"> |
| | | <rect key="frame" x="0.0" y="300" width="393" height="350"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="350" id="jCJ-Yw-mTl"/> |
| | | </constraints> |
| | | <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="5aa-zU-PhM"> |
| | | <size key="itemSize" width="128" height="128"/> |
| | | <size key="headerReferenceSize" width="0.0" height="0.0"/> |
| | | <size key="footerReferenceSize" width="0.0" height="0.0"/> |
| | |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="GVG-mQ-5A4" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" id="17N-sE-wz0"/> |
| | | <constraint firstItem="kz4-Kz-Gzm" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" constant="23" id="3Uf-8q-OAN"/> |
| | | <constraint firstItem="pyk-ne-JeM" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" id="7Xf-ZR-hQR"/> |
| | | <constraint firstAttribute="trailing" secondItem="GVG-mQ-5A4" secondAttribute="trailing" id="7x0-XI-UxS"/> |
| | | <constraint firstItem="W2A-PE-Zq8" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" constant="26" id="AtV-Kr-OEc"/> |
| | | <constraint firstItem="GVG-mQ-5A4" firstAttribute="top" secondItem="kz4-Kz-Gzm" secondAttribute="bottom" constant="32" id="Igg-1d-nE8"/> |
| | | <constraint firstItem="1Yu-z5-de2" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" id="JqE-HY-pRY"/> |
| | | <constraint firstAttribute="bottom" secondItem="W2A-PE-Zq8" secondAttribute="bottom" constant="55" id="K5D-B5-JBH"/> |
| | | <constraint firstItem="DLd-us-4A3" firstAttribute="top" secondItem="w1y-Zq-96N" secondAttribute="top" constant="42" id="LL4-80-YhX"/> |
| | | <constraint firstItem="GVG-mQ-5A4" firstAttribute="top" secondItem="pyk-ne-JeM" secondAttribute="bottom" id="My8-KA-VdK"/> |
| | | <constraint firstAttribute="trailing" secondItem="GVG-mQ-5A4" secondAttribute="trailing" id="OvB-FO-WkW"/> |
| | | <constraint firstItem="kz4-Kz-Gzm" firstAttribute="top" secondItem="DLd-us-4A3" secondAttribute="bottom" constant="17" id="TYk-Ic-7l5"/> |
| | | <constraint firstAttribute="trailing" secondItem="1Yu-z5-de2" secondAttribute="trailing" id="QDA-wd-kB5"/> |
| | | <constraint firstItem="GVG-mQ-5A4" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" id="TwR-1K-Ho3"/> |
| | | <constraint firstItem="1Yu-z5-de2" firstAttribute="top" secondItem="w1y-Zq-96N" secondAttribute="top" id="Y1k-jv-2qV"/> |
| | | <constraint firstAttribute="trailing" secondItem="W2A-PE-Zq8" secondAttribute="trailing" constant="26" id="Yfu-Bf-75b"/> |
| | | <constraint firstItem="DLd-us-4A3" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" constant="23" id="fiq-V8-p3c"/> |
| | | <constraint firstAttribute="trailing" secondItem="kz4-Kz-Gzm" secondAttribute="trailing" constant="23" id="rbO-WH-9CE"/> |
| | | <constraint firstItem="W2A-PE-Zq8" firstAttribute="top" secondItem="GVG-mQ-5A4" secondAttribute="bottom" constant="57" id="ve8-5z-kaa"/> |
| | | <constraint firstItem="pyk-ne-JeM" firstAttribute="top" secondItem="1Yu-z5-de2" secondAttribute="bottom" id="YmX-dT-TjT"/> |
| | | <constraint firstAttribute="trailing" secondItem="pyk-ne-JeM" secondAttribute="trailing" id="chk-q8-hgZ"/> |
| | | <constraint firstItem="W2A-PE-Zq8" firstAttribute="top" secondItem="GVG-mQ-5A4" secondAttribute="bottom" constant="38" id="l5Z-U6-M2g"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="bottomMargin" secondItem="Jbe-CY-MmI" secondAttribute="bottom" id="Btj-dx-XBF"/> |
| | | <constraint firstItem="Jbe-CY-MmI" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="NG7-gf-ggs"/> |
| | | <constraint firstItem="Jbe-CY-MmI" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="topMargin" id="Fcm-pV-uQH"/> |
| | | <constraint firstAttribute="trailing" secondItem="Jbe-CY-MmI" secondAttribute="trailing" id="OdW-Am-JXo"/> |
| | | <constraint firstItem="Jbe-CY-MmI" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="rgC-is-DeR"/> |
| | | </constraints> |
| | |
| | | </view> |
| | | </objects> |
| | | <resources> |
| | | <image name="btn_map_local" width="30" height="30"/> |
| | | <image name="btn_setting_find" width="37" height="37"/> |
| | | <image name="icon_aboutUs" width="48" height="36"/> |
| | | <image name="icon_customer" width="45" height="38"/> |
| | | <image name="icon_vip_medal" width="16" height="16"/> |
| | | <namedColor name="F6F6F6"> |
| | | <color red="0.9649999737739563" green="0.9649999737739563" blue="0.9649999737739563" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <namedColor name="FE6E0D"> |
| | | <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | <systemColor name="systemGroupedBackgroundColor"> |
| | | <color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
New file |
| | |
| | | // |
| | | // WorldCupContentApplyInputVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/28. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class WorldCupContentApplyInputVC: BaseVC { |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | // Do any additional setup after loading the view. |
| | | } |
| | | |
| | | |
| | | /* |
| | | // MARK: - Navigation |
| | | |
| | | // In a storyboard-based application, you will often want to do a little preparation before navigation |
| | | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { |
| | | // Get the new view controller using segue.destination. |
| | | // Pass the selected object to the new view controller. |
| | | } |
| | | */ |
| | | |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WorldCupContentApplyInputVC" customModule="WanPai" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | </connections> |
| | | </placeholder> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="d0O-dD-t7J"> |
| | | <rect key="frame" x="0.0" y="59" width="393" height="711"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WO4-Rx-Gdq"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="960.66666666666663"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iHH-PB-5zL"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="220"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" secondItem="iHH-PB-5zL" secondAttribute="height" multiplier="1:0.56" id="lTW-40-rWe"/> |
| | | </constraints> |
| | | </view> |
| | | <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="IJF-wN-cS1"> |
| | | <rect key="frame" x="0.0" y="219.99999999999994" width="393" height="740.66666666666652"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="k1X-n1-EzF"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="52"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" horizontalCompressionResistancePriority="250" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0Xa-dp-XwP"> |
| | | <rect key="frame" x="13.999999999999998" y="14" width="16.333333333333329" height="28"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="25" id="ETB-PF-7N6"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xVk-Kj-DRY"> |
| | | <rect key="frame" x="14" y="51" width="379" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="deH-R4-ol4"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IQk-5x-j1y"> |
| | | <rect key="frame" x="367.33333333333331" y="15.333333333333316" width="11.666666666666686" height="21.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/> |
| | | <color key="textColor" name="FE6E0D"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_hot_1" translatesAutoresizingMaskIntoConstraints="NO" id="YYf-Qa-yXX"> |
| | | <rect key="frame" x="344.33333333333331" y="13" width="19" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="18.859999999999999" id="22p-RB-Osz"/> |
| | | <constraint firstAttribute="height" constant="22" id="GrN-wd-cUC"/> |
| | | </constraints> |
| | | </imageView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="trailing" secondItem="IQk-5x-j1y" secondAttribute="trailing" constant="14" id="0dG-f4-qgt"/> |
| | | <constraint firstAttribute="bottom" secondItem="xVk-Kj-DRY" secondAttribute="bottom" id="3dy-57-mY7"/> |
| | | <constraint firstItem="IQk-5x-j1y" firstAttribute="leading" secondItem="YYf-Qa-yXX" secondAttribute="trailing" constant="4" id="5p6-ST-z53"/> |
| | | <constraint firstAttribute="trailing" secondItem="xVk-Kj-DRY" secondAttribute="trailing" id="Fv8-sG-QV9"/> |
| | | <constraint firstItem="YYf-Qa-yXX" firstAttribute="centerY" secondItem="k1X-n1-EzF" secondAttribute="centerY" constant="-2" id="Iaa-ht-pJu"/> |
| | | <constraint firstItem="IQk-5x-j1y" firstAttribute="centerY" secondItem="k1X-n1-EzF" secondAttribute="centerY" id="OeV-sD-mfd"/> |
| | | <constraint firstItem="xVk-Kj-DRY" firstAttribute="leading" secondItem="k1X-n1-EzF" secondAttribute="leading" constant="14" id="gCh-C0-DsH"/> |
| | | <constraint firstItem="0Xa-dp-XwP" firstAttribute="top" secondItem="k1X-n1-EzF" secondAttribute="top" constant="14" id="oLY-4v-vJZ"/> |
| | | <constraint firstItem="xVk-Kj-DRY" firstAttribute="top" secondItem="0Xa-dp-XwP" secondAttribute="bottom" constant="9" id="sps-pd-jLB"/> |
| | | <constraint firstItem="0Xa-dp-XwP" firstAttribute="leading" secondItem="k1X-n1-EzF" secondAttribute="leading" constant="14" id="zFY-4u-fUx"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="14a-Wt-CUA"> |
| | | <rect key="frame" x="0.0" y="52" width="393" height="380.33333333333331"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="m2Y-Gb-mqM"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="60"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZV1-eV-YLd"> |
| | | <rect key="frame" x="14" y="18" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="32a-ED-JNt"/> |
| | | <constraint firstAttribute="height" constant="4" id="4xH-Pq-Gaw"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="截止报名时间" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IrW-dH-dqc"> |
| | | <rect key="frame" x="22" y="13" width="73.666666666666671" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="u82-O5-aYe"> |
| | | <rect key="frame" x="22" y="35.333333333333314" width="11.666666666666664" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="ZV1-eV-YLd" firstAttribute="top" secondItem="m2Y-Gb-mqM" secondAttribute="top" constant="18" id="AdP-UB-P16"/> |
| | | <constraint firstAttribute="height" constant="60" id="FXC-XG-lH9"/> |
| | | <constraint firstItem="u82-O5-aYe" firstAttribute="leading" secondItem="IrW-dH-dqc" secondAttribute="leading" id="W7c-4y-v3w"/> |
| | | <constraint firstItem="IrW-dH-dqc" firstAttribute="centerY" secondItem="ZV1-eV-YLd" secondAttribute="centerY" id="cNt-ay-Hdc"/> |
| | | <constraint firstItem="IrW-dH-dqc" firstAttribute="leading" secondItem="ZV1-eV-YLd" secondAttribute="trailing" constant="4" id="ffP-w4-hjp"/> |
| | | <constraint firstItem="ZV1-eV-YLd" firstAttribute="leading" secondItem="m2Y-Gb-mqM" secondAttribute="leading" constant="14" id="kqf-zu-UVf"/> |
| | | <constraint firstItem="u82-O5-aYe" firstAttribute="top" secondItem="IrW-dH-dqc" secondAttribute="bottom" constant="8" id="tPD-Lv-EC4"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="J7X-7e-3ZV"> |
| | | <rect key="frame" x="0.0" y="60" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IGH-qd-QdU"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="M6l-qD-gM8"/> |
| | | <constraint firstAttribute="height" constant="4" id="gm9-5q-K9Z"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="开始时间" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="k0a-1L-bTy"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="da2-LT-7vP"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="IGH-qd-QdU" firstAttribute="leading" secondItem="J7X-7e-3ZV" secondAttribute="leading" constant="14" id="1E3-qJ-vu9"/> |
| | | <constraint firstItem="k0a-1L-bTy" firstAttribute="leading" secondItem="IGH-qd-QdU" secondAttribute="trailing" constant="4" id="68s-Dr-raS"/> |
| | | <constraint firstItem="IGH-qd-QdU" firstAttribute="top" secondItem="J7X-7e-3ZV" secondAttribute="top" constant="11" id="IQa-xE-mRx"/> |
| | | <constraint firstItem="da2-LT-7vP" firstAttribute="leading" secondItem="k0a-1L-bTy" secondAttribute="leading" id="Jaj-ca-3W9"/> |
| | | <constraint firstAttribute="height" constant="46" id="WEd-aR-Hgt"/> |
| | | <constraint firstItem="da2-LT-7vP" firstAttribute="top" secondItem="k0a-1L-bTy" secondAttribute="bottom" constant="8" id="fHq-Cf-VTu"/> |
| | | <constraint firstItem="k0a-1L-bTy" firstAttribute="centerY" secondItem="IGH-qd-QdU" secondAttribute="centerY" id="htC-Nr-ELd"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="v3O-7N-rmL"> |
| | | <rect key="frame" x="0.0" y="106" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NDp-Oj-Z2I"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="W0D-zc-rpG"/> |
| | | <constraint firstAttribute="height" constant="4" id="yuL-Rk-etJ"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="结束时间" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QGU-ac-iPD"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KWP-oW-KNC"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="QGU-ac-iPD" firstAttribute="centerY" secondItem="NDp-Oj-Z2I" secondAttribute="centerY" id="0C4-yb-AH9"/> |
| | | <constraint firstAttribute="height" constant="46" id="HEB-Xn-AUE"/> |
| | | <constraint firstItem="NDp-Oj-Z2I" firstAttribute="leading" secondItem="v3O-7N-rmL" secondAttribute="leading" constant="14" id="HsH-45-Gm3"/> |
| | | <constraint firstItem="KWP-oW-KNC" firstAttribute="top" secondItem="QGU-ac-iPD" secondAttribute="bottom" constant="8" id="S3n-OW-vPe"/> |
| | | <constraint firstItem="KWP-oW-KNC" firstAttribute="leading" secondItem="QGU-ac-iPD" secondAttribute="leading" id="U1d-Qy-VJu"/> |
| | | <constraint firstItem="NDp-Oj-Z2I" firstAttribute="top" secondItem="v3O-7N-rmL" secondAttribute="top" constant="11" id="Uhj-wb-KYN"/> |
| | | <constraint firstItem="QGU-ac-iPD" firstAttribute="leading" secondItem="NDp-Oj-Z2I" secondAttribute="trailing" constant="4" id="XTb-Dg-44g"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qId-co-idC"> |
| | | <rect key="frame" x="0.0" y="152" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mfo-6J-oqN"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="GXG-wA-fY5"/> |
| | | <constraint firstAttribute="width" constant="4" id="dI7-gB-6gk"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="报名年龄" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vC4-SB-uvi"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q5v-M5-mW9"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="46" id="QIG-8R-zvY"/> |
| | | <constraint firstItem="vC4-SB-uvi" firstAttribute="centerY" secondItem="mfo-6J-oqN" secondAttribute="centerY" id="TI4-yf-nt0"/> |
| | | <constraint firstItem="mfo-6J-oqN" firstAttribute="top" secondItem="qId-co-idC" secondAttribute="top" constant="11" id="aFM-zi-yeE"/> |
| | | <constraint firstItem="Q5v-M5-mW9" firstAttribute="leading" secondItem="vC4-SB-uvi" secondAttribute="leading" id="mhQ-Qj-11Y"/> |
| | | <constraint firstItem="vC4-SB-uvi" firstAttribute="leading" secondItem="mfo-6J-oqN" secondAttribute="trailing" constant="4" id="nkf-8o-LKJ"/> |
| | | <constraint firstItem="Q5v-M5-mW9" firstAttribute="top" secondItem="vC4-SB-uvi" secondAttribute="bottom" constant="8" id="rtf-Q1-36I"/> |
| | | <constraint firstItem="mfo-6J-oqN" firstAttribute="leading" secondItem="qId-co-idC" secondAttribute="leading" constant="14" id="yLO-hg-2bD"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="l9R-Ga-fLH"> |
| | | <rect key="frame" x="0.0" y="198" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="okM-ez-6Ik"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="KhN-fK-aHU"/> |
| | | <constraint firstAttribute="width" constant="4" id="Pp4-HY-dWW"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参赛者性别" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="H3I-yA-Bya"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="61.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TnZ-pd-b7f"> |
| | | <rect key="frame" x="22" y="28.333333333333368" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="okM-ez-6Ik" firstAttribute="top" secondItem="l9R-Ga-fLH" secondAttribute="top" constant="11" id="0BW-bd-iEI"/> |
| | | <constraint firstItem="TnZ-pd-b7f" firstAttribute="leading" secondItem="H3I-yA-Bya" secondAttribute="leading" id="GND-FZ-kue"/> |
| | | <constraint firstItem="H3I-yA-Bya" firstAttribute="leading" secondItem="okM-ez-6Ik" secondAttribute="trailing" constant="4" id="KlC-rP-ex6"/> |
| | | <constraint firstItem="TnZ-pd-b7f" firstAttribute="top" secondItem="H3I-yA-Bya" secondAttribute="bottom" constant="8" id="Rbk-Il-vl2"/> |
| | | <constraint firstItem="okM-ez-6Ik" firstAttribute="leading" secondItem="l9R-Ga-fLH" secondAttribute="leading" constant="14" id="pnu-oL-m8E"/> |
| | | <constraint firstItem="H3I-yA-Bya" firstAttribute="centerY" secondItem="okM-ez-6Ik" secondAttribute="centerY" id="voF-RF-Jt3"/> |
| | | <constraint firstAttribute="height" constant="46" id="zbm-p5-z06"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="e17-4R-Ahj"> |
| | | <rect key="frame" x="0.0" y="244.00000000000003" width="393" height="60.333333333333343"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ldf-Hp-3w2"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="U17-v1-p3b"/> |
| | | <constraint firstAttribute="width" constant="4" id="U1Q-0N-UEM"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参赛地址" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HZH-XR-Cyd"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Mmh-IM-z9o"> |
| | | <rect key="frame" x="22" y="28.333333333333371" width="335.33333333333331" height="28.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7pR-VP-V2H"> |
| | | <rect key="frame" x="367.33333333333331" y="35.666666666666629" width="11.666666666666686" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="Ldf-Hp-3w2" firstAttribute="leading" secondItem="e17-4R-Ahj" secondAttribute="leading" constant="14" id="0n0-H8-QvO"/> |
| | | <constraint firstItem="Ldf-Hp-3w2" firstAttribute="top" secondItem="e17-4R-Ahj" secondAttribute="top" constant="11" id="1uK-29-NkQ"/> |
| | | <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="46" id="5nx-G0-BBh"/> |
| | | <constraint firstItem="Mmh-IM-z9o" firstAttribute="top" secondItem="HZH-XR-Cyd" secondAttribute="bottom" constant="8" id="6gb-Iw-Quj"/> |
| | | <constraint firstAttribute="trailing" secondItem="7pR-VP-V2H" secondAttribute="trailing" constant="14" id="Avh-96-hiK"/> |
| | | <constraint firstItem="HZH-XR-Cyd" firstAttribute="centerY" secondItem="Ldf-Hp-3w2" secondAttribute="centerY" id="GJM-8B-sO9"/> |
| | | <constraint firstItem="Mmh-IM-z9o" firstAttribute="leading" secondItem="HZH-XR-Cyd" secondAttribute="leading" id="O2f-wQ-98J"/> |
| | | <constraint firstItem="7pR-VP-V2H" firstAttribute="leading" secondItem="Mmh-IM-z9o" secondAttribute="trailing" constant="10" id="WnC-27-eRf"/> |
| | | <constraint firstAttribute="bottom" secondItem="Mmh-IM-z9o" secondAttribute="bottom" constant="3.3300000000000001" id="iUN-GV-9Dy"/> |
| | | <constraint firstItem="HZH-XR-Cyd" firstAttribute="leading" secondItem="Ldf-Hp-3w2" secondAttribute="trailing" constant="4" id="lsJ-A8-9Zs"/> |
| | | <constraint firstItem="7pR-VP-V2H" firstAttribute="centerY" secondItem="Mmh-IM-z9o" secondAttribute="centerY" id="txZ-3b-LNW"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eHe-nQ-dnr"> |
| | | <rect key="frame" x="0.0" y="304.33333333333337" width="393" height="76"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="98j-P8-3ZM"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="FHF-wa-ffN"/> |
| | | <constraint firstAttribute="width" constant="4" id="G3r-RV-m7x"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参赛赛点" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WIP-Iv-LJH"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h8z-hN-Sq9"> |
| | | <rect key="frame" x="22" y="28.333333333333258" width="285" height="28.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AgA-ET-N0O"> |
| | | <rect key="frame" x="329" y="29" width="50" height="27"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="50" id="ENG-cZ-Ucn"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="查看更多"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | </button> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="AgA-ET-N0O" firstAttribute="leading" secondItem="h8z-hN-Sq9" secondAttribute="trailing" constant="22" id="1XR-bZ-Fbo"/> |
| | | <constraint firstItem="98j-P8-3ZM" firstAttribute="leading" secondItem="eHe-nQ-dnr" secondAttribute="leading" constant="14" id="5pu-FD-Oj7"/> |
| | | <constraint firstAttribute="bottom" secondItem="h8z-hN-Sq9" secondAttribute="bottom" constant="19" id="Ekf-hy-Z9a"/> |
| | | <constraint firstItem="WIP-Iv-LJH" firstAttribute="leading" secondItem="98j-P8-3ZM" secondAttribute="trailing" constant="4" id="HsS-4E-iwy"/> |
| | | <constraint firstItem="h8z-hN-Sq9" firstAttribute="leading" secondItem="WIP-Iv-LJH" secondAttribute="leading" id="KWd-zr-GVw"/> |
| | | <constraint firstItem="AgA-ET-N0O" firstAttribute="centerY" secondItem="h8z-hN-Sq9" secondAttribute="centerY" id="OzY-BZ-RrO"/> |
| | | <constraint firstAttribute="trailing" secondItem="AgA-ET-N0O" secondAttribute="trailing" constant="14" id="SZ7-NM-Tky"/> |
| | | <constraint firstItem="98j-P8-3ZM" firstAttribute="top" secondItem="eHe-nQ-dnr" secondAttribute="top" constant="11" id="Xlw-ba-qOQ"/> |
| | | <constraint firstItem="h8z-hN-Sq9" firstAttribute="top" secondItem="WIP-Iv-LJH" secondAttribute="bottom" constant="8" id="uPi-IY-ltN"/> |
| | | <constraint firstItem="WIP-Iv-LJH" firstAttribute="centerY" secondItem="98j-P8-3ZM" secondAttribute="centerY" id="wkO-gM-bv3"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aGT-jP-y75"> |
| | | <rect key="frame" x="0.0" y="432.33333333333337" width="393" height="115"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dAY-sB-Oy6"> |
| | | <rect key="frame" x="13" y="0.0" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="Js5-Ad-H5C"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="00C-zB-N9A"> |
| | | <rect key="frame" x="13" y="114" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="2Ww-G7-0ug"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="活动费用" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oPd-tE-l3b"> |
| | | <rect key="frame" x="14" y="15" width="365" height="21"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="12" translatesAutoresizingMaskIntoConstraints="NO" id="SW6-bw-VJg"> |
| | | <rect key="frame" x="14" y="48" width="365" height="52"/> |
| | | <subviews> |
| | | <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="YLS-4m-YQ9"> |
| | | <rect key="frame" x="0.0" y="0.0" width="365" height="20"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eMQ-rk-ufL"> |
| | | <rect key="frame" x="0.0" y="0.0" width="182.66666666666666" height="20"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="支付:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aTX-fh-UE9"> |
| | | <rect key="frame" x="0.0" y="0.0" width="43" height="20"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="43" id="ONi-tS-0mw"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥0/人" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="W3G-c7-g9n"> |
| | | <rect key="frame" x="43" y="0.0" width="139.66666666666666" height="20"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="W3G-c7-g9n" firstAttribute="leading" secondItem="aTX-fh-UE9" secondAttribute="trailing" id="ERA-51-Asw"/> |
| | | <constraint firstItem="W3G-c7-g9n" firstAttribute="centerY" secondItem="aTX-fh-UE9" secondAttribute="centerY" id="I3N-Uv-aAq"/> |
| | | <constraint firstAttribute="trailing" secondItem="W3G-c7-g9n" secondAttribute="trailing" id="L2i-kI-Bij"/> |
| | | <constraint firstItem="W3G-c7-g9n" firstAttribute="top" secondItem="eMQ-rk-ufL" secondAttribute="top" id="L5f-CK-0ye"/> |
| | | <constraint firstAttribute="bottom" secondItem="aTX-fh-UE9" secondAttribute="bottom" id="Yms-4b-eYA"/> |
| | | <constraint firstItem="aTX-fh-UE9" firstAttribute="leading" secondItem="eMQ-rk-ufL" secondAttribute="leading" id="cpc-Nf-nXI"/> |
| | | <constraint firstItem="aTX-fh-UE9" firstAttribute="top" secondItem="eMQ-rk-ufL" secondAttribute="top" id="fqi-P8-x32"/> |
| | | <constraint firstAttribute="bottom" secondItem="W3G-c7-g9n" secondAttribute="bottom" id="oJ6-0D-Sje"/> |
| | | <constraint firstAttribute="height" constant="20" id="vW1-uu-1kl"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wNH-nX-al9"> |
| | | <rect key="frame" x="182.66666666666663" y="0.0" width="182.33333333333337" height="20"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="玩湃币:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5zU-uC-sCE"> |
| | | <rect key="frame" x="0.0" y="1.6666666666666288" width="50.333333333333336" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0币/人" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cVX-U3-mzN"> |
| | | <rect key="frame" x="50.333333333333343" y="1.6666666666666288" width="47.333333333333343" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="5zU-uC-sCE" firstAttribute="centerY" secondItem="wNH-nX-al9" secondAttribute="centerY" id="19D-1p-6Ss"/> |
| | | <constraint firstItem="cVX-U3-mzN" firstAttribute="leading" secondItem="5zU-uC-sCE" secondAttribute="trailing" id="D3n-nM-LWu"/> |
| | | <constraint firstItem="cVX-U3-mzN" firstAttribute="centerY" secondItem="5zU-uC-sCE" secondAttribute="centerY" id="MGE-O6-MU6"/> |
| | | <constraint firstItem="5zU-uC-sCE" firstAttribute="leading" secondItem="wNH-nX-al9" secondAttribute="leading" id="gJw-6x-jRr"/> |
| | | <constraint firstAttribute="height" constant="20" id="tad-e0-9l4"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="3Dp-AY-2Wf"> |
| | | <rect key="frame" x="0.0" y="32" width="365" height="20"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TGs-DL-QOC"> |
| | | <rect key="frame" x="0.0" y="0.0" width="365" height="20"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="课时:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dre-ap-xmP"> |
| | | <rect key="frame" x="0.0" y="1.6666666666666288" width="43" height="17"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="43" id="9d0-Mx-3pc"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0课时/人" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0HL-O0-GC6"> |
| | | <rect key="frame" x="43" y="1.6666666666666288" width="322" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20" id="3wY-eq-tBC"/> |
| | | <constraint firstItem="0HL-O0-GC6" firstAttribute="leading" secondItem="dre-ap-xmP" secondAttribute="trailing" id="5U5-Z8-uiP"/> |
| | | <constraint firstItem="dre-ap-xmP" firstAttribute="leading" secondItem="TGs-DL-QOC" secondAttribute="leading" id="BgY-WU-NZU"/> |
| | | <constraint firstItem="0HL-O0-GC6" firstAttribute="centerY" secondItem="dre-ap-xmP" secondAttribute="centerY" id="Fzc-XM-cuO"/> |
| | | <constraint firstAttribute="trailing" secondItem="0HL-O0-GC6" secondAttribute="trailing" id="ILT-nR-rO3"/> |
| | | <constraint firstItem="dre-ap-xmP" firstAttribute="centerY" secondItem="TGs-DL-QOC" secondAttribute="centerY" id="N3m-ZC-TY3"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | </subviews> |
| | | </stackView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="trailing" secondItem="SW6-bw-VJg" secondAttribute="trailing" constant="14" id="0A1-Bf-GR8"/> |
| | | <constraint firstAttribute="trailing" secondItem="oPd-tE-l3b" secondAttribute="trailing" constant="14" id="BGx-cV-M5B"/> |
| | | <constraint firstItem="oPd-tE-l3b" firstAttribute="top" secondItem="dAY-sB-Oy6" secondAttribute="bottom" constant="14" id="Bug-xi-rsJ"/> |
| | | <constraint firstItem="dAY-sB-Oy6" firstAttribute="leading" secondItem="aGT-jP-y75" secondAttribute="leading" constant="13" id="OI3-Nv-pSf"/> |
| | | <constraint firstAttribute="trailing" secondItem="dAY-sB-Oy6" secondAttribute="trailing" id="P4j-b8-f1D"/> |
| | | <constraint firstItem="00C-zB-N9A" firstAttribute="leading" secondItem="aGT-jP-y75" secondAttribute="leading" constant="13" id="ZpW-54-jYo"/> |
| | | <constraint firstItem="SW6-bw-VJg" firstAttribute="leading" secondItem="aGT-jP-y75" secondAttribute="leading" constant="14" id="doC-W6-YAq"/> |
| | | <constraint firstItem="00C-zB-N9A" firstAttribute="top" secondItem="SW6-bw-VJg" secondAttribute="bottom" constant="14" id="e94-Bx-fY0"/> |
| | | <constraint firstAttribute="trailing" secondItem="00C-zB-N9A" secondAttribute="trailing" id="hcX-oq-8zQ"/> |
| | | <constraint firstItem="SW6-bw-VJg" firstAttribute="top" secondItem="oPd-tE-l3b" secondAttribute="bottom" constant="12" id="km2-TG-Obh"/> |
| | | <constraint firstAttribute="height" constant="115" id="nnO-7y-jH3"/> |
| | | <constraint firstAttribute="bottom" secondItem="00C-zB-N9A" secondAttribute="bottom" id="oM7-og-cch"/> |
| | | <constraint firstItem="oPd-tE-l3b" firstAttribute="leading" secondItem="aGT-jP-y75" secondAttribute="leading" constant="14" id="soz-s5-g6q"/> |
| | | <constraint firstItem="dAY-sB-Oy6" firstAttribute="top" secondItem="aGT-jP-y75" secondAttribute="top" id="uT1-3g-2a0"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xyq-vd-5Sz"> |
| | | <rect key="frame" x="0.0" y="547.33333333333337" width="393" height="149.33333333333337"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ub3-DL-aH6"> |
| | | <rect key="frame" x="13" y="0.0" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="xec-5c-ydr"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="赛事人员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ldY-d5-HF6"> |
| | | <rect key="frame" x="14" y="15" width="65.333333333333329" height="29"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="vdV-Kg-Dhx"> |
| | | <rect key="frame" x="0.0" y="49.333333333333258" width="393" height="100"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="100" id="7Nj-Ch-Bss"/> |
| | | </constraints> |
| | | </tableView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="bottom" secondItem="vdV-Kg-Dhx" secondAttribute="bottom" id="4i6-s6-fOL"/> |
| | | <constraint firstItem="vdV-Kg-Dhx" firstAttribute="leading" secondItem="Xyq-vd-5Sz" secondAttribute="leading" id="Acb-8j-W2N"/> |
| | | <constraint firstAttribute="trailing" secondItem="ub3-DL-aH6" secondAttribute="trailing" id="DWP-md-W2S"/> |
| | | <constraint firstItem="ub3-DL-aH6" firstAttribute="leading" secondItem="Xyq-vd-5Sz" secondAttribute="leading" constant="13" id="Vzl-fJ-G2Y"/> |
| | | <constraint firstItem="vdV-Kg-Dhx" firstAttribute="top" secondItem="ldY-d5-HF6" secondAttribute="bottom" constant="5.5" id="go9-ce-gRs"/> |
| | | <constraint firstItem="ub3-DL-aH6" firstAttribute="top" secondItem="Xyq-vd-5Sz" secondAttribute="top" id="icE-L6-uAK"/> |
| | | <constraint firstItem="ldY-d5-HF6" firstAttribute="top" secondItem="ub3-DL-aH6" secondAttribute="bottom" constant="14" id="nzY-lw-16n"/> |
| | | <constraint firstItem="ldY-d5-HF6" firstAttribute="leading" secondItem="Xyq-vd-5Sz" secondAttribute="leading" constant="14" id="vtH-NU-eJN"/> |
| | | <constraint firstAttribute="trailing" secondItem="vdV-Kg-Dhx" secondAttribute="trailing" id="whK-0R-Dtm"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fch-vq-WNu"> |
| | | <rect key="frame" x="0.0" y="696.66666666666663" width="393" height="44"/> |
| | | <subviews> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="q5y-in-bNV"> |
| | | <rect key="frame" x="14" y="9.6666666666667425" width="25" height="25"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" image="btn_choose"/> |
| | | <state key="selected" image="btn_choose_s"/> |
| | | </button> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="我已阅读并同意" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VLx-ri-X99"> |
| | | <rect key="frame" x="48" y="15" width="86" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="《社区世界杯报名协议》" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="X7e-Ua-008"> |
| | | <rect key="frame" x="136" y="15" width="123" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.47058823529411764" blue="0.80392156862745101" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="q5y-in-bNV" firstAttribute="centerY" secondItem="fch-vq-WNu" secondAttribute="centerY" id="9Co-Iy-tMh"/> |
| | | <constraint firstItem="VLx-ri-X99" firstAttribute="leading" secondItem="q5y-in-bNV" secondAttribute="trailing" constant="9" id="Fc8-qF-wG0"/> |
| | | <constraint firstAttribute="height" constant="44" id="eqp-mh-FIe"/> |
| | | <constraint firstItem="X7e-Ua-008" firstAttribute="centerY" secondItem="q5y-in-bNV" secondAttribute="centerY" id="hFC-ME-4lm"/> |
| | | <constraint firstItem="VLx-ri-X99" firstAttribute="centerY" secondItem="fch-vq-WNu" secondAttribute="centerY" id="lwA-kp-bcm"/> |
| | | <constraint firstItem="X7e-Ua-008" firstAttribute="leading" secondItem="VLx-ri-X99" secondAttribute="trailing" constant="2" id="vAK-1n-fDh"/> |
| | | <constraint firstItem="q5y-in-bNV" firstAttribute="leading" secondItem="fch-vq-WNu" secondAttribute="leading" constant="14" id="xd7-B4-xVU"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="IJF-wN-cS1" firstAttribute="leading" secondItem="WO4-Rx-Gdq" secondAttribute="leading" id="2eY-bq-jRN"/> |
| | | <constraint firstAttribute="bottom" secondItem="IJF-wN-cS1" secondAttribute="bottom" id="CsF-Ry-94g"/> |
| | | <constraint firstItem="iHH-PB-5zL" firstAttribute="top" secondItem="WO4-Rx-Gdq" secondAttribute="top" id="Pro-dd-2Es"/> |
| | | <constraint firstAttribute="trailing" secondItem="iHH-PB-5zL" secondAttribute="trailing" id="ULI-tf-2YJ"/> |
| | | <constraint firstAttribute="trailing" secondItem="IJF-wN-cS1" secondAttribute="trailing" id="pkD-jh-N6P"/> |
| | | <constraint firstItem="iHH-PB-5zL" firstAttribute="leading" secondItem="WO4-Rx-Gdq" secondAttribute="leading" id="tEt-1q-mO6"/> |
| | | <constraint firstItem="IJF-wN-cS1" firstAttribute="top" secondItem="iHH-PB-5zL" secondAttribute="bottom" id="tv5-7T-iYm"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | <constraints> |
| | | <constraint firstItem="WO4-Rx-Gdq" firstAttribute="centerX" secondItem="d0O-dD-t7J" secondAttribute="centerX" id="0Qi-Pu-73z"/> |
| | | <constraint firstAttribute="bottom" secondItem="WO4-Rx-Gdq" secondAttribute="bottom" constant="15" id="Prw-WG-NFe"/> |
| | | <constraint firstAttribute="trailing" secondItem="WO4-Rx-Gdq" secondAttribute="trailing" id="RXB-8v-eGN"/> |
| | | <constraint firstItem="WO4-Rx-Gdq" firstAttribute="top" secondItem="d0O-dD-t7J" secondAttribute="top" id="YLL-Qi-QPQ"/> |
| | | <constraint firstItem="WO4-Rx-Gdq" firstAttribute="leading" secondItem="d0O-dD-t7J" secondAttribute="leading" id="vo5-JG-jpb"/> |
| | | </constraints> |
| | | </scrollView> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kdj-bD-RIR"> |
| | | <rect key="frame" x="0.0" y="770" width="393" height="48"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="48" id="c1B-2f-SYW"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="立即报名"/> |
| | | </button> |
| | | </subviews> |
| | | <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="kdj-bD-RIR" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="1co-8i-A9P"/> |
| | | <constraint firstItem="kdj-bD-RIR" firstAttribute="trailing" secondItem="fnl-2z-Ty3" secondAttribute="trailing" id="9yt-ZO-hYa"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="kdj-bD-RIR" secondAttribute="bottom" id="S9J-V1-Yqz"/> |
| | | <constraint firstItem="kdj-bD-RIR" firstAttribute="top" secondItem="d0O-dD-t7J" secondAttribute="bottom" id="TJb-uY-LzR"/> |
| | | <constraint firstItem="d0O-dD-t7J" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="topMargin" id="U9h-yq-JDr"/> |
| | | <constraint firstAttribute="trailing" secondItem="d0O-dD-t7J" secondAttribute="trailing" id="Vaf-dW-a13"/> |
| | | <constraint firstItem="d0O-dD-t7J" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="l4X-LJ-oNR"/> |
| | | </constraints> |
| | | <point key="canvasLocation" x="140" y="21"/> |
| | | </view> |
| | | </objects> |
| | | <resources> |
| | | <image name="btn_choose" width="25" height="25"/> |
| | | <image name="btn_choose_s" width="25" height="25"/> |
| | | <image name="icon_hot_1" width="24" height="28"/> |
| | | <namedColor name="FE6E0D"> |
| | | <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
New file |
| | |
| | | // |
| | | // WorldCupContentApplyVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/28. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class WorldCupContentApplyVC: BaseVC { |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "社区世界杯" |
| | | } |
| | | |
| | | |
| | | @IBAction func applyAction(_ sender: UIButton) { |
| | | let vc = WorldCupContentApplyInputVC() |
| | | push(vc: vc) |
| | | } |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WorldCupContentApplyVC" customModule="WanPai" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | </connections> |
| | | </placeholder> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kfP-hX-Uro"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="770"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Znd-Yy-pV8"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="1030.6666666666667"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rEE-UF-kCK"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="220"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" secondItem="rEE-UF-kCK" secondAttribute="height" multiplier="1:0.56" id="BTA-vT-ror"/> |
| | | </constraints> |
| | | </view> |
| | | <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="m0C-wO-vqk"> |
| | | <rect key="frame" x="0.0" y="219.99999999999994" width="393" height="810.66666666666652"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wcT-mn-66z"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="52"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" horizontalCompressionResistancePriority="250" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tkR-Qw-6Qd"> |
| | | <rect key="frame" x="13.999999999999998" y="14" width="16.333333333333329" height="28"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="25" id="5EP-7c-ki7"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jd8-Rb-YuY"> |
| | | <rect key="frame" x="14" y="51" width="379" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="GUo-Ud-FAx"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KUT-ZO-3d1"> |
| | | <rect key="frame" x="367.33333333333331" y="15.333333333333345" width="11.666666666666686" height="21.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/> |
| | | <color key="textColor" name="FE6E0D"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_hot_1" translatesAutoresizingMaskIntoConstraints="NO" id="Zd4-RU-V1f"> |
| | | <rect key="frame" x="344.33333333333331" y="13" width="19" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="18.859999999999999" id="KUN-xb-orE"/> |
| | | <constraint firstAttribute="height" constant="22" id="pn6-FY-Yr1"/> |
| | | </constraints> |
| | | </imageView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="jd8-Rb-YuY" firstAttribute="leading" secondItem="wcT-mn-66z" secondAttribute="leading" constant="14" id="2UA-6n-26Z"/> |
| | | <constraint firstAttribute="trailing" secondItem="KUT-ZO-3d1" secondAttribute="trailing" constant="14" id="4PI-h2-aon"/> |
| | | <constraint firstItem="KUT-ZO-3d1" firstAttribute="leading" secondItem="Zd4-RU-V1f" secondAttribute="trailing" constant="4" id="Hrn-RJ-YMZ"/> |
| | | <constraint firstItem="Zd4-RU-V1f" firstAttribute="centerY" secondItem="wcT-mn-66z" secondAttribute="centerY" constant="-2" id="K9C-5X-XbL"/> |
| | | <constraint firstItem="tkR-Qw-6Qd" firstAttribute="top" secondItem="wcT-mn-66z" secondAttribute="top" constant="14" id="b37-mr-sEP"/> |
| | | <constraint firstItem="jd8-Rb-YuY" firstAttribute="top" secondItem="tkR-Qw-6Qd" secondAttribute="bottom" constant="9" id="gew-Pb-eXt"/> |
| | | <constraint firstItem="tkR-Qw-6Qd" firstAttribute="leading" secondItem="wcT-mn-66z" secondAttribute="leading" constant="14" id="hta-Wj-MHo"/> |
| | | <constraint firstAttribute="bottom" secondItem="jd8-Rb-YuY" secondAttribute="bottom" id="itl-PF-pTN"/> |
| | | <constraint firstAttribute="trailing" secondItem="jd8-Rb-YuY" secondAttribute="trailing" id="ySF-XF-orO"/> |
| | | <constraint firstItem="KUT-ZO-3d1" firstAttribute="centerY" secondItem="wcT-mn-66z" secondAttribute="centerY" id="ymM-F6-A3v"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="slH-Se-Biq"> |
| | | <rect key="frame" x="0.0" y="52" width="393" height="380.33333333333331"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Km4-Um-isb"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="60"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="91A-ng-KoK"> |
| | | <rect key="frame" x="14" y="18" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="QzC-il-waT"/> |
| | | <constraint firstAttribute="height" constant="4" id="x7O-2j-Fy5"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="截止报名时间" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Eoi-v2-Ou9"> |
| | | <rect key="frame" x="22" y="13" width="73.666666666666671" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Uw0-ht-Y4A"> |
| | | <rect key="frame" x="22" y="35.333333333333314" width="11.666666666666664" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="Uw0-ht-Y4A" firstAttribute="top" secondItem="Eoi-v2-Ou9" secondAttribute="bottom" constant="8" id="D27-kr-Nl8"/> |
| | | <constraint firstItem="Eoi-v2-Ou9" firstAttribute="leading" secondItem="91A-ng-KoK" secondAttribute="trailing" constant="4" id="PWu-4D-jHC"/> |
| | | <constraint firstItem="91A-ng-KoK" firstAttribute="leading" secondItem="Km4-Um-isb" secondAttribute="leading" constant="14" id="YU3-qm-S35"/> |
| | | <constraint firstItem="91A-ng-KoK" firstAttribute="top" secondItem="Km4-Um-isb" secondAttribute="top" constant="18" id="hWt-3v-5RG"/> |
| | | <constraint firstItem="Eoi-v2-Ou9" firstAttribute="centerY" secondItem="91A-ng-KoK" secondAttribute="centerY" id="iax-Cv-dtz"/> |
| | | <constraint firstItem="Uw0-ht-Y4A" firstAttribute="leading" secondItem="Eoi-v2-Ou9" secondAttribute="leading" id="noz-P0-kCq"/> |
| | | <constraint firstAttribute="height" constant="60" id="vHm-Bd-xlX"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rWR-sH-mTs"> |
| | | <rect key="frame" x="0.0" y="60" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cKk-af-RIX"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="Yfk-vl-4Y5"/> |
| | | <constraint firstAttribute="width" constant="4" id="lM3-J8-3RS"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="开始时间" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="E0G-QY-dCf"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bNs-tK-h0l"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="E0G-QY-dCf" firstAttribute="leading" secondItem="cKk-af-RIX" secondAttribute="trailing" constant="4" id="3CN-d2-efp"/> |
| | | <constraint firstItem="bNs-tK-h0l" firstAttribute="top" secondItem="E0G-QY-dCf" secondAttribute="bottom" constant="8" id="Bpz-70-xeB"/> |
| | | <constraint firstItem="E0G-QY-dCf" firstAttribute="centerY" secondItem="cKk-af-RIX" secondAttribute="centerY" id="K6f-HP-YO9"/> |
| | | <constraint firstItem="cKk-af-RIX" firstAttribute="top" secondItem="rWR-sH-mTs" secondAttribute="top" constant="11" id="Knf-1k-laU"/> |
| | | <constraint firstAttribute="height" constant="46" id="Z6u-OE-TMs"/> |
| | | <constraint firstItem="bNs-tK-h0l" firstAttribute="leading" secondItem="E0G-QY-dCf" secondAttribute="leading" id="bV3-AG-Mlk"/> |
| | | <constraint firstItem="cKk-af-RIX" firstAttribute="leading" secondItem="rWR-sH-mTs" secondAttribute="leading" constant="14" id="y24-5d-V2L"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iHp-bB-GhW"> |
| | | <rect key="frame" x="0.0" y="106" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cQD-hW-Khv"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="OrQ-vw-gt3"/> |
| | | <constraint firstAttribute="width" constant="4" id="nq5-ci-WdA"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="结束时间" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="y3f-Ri-Abk"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5Bo-1K-36O"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="5Bo-1K-36O" firstAttribute="top" secondItem="y3f-Ri-Abk" secondAttribute="bottom" constant="8" id="3PE-AW-fS5"/> |
| | | <constraint firstItem="y3f-Ri-Abk" firstAttribute="centerY" secondItem="cQD-hW-Khv" secondAttribute="centerY" id="D3h-yb-sUZ"/> |
| | | <constraint firstItem="5Bo-1K-36O" firstAttribute="leading" secondItem="y3f-Ri-Abk" secondAttribute="leading" id="JEu-Od-Jl4"/> |
| | | <constraint firstAttribute="height" constant="46" id="SGS-mW-EXg"/> |
| | | <constraint firstItem="y3f-Ri-Abk" firstAttribute="leading" secondItem="cQD-hW-Khv" secondAttribute="trailing" constant="4" id="WXa-g6-rYQ"/> |
| | | <constraint firstItem="cQD-hW-Khv" firstAttribute="top" secondItem="iHp-bB-GhW" secondAttribute="top" constant="11" id="WcB-KS-eyv"/> |
| | | <constraint firstItem="cQD-hW-Khv" firstAttribute="leading" secondItem="iHp-bB-GhW" secondAttribute="leading" constant="14" id="aej-iF-OKB"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NjC-YL-7dl"> |
| | | <rect key="frame" x="0.0" y="152" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rqM-aB-cHp"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="WJp-K1-qQm"/> |
| | | <constraint firstAttribute="height" constant="4" id="h9Z-An-Mvo"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="报名年龄" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PWT-C5-wFg"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e1B-PO-EcV"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="PWT-C5-wFg" firstAttribute="centerY" secondItem="rqM-aB-cHp" secondAttribute="centerY" id="AvC-bW-DdF"/> |
| | | <constraint firstItem="PWT-C5-wFg" firstAttribute="leading" secondItem="rqM-aB-cHp" secondAttribute="trailing" constant="4" id="FCE-9l-fOy"/> |
| | | <constraint firstAttribute="height" constant="46" id="I8S-hd-Uuc"/> |
| | | <constraint firstItem="rqM-aB-cHp" firstAttribute="top" secondItem="NjC-YL-7dl" secondAttribute="top" constant="11" id="ddN-Dx-FpL"/> |
| | | <constraint firstItem="rqM-aB-cHp" firstAttribute="leading" secondItem="NjC-YL-7dl" secondAttribute="leading" constant="14" id="glX-gJ-AtH"/> |
| | | <constraint firstItem="e1B-PO-EcV" firstAttribute="leading" secondItem="PWT-C5-wFg" secondAttribute="leading" id="txc-VG-9gP"/> |
| | | <constraint firstItem="e1B-PO-EcV" firstAttribute="top" secondItem="PWT-C5-wFg" secondAttribute="bottom" constant="8" id="v8g-I0-ah6"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pIU-aG-q1y"> |
| | | <rect key="frame" x="0.0" y="198" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XWM-5S-Map"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="1ar-H8-bfW"/> |
| | | <constraint firstAttribute="width" constant="4" id="ZYs-Bp-gVR"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参赛者性别" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="obX-YS-Mg8"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="61.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Kbi-qd-Cnt"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="obX-YS-Mg8" firstAttribute="centerY" secondItem="XWM-5S-Map" secondAttribute="centerY" id="3o6-2u-Tb8"/> |
| | | <constraint firstItem="XWM-5S-Map" firstAttribute="leading" secondItem="pIU-aG-q1y" secondAttribute="leading" constant="14" id="HdJ-7m-LIS"/> |
| | | <constraint firstAttribute="height" constant="46" id="IXF-eQ-WMI"/> |
| | | <constraint firstItem="XWM-5S-Map" firstAttribute="top" secondItem="pIU-aG-q1y" secondAttribute="top" constant="11" id="jD4-gt-auh"/> |
| | | <constraint firstItem="obX-YS-Mg8" firstAttribute="leading" secondItem="XWM-5S-Map" secondAttribute="trailing" constant="4" id="kcb-XU-hyV"/> |
| | | <constraint firstItem="Kbi-qd-Cnt" firstAttribute="leading" secondItem="obX-YS-Mg8" secondAttribute="leading" id="qnO-mV-edu"/> |
| | | <constraint firstItem="Kbi-qd-Cnt" firstAttribute="top" secondItem="obX-YS-Mg8" secondAttribute="bottom" constant="8" id="wg7-py-Lps"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jhb-G1-1OS"> |
| | | <rect key="frame" x="0.0" y="244.00000000000003" width="393" height="60.333333333333343"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="G1e-j9-acv"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="jCv-QP-Xft"/> |
| | | <constraint firstAttribute="height" constant="4" id="p4x-YF-usg"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参赛地址" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Plw-ic-Z8D"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5zE-II-xtR"> |
| | | <rect key="frame" x="22" y="28.333333333333371" width="335.33333333333331" height="28.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ljf-wN-gW1"> |
| | | <rect key="frame" x="367.33333333333331" y="35.666666666666629" width="11.666666666666686" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="5zE-II-xtR" firstAttribute="leading" secondItem="Plw-ic-Z8D" secondAttribute="leading" id="EAR-PY-Vaf"/> |
| | | <constraint firstItem="ljf-wN-gW1" firstAttribute="centerY" secondItem="5zE-II-xtR" secondAttribute="centerY" id="FNq-DC-vmE"/> |
| | | <constraint firstAttribute="trailing" secondItem="ljf-wN-gW1" secondAttribute="trailing" constant="14" id="JyQ-Pc-uVq"/> |
| | | <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="46" id="NsC-OO-zRO"/> |
| | | <constraint firstItem="G1e-j9-acv" firstAttribute="top" secondItem="jhb-G1-1OS" secondAttribute="top" constant="11" id="OSn-Ya-hdE"/> |
| | | <constraint firstItem="ljf-wN-gW1" firstAttribute="leading" secondItem="5zE-II-xtR" secondAttribute="trailing" constant="10" id="Xgk-p3-zVd"/> |
| | | <constraint firstItem="Plw-ic-Z8D" firstAttribute="leading" secondItem="G1e-j9-acv" secondAttribute="trailing" constant="4" id="Ygk-9c-2Mu"/> |
| | | <constraint firstAttribute="bottom" secondItem="5zE-II-xtR" secondAttribute="bottom" constant="3.3300000000000001" id="dcp-TI-tEs"/> |
| | | <constraint firstItem="G1e-j9-acv" firstAttribute="leading" secondItem="jhb-G1-1OS" secondAttribute="leading" constant="14" id="ex5-Nk-sSy"/> |
| | | <constraint firstItem="5zE-II-xtR" firstAttribute="top" secondItem="Plw-ic-Z8D" secondAttribute="bottom" constant="8" id="gVA-Gr-tWf"/> |
| | | <constraint firstItem="Plw-ic-Z8D" firstAttribute="centerY" secondItem="G1e-j9-acv" secondAttribute="centerY" id="zff-vY-gGW"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8HL-65-bBm"> |
| | | <rect key="frame" x="0.0" y="304.33333333333337" width="393" height="76"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="o6f-8L-c7f"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="EXK-75-kab"/> |
| | | <constraint firstAttribute="height" constant="4" id="qbc-fG-XZn"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参赛赛点" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2ER-s2-hpJ"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qol-d4-iqE"> |
| | | <rect key="frame" x="22" y="28.333333333333258" width="285" height="28.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8A3-ba-Lfp"> |
| | | <rect key="frame" x="329" y="29" width="50" height="27"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="50" id="el7-hh-FSn"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="查看更多"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | </button> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="o6f-8L-c7f" firstAttribute="top" secondItem="8HL-65-bBm" secondAttribute="top" constant="11" id="1V9-yZ-8pQ"/> |
| | | <constraint firstAttribute="bottom" secondItem="qol-d4-iqE" secondAttribute="bottom" constant="19" id="4l9-ow-I7n"/> |
| | | <constraint firstItem="2ER-s2-hpJ" firstAttribute="centerY" secondItem="o6f-8L-c7f" secondAttribute="centerY" id="7QP-7z-Aez"/> |
| | | <constraint firstItem="qol-d4-iqE" firstAttribute="top" secondItem="2ER-s2-hpJ" secondAttribute="bottom" constant="8" id="DcE-VO-1hB"/> |
| | | <constraint firstItem="o6f-8L-c7f" firstAttribute="leading" secondItem="8HL-65-bBm" secondAttribute="leading" constant="14" id="G2f-Zk-ERy"/> |
| | | <constraint firstItem="8A3-ba-Lfp" firstAttribute="leading" secondItem="qol-d4-iqE" secondAttribute="trailing" constant="22" id="LdQ-Ig-RbT"/> |
| | | <constraint firstAttribute="trailing" secondItem="8A3-ba-Lfp" secondAttribute="trailing" constant="14" id="Xdf-IN-1qD"/> |
| | | <constraint firstItem="8A3-ba-Lfp" firstAttribute="centerY" secondItem="qol-d4-iqE" secondAttribute="centerY" id="iCH-Lu-zhC"/> |
| | | <constraint firstItem="2ER-s2-hpJ" firstAttribute="leading" secondItem="o6f-8L-c7f" secondAttribute="trailing" constant="4" id="kaR-lT-0OA"/> |
| | | <constraint firstItem="qol-d4-iqE" firstAttribute="leading" secondItem="2ER-s2-hpJ" secondAttribute="leading" id="w9k-Zq-7FP"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ULs-al-mjr"> |
| | | <rect key="frame" x="0.0" y="432.33333333333337" width="393" height="115"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wcV-Lw-oh0"> |
| | | <rect key="frame" x="13" y="0.0" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="BSK-iY-WII"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PKp-1k-HJB"> |
| | | <rect key="frame" x="13" y="114" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="pmf-vb-0Ww"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="活动费用" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="H2m-qM-cUy"> |
| | | <rect key="frame" x="14" y="15" width="365" height="21"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="12" translatesAutoresizingMaskIntoConstraints="NO" id="NtA-5U-4tc"> |
| | | <rect key="frame" x="14" y="48" width="365" height="52"/> |
| | | <subviews> |
| | | <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="daA-et-L9W"> |
| | | <rect key="frame" x="0.0" y="0.0" width="365" height="20"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Y2l-H5-uB9"> |
| | | <rect key="frame" x="0.0" y="0.0" width="182.66666666666666" height="20"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="支付:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VlI-h9-HoV"> |
| | | <rect key="frame" x="0.0" y="0.0" width="43" height="20"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="43" id="GwX-MF-3nb"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥0/人" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QgZ-yG-G8F"> |
| | | <rect key="frame" x="43" y="0.0" width="139.66666666666666" height="20"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="QgZ-yG-G8F" firstAttribute="top" secondItem="Y2l-H5-uB9" secondAttribute="top" id="1LE-E0-htM"/> |
| | | <constraint firstItem="VlI-h9-HoV" firstAttribute="top" secondItem="Y2l-H5-uB9" secondAttribute="top" id="4nH-pS-YAc"/> |
| | | <constraint firstItem="VlI-h9-HoV" firstAttribute="leading" secondItem="Y2l-H5-uB9" secondAttribute="leading" id="Ii3-sy-Owo"/> |
| | | <constraint firstAttribute="bottom" secondItem="VlI-h9-HoV" secondAttribute="bottom" id="Nyv-3J-SDY"/> |
| | | <constraint firstAttribute="height" constant="20" id="PJr-3K-XWo"/> |
| | | <constraint firstAttribute="bottom" secondItem="QgZ-yG-G8F" secondAttribute="bottom" id="UVO-CV-dKI"/> |
| | | <constraint firstItem="QgZ-yG-G8F" firstAttribute="leading" secondItem="VlI-h9-HoV" secondAttribute="trailing" id="iVq-aD-i8o"/> |
| | | <constraint firstAttribute="trailing" secondItem="QgZ-yG-G8F" secondAttribute="trailing" id="u3C-1b-ISw"/> |
| | | <constraint firstItem="QgZ-yG-G8F" firstAttribute="centerY" secondItem="VlI-h9-HoV" secondAttribute="centerY" id="xaj-Mj-IL4"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="z37-YH-24K"> |
| | | <rect key="frame" x="182.66666666666663" y="0.0" width="182.33333333333337" height="20"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="玩湃币:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xKw-Rf-QBW"> |
| | | <rect key="frame" x="0.0" y="1.6666666666666288" width="50.333333333333336" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0币/人" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nZE-Uv-Vd2"> |
| | | <rect key="frame" x="50.333333333333343" y="1.6666666666666288" width="47.333333333333343" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="nZE-Uv-Vd2" firstAttribute="leading" secondItem="xKw-Rf-QBW" secondAttribute="trailing" id="5c1-6f-cAM"/> |
| | | <constraint firstItem="xKw-Rf-QBW" firstAttribute="leading" secondItem="z37-YH-24K" secondAttribute="leading" id="ItV-If-Tlr"/> |
| | | <constraint firstItem="xKw-Rf-QBW" firstAttribute="centerY" secondItem="z37-YH-24K" secondAttribute="centerY" id="JYI-fr-5xt"/> |
| | | <constraint firstAttribute="height" constant="20" id="KoX-pb-qI3"/> |
| | | <constraint firstItem="nZE-Uv-Vd2" firstAttribute="centerY" secondItem="xKw-Rf-QBW" secondAttribute="centerY" id="Nf4-LD-d1K"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="ev4-Wc-Cfg"> |
| | | <rect key="frame" x="0.0" y="32" width="365" height="20"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="g9N-2R-H2H"> |
| | | <rect key="frame" x="0.0" y="0.0" width="365" height="20"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="课时:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ywl-Uj-fDo"> |
| | | <rect key="frame" x="0.0" y="1.6666666666666288" width="43" height="17"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="43" id="X64-cJ-0C8"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0课时/人" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="H6O-v1-6wa"> |
| | | <rect key="frame" x="43" y="1.6666666666666288" width="322" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="H6O-v1-6wa" firstAttribute="leading" secondItem="ywl-Uj-fDo" secondAttribute="trailing" id="80N-wz-H3z"/> |
| | | <constraint firstAttribute="trailing" secondItem="H6O-v1-6wa" secondAttribute="trailing" id="JFo-1M-DsK"/> |
| | | <constraint firstItem="ywl-Uj-fDo" firstAttribute="centerY" secondItem="g9N-2R-H2H" secondAttribute="centerY" id="Kvr-b2-BlP"/> |
| | | <constraint firstItem="H6O-v1-6wa" firstAttribute="centerY" secondItem="ywl-Uj-fDo" secondAttribute="centerY" id="RwY-3e-FpW"/> |
| | | <constraint firstItem="ywl-Uj-fDo" firstAttribute="leading" secondItem="g9N-2R-H2H" secondAttribute="leading" id="rsY-kM-6cY"/> |
| | | <constraint firstAttribute="height" constant="20" id="tcX-BH-HKN"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | </subviews> |
| | | </stackView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="PKp-1k-HJB" firstAttribute="leading" secondItem="ULs-al-mjr" secondAttribute="leading" constant="13" id="G4S-UC-LNz"/> |
| | | <constraint firstItem="NtA-5U-4tc" firstAttribute="top" secondItem="H2m-qM-cUy" secondAttribute="bottom" constant="12" id="Ik0-pv-FDV"/> |
| | | <constraint firstItem="H2m-qM-cUy" firstAttribute="top" secondItem="wcV-Lw-oh0" secondAttribute="bottom" constant="14" id="IpT-vv-cD9"/> |
| | | <constraint firstItem="wcV-Lw-oh0" firstAttribute="top" secondItem="ULs-al-mjr" secondAttribute="top" id="K0J-Sm-K5I"/> |
| | | <constraint firstAttribute="height" constant="115" id="NHh-2F-h4t"/> |
| | | <constraint firstItem="wcV-Lw-oh0" firstAttribute="leading" secondItem="ULs-al-mjr" secondAttribute="leading" constant="13" id="OEp-4S-aAg"/> |
| | | <constraint firstAttribute="trailing" secondItem="wcV-Lw-oh0" secondAttribute="trailing" id="QiP-QD-VlZ"/> |
| | | <constraint firstItem="H2m-qM-cUy" firstAttribute="leading" secondItem="ULs-al-mjr" secondAttribute="leading" constant="14" id="V0W-Hu-0uT"/> |
| | | <constraint firstAttribute="trailing" secondItem="NtA-5U-4tc" secondAttribute="trailing" constant="14" id="Vbr-bb-TQw"/> |
| | | <constraint firstAttribute="trailing" secondItem="H2m-qM-cUy" secondAttribute="trailing" constant="14" id="aek-Se-lR4"/> |
| | | <constraint firstAttribute="trailing" secondItem="PKp-1k-HJB" secondAttribute="trailing" id="bKp-Bg-LV7"/> |
| | | <constraint firstAttribute="bottom" secondItem="PKp-1k-HJB" secondAttribute="bottom" id="ieS-KI-C78"/> |
| | | <constraint firstItem="NtA-5U-4tc" firstAttribute="leading" secondItem="ULs-al-mjr" secondAttribute="leading" constant="14" id="m0d-RS-u9R"/> |
| | | <constraint firstItem="PKp-1k-HJB" firstAttribute="top" secondItem="NtA-5U-4tc" secondAttribute="bottom" constant="14" id="uDK-if-1Hg"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6sR-XB-fI3"> |
| | | <rect key="frame" x="0.0" y="547.33333333333337" width="393" height="115"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="93x-qG-6UH"> |
| | | <rect key="frame" x="13" y="0.0" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="OxN-OY-72P"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pHn-vF-wj0"> |
| | | <rect key="frame" x="13" y="114" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="GR2-7f-CZU"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="比赛简介" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3h0-Kf-CZk"> |
| | | <rect key="frame" x="14" y="15" width="365" height="61"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3U1-AP-dtr"> |
| | | <rect key="frame" x="14" y="83" width="365" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.23921568630000001" green="0.24313725489999999" blue="0.27058823529999998" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="3U1-AP-dtr" firstAttribute="leading" secondItem="6sR-XB-fI3" secondAttribute="leading" constant="14" id="3jR-sc-1SO"/> |
| | | <constraint firstItem="3U1-AP-dtr" firstAttribute="top" secondItem="3h0-Kf-CZk" secondAttribute="bottom" constant="7" id="7oP-AU-2QW"/> |
| | | <constraint firstItem="93x-qG-6UH" firstAttribute="top" secondItem="6sR-XB-fI3" secondAttribute="top" id="CqC-6b-2oK"/> |
| | | <constraint firstItem="93x-qG-6UH" firstAttribute="leading" secondItem="6sR-XB-fI3" secondAttribute="leading" constant="13" id="Im9-F4-ZOK"/> |
| | | <constraint firstAttribute="trailing" secondItem="pHn-vF-wj0" secondAttribute="trailing" id="QYO-Gu-Mbi"/> |
| | | <constraint firstAttribute="trailing" secondItem="93x-qG-6UH" secondAttribute="trailing" id="Qdi-8x-BcK"/> |
| | | <constraint firstItem="pHn-vF-wj0" firstAttribute="leading" secondItem="6sR-XB-fI3" secondAttribute="leading" constant="13" id="TZn-9j-w9e"/> |
| | | <constraint firstItem="3h0-Kf-CZk" firstAttribute="leading" secondItem="6sR-XB-fI3" secondAttribute="leading" constant="14" id="WIw-2s-G5i"/> |
| | | <constraint firstAttribute="trailing" secondItem="3h0-Kf-CZk" secondAttribute="trailing" constant="14" id="aRN-iN-Afk"/> |
| | | <constraint firstItem="pHn-vF-wj0" firstAttribute="top" secondItem="3U1-AP-dtr" secondAttribute="bottom" constant="14" id="bIR-th-ham"/> |
| | | <constraint firstAttribute="bottom" secondItem="pHn-vF-wj0" secondAttribute="bottom" id="efP-SH-Wv5"/> |
| | | <constraint firstItem="3h0-Kf-CZk" firstAttribute="top" secondItem="93x-qG-6UH" secondAttribute="bottom" constant="14" id="gqo-Nj-USU"/> |
| | | <constraint firstAttribute="trailing" secondItem="3U1-AP-dtr" secondAttribute="trailing" constant="14" id="pqf-nY-mT8"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HLJ-GQ-sM2"> |
| | | <rect key="frame" x="0.0" y="662.33333333333337" width="393" height="148.33333333333337"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cmG-Np-j1p"> |
| | | <rect key="frame" x="13" y="0.0" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="zcc-ca-2tr"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="比赛详情" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0hQ-02-Ba6"> |
| | | <rect key="frame" x="14" y="14.999999999999998" width="365" height="19.333333333333329"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sHP-li-Ukm"> |
| | | <rect key="frame" x="0.0" y="48.333333333333258" width="393" height="100"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="100" id="mZW-Bo-YeJ"/> |
| | | </constraints> |
| | | <wkWebViewConfiguration key="configuration"> |
| | | <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/> |
| | | <wkPreferences key="preferences"/> |
| | | </wkWebViewConfiguration> |
| | | </wkWebView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="sHP-li-Ukm" firstAttribute="leading" secondItem="HLJ-GQ-sM2" secondAttribute="leading" id="NP9-E3-adF"/> |
| | | <constraint firstAttribute="trailing" secondItem="cmG-Np-j1p" secondAttribute="trailing" id="PKa-hJ-Tvj"/> |
| | | <constraint firstItem="cmG-Np-j1p" firstAttribute="leading" secondItem="HLJ-GQ-sM2" secondAttribute="leading" constant="13" id="R0h-LZ-Wum"/> |
| | | <constraint firstItem="0hQ-02-Ba6" firstAttribute="leading" secondItem="HLJ-GQ-sM2" secondAttribute="leading" constant="14" id="Tfx-1N-b7s"/> |
| | | <constraint firstAttribute="trailing" secondItem="sHP-li-Ukm" secondAttribute="trailing" id="alu-UO-2js"/> |
| | | <constraint firstItem="cmG-Np-j1p" firstAttribute="top" secondItem="HLJ-GQ-sM2" secondAttribute="top" id="cZk-Yk-zCZ"/> |
| | | <constraint firstAttribute="trailing" secondItem="0hQ-02-Ba6" secondAttribute="trailing" constant="14" id="ehn-KB-W8V"/> |
| | | <constraint firstItem="0hQ-02-Ba6" firstAttribute="top" secondItem="cmG-Np-j1p" secondAttribute="bottom" constant="14" id="gpM-hK-uuj"/> |
| | | <constraint firstAttribute="bottom" secondItem="sHP-li-Ukm" secondAttribute="bottom" id="jSI-jZ-Im8"/> |
| | | <constraint firstItem="sHP-li-Ukm" firstAttribute="top" secondItem="0hQ-02-Ba6" secondAttribute="bottom" constant="14" id="xEp-nI-V8i"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="bottom" secondItem="m0C-wO-vqk" secondAttribute="bottom" id="0h1-9j-quY"/> |
| | | <constraint firstAttribute="trailing" secondItem="m0C-wO-vqk" secondAttribute="trailing" id="9wG-5o-VRI"/> |
| | | <constraint firstItem="rEE-UF-kCK" firstAttribute="leading" secondItem="Znd-Yy-pV8" secondAttribute="leading" id="HjA-Nr-17H"/> |
| | | <constraint firstItem="m0C-wO-vqk" firstAttribute="top" secondItem="rEE-UF-kCK" secondAttribute="bottom" id="Jhx-I4-0yd"/> |
| | | <constraint firstItem="rEE-UF-kCK" firstAttribute="top" secondItem="Znd-Yy-pV8" secondAttribute="top" id="VYk-Tk-U4I"/> |
| | | <constraint firstAttribute="trailing" secondItem="rEE-UF-kCK" secondAttribute="trailing" id="maR-QO-qul"/> |
| | | <constraint firstItem="m0C-wO-vqk" firstAttribute="leading" secondItem="Znd-Yy-pV8" secondAttribute="leading" id="wPL-Df-Os2"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | <constraints> |
| | | <constraint firstAttribute="trailing" secondItem="Znd-Yy-pV8" secondAttribute="trailing" id="0vM-QA-49E"/> |
| | | <constraint firstItem="Znd-Yy-pV8" firstAttribute="top" secondItem="kfP-hX-Uro" secondAttribute="top" id="EoB-bs-msH"/> |
| | | <constraint firstItem="Znd-Yy-pV8" firstAttribute="centerX" secondItem="kfP-hX-Uro" secondAttribute="centerX" id="OoK-gu-2uj"/> |
| | | <constraint firstAttribute="bottom" secondItem="Znd-Yy-pV8" secondAttribute="bottom" constant="15" id="SFd-ZW-Ldd"/> |
| | | <constraint firstItem="Znd-Yy-pV8" firstAttribute="leading" secondItem="kfP-hX-Uro" secondAttribute="leading" id="qu4-aN-Td0"/> |
| | | </constraints> |
| | | </scrollView> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3aZ-G8-j6f"> |
| | | <rect key="frame" x="0.0" y="770" width="393" height="48"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="48" id="bgE-qi-Sge"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="立即报名"/> |
| | | <connections> |
| | | <action selector="applyAction:" destination="-1" eventType="touchUpInside" id="MHR-Rd-39v"/> |
| | | </connections> |
| | | </button> |
| | | </subviews> |
| | | <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="3aZ-G8-j6f" firstAttribute="top" secondItem="kfP-hX-Uro" secondAttribute="bottom" id="09m-Ky-PEu"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="3aZ-G8-j6f" secondAttribute="trailing" id="H0i-X0-H1k"/> |
| | | <constraint firstItem="3aZ-G8-j6f" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="JPi-eJ-Hb0"/> |
| | | <constraint firstAttribute="bottomMargin" secondItem="3aZ-G8-j6f" secondAttribute="bottom" id="Vga-S6-QzE"/> |
| | | <constraint firstAttribute="trailing" secondItem="kfP-hX-Uro" secondAttribute="trailing" id="g4e-aB-p8c"/> |
| | | <constraint firstItem="kfP-hX-Uro" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="hL8-l4-BZV"/> |
| | | <constraint firstItem="kfP-hX-Uro" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="jUG-Xr-tHn"/> |
| | | </constraints> |
| | | <point key="canvasLocation" x="83" y="21"/> |
| | | </view> |
| | | </objects> |
| | | <resources> |
| | | <image name="icon_hot_1" width="24" height="28"/> |
| | | <namedColor name="FE6E0D"> |
| | | <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
New file |
| | |
| | | // |
| | | // WorldCupContentDetailVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/28. |
| | | // |
| | | |
| | | import UIKit |
| | | import QMUIKit |
| | | |
| | | class WorldCupContentDetailVC: BaseVC { |
| | | |
| | | @IBOutlet weak var view_banner: UIView! |
| | | @IBOutlet weak var label_storeNames: UILabel! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_joinCondition: UILabel! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_duetime: UILabel! |
| | | @IBOutlet weak var label_starttime: UILabel! |
| | | @IBOutlet weak var label_endtime: UILabel! |
| | | @IBOutlet weak var label_ageScope: UILabel! |
| | | @IBOutlet weak var label_city: UILabel! |
| | | @IBOutlet weak var label_money: UILabel! |
| | | @IBOutlet weak var label_coin: UILabel! |
| | | @IBOutlet weak var label_courseNum: UILabel! |
| | | @IBOutlet weak var label_introducion: UILabel! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | @IBOutlet weak var tableView: UITableView! |
| | | @IBOutlet weak var btn_addStudent: QMUIButton! |
| | | @IBOutlet weak var cons_tableHei: NSLayoutConstraint! |
| | | @IBOutlet weak var label_matchStore: UILabel! |
| | | @IBOutlet weak var btn_moreMatchStore: UIButton! |
| | | |
| | | @IBOutlet weak var view_money: UIView! |
| | | @IBOutlet weak var view_coin: UIView! |
| | | @IBOutlet weak var view_courseNum: UIView! |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "社区世界杯" |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.isScrollEnabled = false |
| | | tableView.register(UINib(nibName: "StudentInfo_4_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_4_TCell") |
| | | } |
| | | |
| | | override func setRx() { |
| | | tableView.rx.observe(CGSize.self, "contentSize") |
| | | .subscribe(onNext: { [weak self] size in |
| | | self?.cons_tableHei.constant = size?.height ?? 0 |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | | extension WorldCupContentDetailVC:UITableViewDelegate{ |
| | | |
| | | } |
| | | |
| | | extension WorldCupContentDetailVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return 3 |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentInfo_4_TCell", for: indexPath) as! StudentInfo_4_TCell |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
| | | 90 |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WorldCupContentDetailVC" customModule="WanPai" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="cons_tableHei" destination="HCn-5Z-SAr" id="JPW-ED-7vP"/> |
| | | <outlet property="tableView" destination="pGy-ry-sPB" id="9SG-OL-UF5"/> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | </connections> |
| | | </placeholder> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dMb-17-MtC"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="770"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5Sd-Ru-eG3"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="1146"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MmS-Eb-s2q"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="220"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" secondItem="MmS-Eb-s2q" secondAttribute="height" multiplier="1:0.56" id="Uua-36-7ac"/> |
| | | </constraints> |
| | | </view> |
| | | <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="UWR-Fw-RqI"> |
| | | <rect key="frame" x="0.0" y="220" width="393" height="926"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gQ1-8e-LnV"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="52"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" horizontalCompressionResistancePriority="250" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MRZ-gv-FLH"> |
| | | <rect key="frame" x="13.999999999999998" y="14" width="16.333333333333329" height="28"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="25" id="qJh-JF-Gau"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VM4-dH-lDE"> |
| | | <rect key="frame" x="14" y="51" width="379" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="G37-OT-GLp"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6bS-Ki-Z92"> |
| | | <rect key="frame" x="367.33333333333331" y="15.333333333333345" width="11.666666666666686" height="21.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/> |
| | | <color key="textColor" name="FE6E0D"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_hot_1" translatesAutoresizingMaskIntoConstraints="NO" id="FHf-rj-AQj"> |
| | | <rect key="frame" x="344.33333333333331" y="13" width="19" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="18.859999999999999" id="8lo-1Q-APK"/> |
| | | <constraint firstAttribute="height" constant="22" id="fIP-ka-7NJ"/> |
| | | </constraints> |
| | | </imageView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="6bS-Ki-Z92" firstAttribute="leading" secondItem="FHf-rj-AQj" secondAttribute="trailing" constant="4" id="3V7-bQ-7Rt"/> |
| | | <constraint firstItem="MRZ-gv-FLH" firstAttribute="leading" secondItem="gQ1-8e-LnV" secondAttribute="leading" constant="14" id="AhD-bu-gDk"/> |
| | | <constraint firstAttribute="bottom" secondItem="VM4-dH-lDE" secondAttribute="bottom" id="L8G-im-Ndi"/> |
| | | <constraint firstItem="VM4-dH-lDE" firstAttribute="leading" secondItem="gQ1-8e-LnV" secondAttribute="leading" constant="14" id="Nvl-K7-sNe"/> |
| | | <constraint firstAttribute="trailing" secondItem="VM4-dH-lDE" secondAttribute="trailing" id="RkW-Ob-5Ek"/> |
| | | <constraint firstItem="FHf-rj-AQj" firstAttribute="centerY" secondItem="gQ1-8e-LnV" secondAttribute="centerY" constant="-2" id="WOx-Qk-TRd"/> |
| | | <constraint firstItem="VM4-dH-lDE" firstAttribute="top" secondItem="MRZ-gv-FLH" secondAttribute="bottom" constant="9" id="bVj-qA-Wgl"/> |
| | | <constraint firstItem="6bS-Ki-Z92" firstAttribute="centerY" secondItem="gQ1-8e-LnV" secondAttribute="centerY" id="h2O-aV-f9n"/> |
| | | <constraint firstItem="MRZ-gv-FLH" firstAttribute="top" secondItem="gQ1-8e-LnV" secondAttribute="top" constant="14" id="mOe-Vs-qzq"/> |
| | | <constraint firstAttribute="trailing" secondItem="6bS-Ki-Z92" secondAttribute="trailing" constant="14" id="sy1-vy-l4j"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="u0r-q1-kZh"> |
| | | <rect key="frame" x="0.0" y="52" width="393" height="380.33333333333331"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2FA-uo-Nor"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="60"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XW1-gp-FKT"> |
| | | <rect key="frame" x="14" y="18" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="1sT-Q5-Zcg"/> |
| | | <constraint firstAttribute="width" constant="4" id="R9R-Kb-Egu"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="截止报名时间" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kFb-aM-ZDj"> |
| | | <rect key="frame" x="22" y="13" width="73.666666666666671" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CaN-wO-hwU"> |
| | | <rect key="frame" x="22" y="35.333333333333314" width="11.666666666666664" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="CaN-wO-hwU" firstAttribute="top" secondItem="kFb-aM-ZDj" secondAttribute="bottom" constant="8" id="7Wo-AX-CAm"/> |
| | | <constraint firstItem="CaN-wO-hwU" firstAttribute="leading" secondItem="kFb-aM-ZDj" secondAttribute="leading" id="DDe-vP-7SR"/> |
| | | <constraint firstAttribute="height" constant="60" id="Ky6-PL-aRr"/> |
| | | <constraint firstItem="XW1-gp-FKT" firstAttribute="leading" secondItem="2FA-uo-Nor" secondAttribute="leading" constant="14" id="OWw-1W-0l5"/> |
| | | <constraint firstItem="kFb-aM-ZDj" firstAttribute="centerY" secondItem="XW1-gp-FKT" secondAttribute="centerY" id="Ykg-vC-RR5"/> |
| | | <constraint firstItem="kFb-aM-ZDj" firstAttribute="leading" secondItem="XW1-gp-FKT" secondAttribute="trailing" constant="4" id="biR-Vu-J9X"/> |
| | | <constraint firstItem="XW1-gp-FKT" firstAttribute="top" secondItem="2FA-uo-Nor" secondAttribute="top" constant="18" id="d1Q-oz-28Q"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wyH-QP-bCP"> |
| | | <rect key="frame" x="0.0" y="60" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HWI-ur-6Oe"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="5b3-y9-UJ9"/> |
| | | <constraint firstAttribute="width" constant="4" id="QyR-hD-dqB"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="开始时间" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6tP-Qt-kfo"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e4r-bY-CuA"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="HWI-ur-6Oe" firstAttribute="top" secondItem="wyH-QP-bCP" secondAttribute="top" constant="11" id="ASo-lk-t3p"/> |
| | | <constraint firstItem="e4r-bY-CuA" firstAttribute="leading" secondItem="6tP-Qt-kfo" secondAttribute="leading" id="HaE-ZD-xZf"/> |
| | | <constraint firstItem="HWI-ur-6Oe" firstAttribute="leading" secondItem="wyH-QP-bCP" secondAttribute="leading" constant="14" id="JDo-zI-Q4o"/> |
| | | <constraint firstItem="6tP-Qt-kfo" firstAttribute="leading" secondItem="HWI-ur-6Oe" secondAttribute="trailing" constant="4" id="JlT-XO-q1B"/> |
| | | <constraint firstItem="6tP-Qt-kfo" firstAttribute="centerY" secondItem="HWI-ur-6Oe" secondAttribute="centerY" id="dWB-7C-CUw"/> |
| | | <constraint firstAttribute="height" constant="46" id="nKz-GB-Fel"/> |
| | | <constraint firstItem="e4r-bY-CuA" firstAttribute="top" secondItem="6tP-Qt-kfo" secondAttribute="bottom" constant="8" id="rRY-df-Zwg"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GN4-c0-HZY"> |
| | | <rect key="frame" x="0.0" y="106" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0wd-uf-lOX"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="Uvb-RX-CXH"/> |
| | | <constraint firstAttribute="height" constant="4" id="ojJ-fJ-yXe"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="结束时间" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="02t-hJ-Adj"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kKl-kq-lzY"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="0wd-uf-lOX" firstAttribute="top" secondItem="GN4-c0-HZY" secondAttribute="top" constant="11" id="0Lc-xF-XhQ"/> |
| | | <constraint firstItem="02t-hJ-Adj" firstAttribute="leading" secondItem="0wd-uf-lOX" secondAttribute="trailing" constant="4" id="4wV-MS-SaO"/> |
| | | <constraint firstAttribute="height" constant="46" id="DUS-Id-ONd"/> |
| | | <constraint firstItem="02t-hJ-Adj" firstAttribute="centerY" secondItem="0wd-uf-lOX" secondAttribute="centerY" id="NNg-3s-UIB"/> |
| | | <constraint firstItem="kKl-kq-lzY" firstAttribute="leading" secondItem="02t-hJ-Adj" secondAttribute="leading" id="Wd3-6Y-Iso"/> |
| | | <constraint firstItem="kKl-kq-lzY" firstAttribute="top" secondItem="02t-hJ-Adj" secondAttribute="bottom" constant="8" id="hdY-n2-ko2"/> |
| | | <constraint firstItem="0wd-uf-lOX" firstAttribute="leading" secondItem="GN4-c0-HZY" secondAttribute="leading" constant="14" id="i5L-tQ-7Wc"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3W8-TM-GwM"> |
| | | <rect key="frame" x="0.0" y="152" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6El-Xn-LDS"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="YPs-Ce-ADk"/> |
| | | <constraint firstAttribute="width" constant="4" id="v3A-g8-rgb"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="报名年龄" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UJt-79-ees"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ail-JE-JUS"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="UJt-79-ees" firstAttribute="centerY" secondItem="6El-Xn-LDS" secondAttribute="centerY" id="0da-pu-im9"/> |
| | | <constraint firstItem="ail-JE-JUS" firstAttribute="leading" secondItem="UJt-79-ees" secondAttribute="leading" id="BAV-ya-hdV"/> |
| | | <constraint firstAttribute="height" constant="46" id="JuA-Bu-Luy"/> |
| | | <constraint firstItem="6El-Xn-LDS" firstAttribute="leading" secondItem="3W8-TM-GwM" secondAttribute="leading" constant="14" id="MIv-5I-FIb"/> |
| | | <constraint firstItem="6El-Xn-LDS" firstAttribute="top" secondItem="3W8-TM-GwM" secondAttribute="top" constant="11" id="a7h-al-faf"/> |
| | | <constraint firstItem="ail-JE-JUS" firstAttribute="top" secondItem="UJt-79-ees" secondAttribute="bottom" constant="8" id="jj5-Qr-VLV"/> |
| | | <constraint firstItem="UJt-79-ees" firstAttribute="leading" secondItem="6El-Xn-LDS" secondAttribute="trailing" constant="4" id="kab-w5-5qY"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JVx-OZ-c4g"> |
| | | <rect key="frame" x="0.0" y="198" width="393" height="46"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yoY-8o-PfM"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="4dv-8e-VPI"/> |
| | | <constraint firstAttribute="height" constant="4" id="TNR-ks-jad"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参赛者性别" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yS5-T7-dRQ"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="61.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="w0h-nq-IIZ"> |
| | | <rect key="frame" x="22" y="28.333333333333311" width="11.666666666666664" height="14.333333333333332"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="yS5-T7-dRQ" firstAttribute="leading" secondItem="yoY-8o-PfM" secondAttribute="trailing" constant="4" id="AsE-Wi-qf0"/> |
| | | <constraint firstItem="yoY-8o-PfM" firstAttribute="top" secondItem="JVx-OZ-c4g" secondAttribute="top" constant="11" id="CmX-Vh-sAC"/> |
| | | <constraint firstItem="yS5-T7-dRQ" firstAttribute="centerY" secondItem="yoY-8o-PfM" secondAttribute="centerY" id="DzG-1B-0eX"/> |
| | | <constraint firstItem="w0h-nq-IIZ" firstAttribute="leading" secondItem="yS5-T7-dRQ" secondAttribute="leading" id="EYV-oU-HYq"/> |
| | | <constraint firstItem="w0h-nq-IIZ" firstAttribute="top" secondItem="yS5-T7-dRQ" secondAttribute="bottom" constant="8" id="I0r-tr-XtM"/> |
| | | <constraint firstItem="yoY-8o-PfM" firstAttribute="leading" secondItem="JVx-OZ-c4g" secondAttribute="leading" constant="14" id="MHE-VQ-mBF"/> |
| | | <constraint firstAttribute="height" constant="46" id="sYF-yK-cqj"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="C0Z-aa-XZZ"> |
| | | <rect key="frame" x="0.0" y="244.00000000000003" width="393" height="60.333333333333343"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Yfp-ha-gfv"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="4" id="eQ9-kP-IOL"/> |
| | | <constraint firstAttribute="height" constant="4" id="swk-hU-Wmq"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参赛地址" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dOO-Nr-ubq"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kYd-z9-PGb"> |
| | | <rect key="frame" x="22" y="28.333333333333371" width="335.33333333333331" height="28.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HZN-5V-0mC"> |
| | | <rect key="frame" x="367.33333333333331" y="35.666666666666629" width="11.666666666666686" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="HZN-5V-0mC" firstAttribute="centerY" secondItem="kYd-z9-PGb" secondAttribute="centerY" id="0ef-9B-rXF"/> |
| | | <constraint firstItem="Yfp-ha-gfv" firstAttribute="top" secondItem="C0Z-aa-XZZ" secondAttribute="top" constant="11" id="1wj-JC-RjW"/> |
| | | <constraint firstAttribute="bottom" secondItem="kYd-z9-PGb" secondAttribute="bottom" constant="3.3300000000000001" id="7sI-fT-kk3"/> |
| | | <constraint firstItem="HZN-5V-0mC" firstAttribute="leading" secondItem="kYd-z9-PGb" secondAttribute="trailing" constant="10" id="8NH-3X-n8g"/> |
| | | <constraint firstItem="kYd-z9-PGb" firstAttribute="leading" secondItem="dOO-Nr-ubq" secondAttribute="leading" id="AN6-hy-q2k"/> |
| | | <constraint firstAttribute="trailing" secondItem="HZN-5V-0mC" secondAttribute="trailing" constant="14" id="G3S-xd-jf9"/> |
| | | <constraint firstItem="dOO-Nr-ubq" firstAttribute="centerY" secondItem="Yfp-ha-gfv" secondAttribute="centerY" id="LY9-Zx-ePp"/> |
| | | <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="46" id="MA1-Tu-mQM"/> |
| | | <constraint firstItem="Yfp-ha-gfv" firstAttribute="leading" secondItem="C0Z-aa-XZZ" secondAttribute="leading" constant="14" id="UQd-cq-n47"/> |
| | | <constraint firstItem="kYd-z9-PGb" firstAttribute="top" secondItem="dOO-Nr-ubq" secondAttribute="bottom" constant="8" id="avG-3g-D35"/> |
| | | <constraint firstItem="dOO-Nr-ubq" firstAttribute="leading" secondItem="Yfp-ha-gfv" secondAttribute="trailing" constant="4" id="mNq-rD-GiR"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QbC-92-fCR"> |
| | | <rect key="frame" x="0.0" y="304.33333333333337" width="393" height="76"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="68X-0l-htM"> |
| | | <rect key="frame" x="14" y="11" width="4" height="4"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="4" id="H0U-Ky-7K8"/> |
| | | <constraint firstAttribute="width" constant="4" id="hpx-Ik-1Hc"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="2"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参赛赛点" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ewe-lt-VjJ"> |
| | | <rect key="frame" x="22.000000000000004" y="6.0000000000000009" width="49.333333333333343" height="14.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VXV-P0-QQ6"> |
| | | <rect key="frame" x="22" y="28.333333333333258" width="285" height="28.666666666666671"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tjO-5y-Kg9"> |
| | | <rect key="frame" x="329" y="29" width="50" height="27"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="50" id="Igw-9w-2MO"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="查看更多"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | </button> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="tjO-5y-Kg9" firstAttribute="centerY" secondItem="VXV-P0-QQ6" secondAttribute="centerY" id="1nv-pY-JCE"/> |
| | | <constraint firstItem="68X-0l-htM" firstAttribute="leading" secondItem="QbC-92-fCR" secondAttribute="leading" constant="14" id="7VE-4h-AyN"/> |
| | | <constraint firstAttribute="trailing" secondItem="tjO-5y-Kg9" secondAttribute="trailing" constant="14" id="8dk-br-IK6"/> |
| | | <constraint firstItem="VXV-P0-QQ6" firstAttribute="top" secondItem="ewe-lt-VjJ" secondAttribute="bottom" constant="8" id="GID-nl-24P"/> |
| | | <constraint firstItem="ewe-lt-VjJ" firstAttribute="leading" secondItem="68X-0l-htM" secondAttribute="trailing" constant="4" id="KWg-lM-hts"/> |
| | | <constraint firstItem="68X-0l-htM" firstAttribute="top" secondItem="QbC-92-fCR" secondAttribute="top" constant="11" id="bce-uj-ky2"/> |
| | | <constraint firstAttribute="bottom" secondItem="VXV-P0-QQ6" secondAttribute="bottom" constant="19" id="kVT-GP-Ltl"/> |
| | | <constraint firstItem="tjO-5y-Kg9" firstAttribute="leading" secondItem="VXV-P0-QQ6" secondAttribute="trailing" constant="22" id="n5f-8o-flc"/> |
| | | <constraint firstItem="ewe-lt-VjJ" firstAttribute="centerY" secondItem="68X-0l-htM" secondAttribute="centerY" id="sgV-w6-RNZ"/> |
| | | <constraint firstItem="VXV-P0-QQ6" firstAttribute="leading" secondItem="ewe-lt-VjJ" secondAttribute="leading" id="uKl-Cs-5ug"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kjG-RO-Dqg"> |
| | | <rect key="frame" x="0.0" y="432.33333333333337" width="393" height="149.33333333333337"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sW6-bF-cec"> |
| | | <rect key="frame" x="13" y="0.0" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="rrd-75-6ar"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="赛事人员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9Wh-tH-pf6"> |
| | | <rect key="frame" x="14" y="15" width="65.333333333333329" height="29"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="pGy-ry-sPB"> |
| | | <rect key="frame" x="0.0" y="49.333333333333258" width="393" height="100"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="100" id="HCn-5Z-SAr"/> |
| | | </constraints> |
| | | </tableView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="sW6-bF-cec" firstAttribute="leading" secondItem="kjG-RO-Dqg" secondAttribute="leading" constant="13" id="2EK-1f-hz4"/> |
| | | <constraint firstAttribute="trailing" secondItem="sW6-bF-cec" secondAttribute="trailing" id="2W8-Iz-aRf"/> |
| | | <constraint firstItem="sW6-bF-cec" firstAttribute="top" secondItem="kjG-RO-Dqg" secondAttribute="top" id="6nC-rk-1TU"/> |
| | | <constraint firstItem="pGy-ry-sPB" firstAttribute="leading" secondItem="kjG-RO-Dqg" secondAttribute="leading" id="9Lz-s1-4SA"/> |
| | | <constraint firstItem="pGy-ry-sPB" firstAttribute="top" secondItem="9Wh-tH-pf6" secondAttribute="bottom" constant="5.5" id="W9a-Dw-pad"/> |
| | | <constraint firstAttribute="trailing" secondItem="pGy-ry-sPB" secondAttribute="trailing" id="YYd-52-Hok"/> |
| | | <constraint firstAttribute="bottom" secondItem="pGy-ry-sPB" secondAttribute="bottom" id="e1Q-Nj-Q0p"/> |
| | | <constraint firstItem="9Wh-tH-pf6" firstAttribute="top" secondItem="sW6-bF-cec" secondAttribute="bottom" constant="14" id="eSP-cc-xXY"/> |
| | | <constraint firstItem="9Wh-tH-pf6" firstAttribute="leading" secondItem="kjG-RO-Dqg" secondAttribute="leading" constant="14" id="u1l-yd-sap"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Cs0-3x-jKV"> |
| | | <rect key="frame" x="0.0" y="581.66666666666663" width="393" height="81"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gq1-2k-6ZR"> |
| | | <rect key="frame" x="13" y="0.0" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="PWF-6O-8C0"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3Ew-TQ-Qh5"> |
| | | <rect key="frame" x="13" y="80" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="tHp-Iy-iL5"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="比赛费用" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uyq-Ch-P6f"> |
| | | <rect key="frame" x="14" y="15" width="365" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="22" id="orR-tj-1vJ"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥0/人" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YLf-xG-ZrU"> |
| | | <rect key="frame" x="14.000000000000004" y="49" width="38.333333333333343" height="20"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20" id="usn-Zs-2X2"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="合计:¥0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="328-hS-eFC"> |
| | | <rect key="frame" x="318" y="49" width="61" height="20"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20" id="4yh-8X-2uh"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="YLf-xG-ZrU" firstAttribute="leading" secondItem="Cs0-3x-jKV" secondAttribute="leading" constant="14" id="0io-kx-50g"/> |
| | | <constraint firstAttribute="trailing" secondItem="3Ew-TQ-Qh5" secondAttribute="trailing" id="2sp-To-te6"/> |
| | | <constraint firstAttribute="trailing" secondItem="gq1-2k-6ZR" secondAttribute="trailing" id="4jm-jd-AB0"/> |
| | | <constraint firstItem="gq1-2k-6ZR" firstAttribute="top" secondItem="Cs0-3x-jKV" secondAttribute="top" id="C79-K7-RL9"/> |
| | | <constraint firstItem="uyq-Ch-P6f" firstAttribute="leading" secondItem="Cs0-3x-jKV" secondAttribute="leading" constant="14" id="FhG-eo-4mV"/> |
| | | <constraint firstItem="3Ew-TQ-Qh5" firstAttribute="leading" secondItem="Cs0-3x-jKV" secondAttribute="leading" constant="13" id="HrZ-My-kfa"/> |
| | | <constraint firstItem="328-hS-eFC" firstAttribute="centerY" secondItem="YLf-xG-ZrU" secondAttribute="centerY" id="Nx3-Gu-PlC"/> |
| | | <constraint firstItem="YLf-xG-ZrU" firstAttribute="top" secondItem="uyq-Ch-P6f" secondAttribute="bottom" constant="12" id="TzO-ef-cQP"/> |
| | | <constraint firstItem="3Ew-TQ-Qh5" firstAttribute="top" secondItem="YLf-xG-ZrU" secondAttribute="bottom" constant="11" id="Z4C-Eo-mnQ"/> |
| | | <constraint firstAttribute="bottom" secondItem="3Ew-TQ-Qh5" secondAttribute="bottom" id="alq-Ep-aFd"/> |
| | | <constraint firstItem="gq1-2k-6ZR" firstAttribute="leading" secondItem="Cs0-3x-jKV" secondAttribute="leading" constant="13" id="bmh-OH-V1w"/> |
| | | <constraint firstItem="uyq-Ch-P6f" firstAttribute="top" secondItem="gq1-2k-6ZR" secondAttribute="bottom" constant="14" id="hgN-hC-SaV"/> |
| | | <constraint firstAttribute="trailing" secondItem="uyq-Ch-P6f" secondAttribute="trailing" constant="14" id="q9Q-Ta-MTP"/> |
| | | <constraint firstAttribute="trailing" secondItem="328-hS-eFC" secondAttribute="trailing" constant="14" id="vFE-4F-1Ts"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7Zc-x8-X9P"> |
| | | <rect key="frame" x="0.0" y="662.66666666666663" width="393" height="115"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="r3X-Bd-AMv"> |
| | | <rect key="frame" x="13" y="0.0" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="JhG-hm-Te3"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QkL-SA-SZn"> |
| | | <rect key="frame" x="13" y="114" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="gUd-nL-ZvK"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="比赛简介" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NMK-fZ-WJU"> |
| | | <rect key="frame" x="14" y="15" width="365" height="61"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eyp-c1-yxU"> |
| | | <rect key="frame" x="14" y="83" width="365" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.23921568630000001" green="0.24313725489999999" blue="0.27058823529999998" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="eyp-c1-yxU" firstAttribute="leading" secondItem="7Zc-x8-X9P" secondAttribute="leading" constant="14" id="77U-gD-NR0"/> |
| | | <constraint firstItem="r3X-Bd-AMv" firstAttribute="leading" secondItem="7Zc-x8-X9P" secondAttribute="leading" constant="13" id="CWu-Dp-sW3"/> |
| | | <constraint firstItem="NMK-fZ-WJU" firstAttribute="leading" secondItem="7Zc-x8-X9P" secondAttribute="leading" constant="14" id="GkS-3E-vgQ"/> |
| | | <constraint firstItem="QkL-SA-SZn" firstAttribute="leading" secondItem="7Zc-x8-X9P" secondAttribute="leading" constant="13" id="IGQ-1u-Irt"/> |
| | | <constraint firstItem="QkL-SA-SZn" firstAttribute="top" secondItem="eyp-c1-yxU" secondAttribute="bottom" constant="14" id="LUw-Gb-nkp"/> |
| | | <constraint firstAttribute="trailing" secondItem="r3X-Bd-AMv" secondAttribute="trailing" id="Uhc-EI-mRz"/> |
| | | <constraint firstItem="eyp-c1-yxU" firstAttribute="top" secondItem="NMK-fZ-WJU" secondAttribute="bottom" constant="7" id="ZWJ-Ff-b2F"/> |
| | | <constraint firstAttribute="bottom" secondItem="QkL-SA-SZn" secondAttribute="bottom" id="eTq-zf-Ffk"/> |
| | | <constraint firstAttribute="trailing" secondItem="eyp-c1-yxU" secondAttribute="trailing" constant="14" id="gPa-IG-UvI"/> |
| | | <constraint firstAttribute="trailing" secondItem="QkL-SA-SZn" secondAttribute="trailing" id="hFC-gZ-wxp"/> |
| | | <constraint firstItem="r3X-Bd-AMv" firstAttribute="top" secondItem="7Zc-x8-X9P" secondAttribute="top" id="hic-4e-3an"/> |
| | | <constraint firstAttribute="trailing" secondItem="NMK-fZ-WJU" secondAttribute="trailing" constant="14" id="ixf-l8-82F"/> |
| | | <constraint firstItem="NMK-fZ-WJU" firstAttribute="top" secondItem="r3X-Bd-AMv" secondAttribute="bottom" constant="14" id="umQ-uf-lkG"/> |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BbS-Jx-uUf"> |
| | | <rect key="frame" x="0.0" y="777.66666666666663" width="393" height="148.33333333333337"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="L6z-Cl-axB"> |
| | | <rect key="frame" x="13" y="0.0" width="380" height="1"/> |
| | | <color key="backgroundColor" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="1" id="nVF-Mh-2rb"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="比赛详情" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="N0y-Po-mL4"> |
| | | <rect key="frame" x="14" y="14.999999999999998" width="365" height="19.333333333333329"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Wel-DM-IRM"> |
| | | <rect key="frame" x="0.0" y="48.333333333333371" width="393" height="100"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="100" id="6az-y3-MSd"/> |
| | | </constraints> |
| | | <wkWebViewConfiguration key="configuration"> |
| | | <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/> |
| | | <wkPreferences key="preferences"/> |
| | | </wkWebViewConfiguration> |
| | | </wkWebView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="L6z-Cl-axB" firstAttribute="leading" secondItem="BbS-Jx-uUf" secondAttribute="leading" constant="13" id="1r4-HO-zao"/> |
| | | <constraint firstAttribute="trailing" secondItem="N0y-Po-mL4" secondAttribute="trailing" constant="14" id="41H-XR-Hq6"/> |
| | | <constraint firstAttribute="bottom" secondItem="Wel-DM-IRM" secondAttribute="bottom" id="Aqk-Yo-Nqk"/> |
| | | <constraint firstItem="N0y-Po-mL4" firstAttribute="top" secondItem="L6z-Cl-axB" secondAttribute="bottom" constant="14" id="G56-z8-oxg"/> |
| | | <constraint firstAttribute="trailing" secondItem="Wel-DM-IRM" secondAttribute="trailing" id="Iyf-hc-feX"/> |
| | | <constraint firstItem="Wel-DM-IRM" firstAttribute="leading" secondItem="BbS-Jx-uUf" secondAttribute="leading" id="Ufh-hB-jBH"/> |
| | | <constraint firstItem="N0y-Po-mL4" firstAttribute="leading" secondItem="BbS-Jx-uUf" secondAttribute="leading" constant="14" id="XeM-JC-Qnt"/> |
| | | <constraint firstItem="L6z-Cl-axB" firstAttribute="top" secondItem="BbS-Jx-uUf" secondAttribute="top" id="Ykz-S2-nRC"/> |
| | | <constraint firstAttribute="trailing" secondItem="L6z-Cl-axB" secondAttribute="trailing" id="sdq-0T-MFr"/> |
| | | <constraint firstItem="Wel-DM-IRM" firstAttribute="top" secondItem="N0y-Po-mL4" secondAttribute="bottom" constant="14" id="vP3-yF-j2f"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | </stackView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="UWR-Fw-RqI" firstAttribute="leading" secondItem="5Sd-Ru-eG3" secondAttribute="leading" id="232-dy-TDh"/> |
| | | <constraint firstAttribute="bottom" secondItem="UWR-Fw-RqI" secondAttribute="bottom" id="3ZH-p9-MV4"/> |
| | | <constraint firstItem="MmS-Eb-s2q" firstAttribute="top" secondItem="5Sd-Ru-eG3" secondAttribute="top" id="E2k-Bx-gRf"/> |
| | | <constraint firstItem="MmS-Eb-s2q" firstAttribute="leading" secondItem="5Sd-Ru-eG3" secondAttribute="leading" id="I1k-JB-7y0"/> |
| | | <constraint firstAttribute="trailing" secondItem="MmS-Eb-s2q" secondAttribute="trailing" id="NBV-WR-uMo"/> |
| | | <constraint firstAttribute="trailing" secondItem="UWR-Fw-RqI" secondAttribute="trailing" id="Th5-rV-cD5"/> |
| | | <constraint firstItem="UWR-Fw-RqI" firstAttribute="top" secondItem="MmS-Eb-s2q" secondAttribute="bottom" id="eCG-DI-Jot"/> |
| | | </constraints> |
| | | </view> |
| | | </subviews> |
| | | <constraints> |
| | | <constraint firstItem="5Sd-Ru-eG3" firstAttribute="centerX" secondItem="dMb-17-MtC" secondAttribute="centerX" id="6AD-vp-pCo"/> |
| | | <constraint firstItem="5Sd-Ru-eG3" firstAttribute="top" secondItem="dMb-17-MtC" secondAttribute="top" id="FY6-aA-8ZM"/> |
| | | <constraint firstAttribute="bottom" secondItem="5Sd-Ru-eG3" secondAttribute="bottom" constant="15" id="MD2-1M-jMy"/> |
| | | <constraint firstItem="5Sd-Ru-eG3" firstAttribute="leading" secondItem="dMb-17-MtC" secondAttribute="leading" id="WoT-0h-dLV"/> |
| | | <constraint firstAttribute="trailing" secondItem="5Sd-Ru-eG3" secondAttribute="trailing" id="t1u-0L-15U"/> |
| | | </constraints> |
| | | </scrollView> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Gkg-tn-WFH"> |
| | | <rect key="frame" x="0.0" y="770" width="393" height="48"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="48" id="y3u-8o-eMw"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="取消"/> |
| | | </button> |
| | | </subviews> |
| | | <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="Gkg-tn-WFH" secondAttribute="bottom" id="JBB-iZ-Ebd"/> |
| | | <constraint firstAttribute="trailing" secondItem="dMb-17-MtC" secondAttribute="trailing" id="LmP-AQ-wQK"/> |
| | | <constraint firstItem="Gkg-tn-WFH" firstAttribute="top" secondItem="dMb-17-MtC" secondAttribute="bottom" id="NDt-ki-gaj"/> |
| | | <constraint firstItem="dMb-17-MtC" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="NOY-xw-LY1"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Gkg-tn-WFH" secondAttribute="trailing" id="P8D-8M-TyS"/> |
| | | <constraint firstItem="Gkg-tn-WFH" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="QM5-nq-ctA"/> |
| | | <constraint firstItem="dMb-17-MtC" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="xWF-dl-cCp"/> |
| | | </constraints> |
| | | <point key="canvasLocation" x="136.64122137404578" y="20.422535211267608"/> |
| | | </view> |
| | | </objects> |
| | | <resources> |
| | | <image name="icon_hot_1" width="24" height="28"/> |
| | | <namedColor name="FE6E0D"> |
| | | <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
New file |
| | |
| | | // |
| | | // WorldCupContentVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/26. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class WorldCupContentVC: BaseVC { |
| | | private var tableView:UITableView! |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view.backgroundColor = .clear |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView = UITableView(frame: .zero, style: .plain) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.backgroundColor = .clear |
| | | tableView.register(UINib(nibName: "WorldCupTCell", bundle: nil), forCellReuseIdentifier: "_WorldCupTCell") |
| | | |
| | | view.addSubview(tableView) |
| | | tableView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | extension WorldCupContentVC:UITableViewDelegate,UITableViewDataSource{ |
| | | |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | let vc = WorldCupContentDetailVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return 20 |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_WorldCupTCell") as! WorldCupTCell |
| | | cell.backgroundColor = .clear |
| | | return cell |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | // |
| | | // WorldCupHeaderVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/26. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class WorldCupHeaderVC: BaseVC { |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | view.backgroundColor = .clear |
| | | } |
| | | |
| | | |
| | | /* |
| | | // MARK: - Navigation |
| | | |
| | | // In a storyboard-based application, you will often want to do a little preparation before navigation |
| | | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { |
| | | // Get the new view controller using segue.destination. |
| | | // Pass the selected object to the new view controller. |
| | | } |
| | | */ |
| | | |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WorldCupHeaderVC" customModule="WanPai" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | </connections> |
| | | </placeholder> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="418"/> |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="rC1-GG-uHG"> |
| | | <rect key="frame" x="24.000000000000007" y="24.000000000000007" width="87.666666666666686" height="87.666666666666686"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="87.5" id="acp-fA-EI4"/> |
| | | <constraint firstAttribute="width" constant="87.5" id="viK-40-g8b"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="43.75"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CLm-un-lHA"> |
| | | <rect key="frame" x="124.99999999999999" y="38.666666666666664" width="19.333333333333329" height="20.333333333333336"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="20.5" id="Qfh-Lz-vgN"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="22"/> |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3bk-Zw-hOl" customClass="QMUIButton"> |
| | | <rect key="frame" x="125" y="68" width="98" height="35"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="切换人员" image="btn_exchange"> |
| | | <color key="titleColor" red="0.30588235294117649" green="0.85882352941176465" blue="0.74117647058823533" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </state> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="spacingBetweenImageAndTitle"> |
| | | <real key="value" value="6"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </button> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="kqK-MA-Vfm"> |
| | | <rect key="frame" x="282" y="29.666666666666671" width="76" height="76"/> |
| | | <color key="backgroundColor" systemColor="systemGray4Color"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="76" id="dqa-c1-DHq"/> |
| | | <constraint firstAttribute="height" constant="76" id="meQ-qP-IB9"/> |
| | | </constraints> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="您的2024年场次排名" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dho-Mk-UEo"> |
| | | <rect key="frame" x="0.0" y="142.66666666666666" width="393" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9RA-9C-jhI"> |
| | | <rect key="frame" x="31" y="174.33333333333334" width="331" height="52"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5bi-q0-cyM"> |
| | | <rect key="frame" x="165" y="9" width="1" height="36"/> |
| | | <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="1" id="Ezc-Uz-pmu"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="成都排名 0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qXP-LB-xCU"> |
| | | <rect key="frame" x="186.66666666666666" y="21" width="69.666666666666657" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="全国排名 0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="06M-Qw-l20"> |
| | | <rect key="frame" x="15" y="21" width="69.666666666666671" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="bottom" secondItem="06M-Qw-l20" secondAttribute="bottom" constant="14" id="2ja-cx-dYR"/> |
| | | <constraint firstItem="qXP-LB-xCU" firstAttribute="leading" secondItem="5bi-q0-cyM" secondAttribute="trailing" constant="20.5" id="74s-Mt-1uu"/> |
| | | <constraint firstItem="06M-Qw-l20" firstAttribute="leading" secondItem="9RA-9C-jhI" secondAttribute="leading" constant="15" id="HeM-ZB-EQV"/> |
| | | <constraint firstItem="5bi-q0-cyM" firstAttribute="centerX" secondItem="9RA-9C-jhI" secondAttribute="centerX" id="Jb3-h8-BVT"/> |
| | | <constraint firstAttribute="bottom" secondItem="qXP-LB-xCU" secondAttribute="bottom" constant="14" id="nsi-Vw-kg3"/> |
| | | <constraint firstItem="5bi-q0-cyM" firstAttribute="top" secondItem="9RA-9C-jhI" secondAttribute="top" constant="9" id="tIz-Dv-NHL"/> |
| | | <constraint firstAttribute="height" constant="52" id="tq2-g3-PeI"/> |
| | | <constraint firstAttribute="bottom" secondItem="5bi-q0-cyM" secondAttribute="bottom" constant="7" id="vjM-zM-z8S"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="26"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="负场次" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Peq-DE-vPX"> |
| | | <rect key="frame" x="131" y="250.33333333333337" width="131" height="14"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="14" id="vHE-xd-QBS"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="胜率" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7Tv-DA-R5E"> |
| | | <rect key="frame" x="262" y="250.33333333333337" width="131" height="14"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="14" id="zEI-gZ-fy4"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.34901960780000002" green="0.3411764706" blue="0.3411764706" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="胜场次" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="E06-bD-LoM"> |
| | | <rect key="frame" x="0.0" y="250.33333333333337" width="131" height="14"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="14" id="zhZ-gy-Wf9"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.34901960780000002" green="0.3411764706" blue="0.3411764706" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="m9A-Xb-JPg"> |
| | | <rect key="frame" x="268" y="274.33333333333331" width="93" height="46"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="46" id="8tN-ps-bbt"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="27"/> |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> |
| | | <color key="value" name="FE6E0D"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="23"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rEf-8b-RAY"> |
| | | <rect key="frame" x="32" y="274.33333333333331" width="93" height="46"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="46" id="Zh3-Gp-bHb"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="27"/> |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> |
| | | <color key="value" name="FE6E0D"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="23"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lO3-VT-LVU"> |
| | | <rect key="frame" x="150" y="274.33333333333331" width="93" height="46"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="46" id="Fpt-PG-81C"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" pointSize="27"/> |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> |
| | | <color key="value" name="FE6E0D"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="23"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </label> |
| | | </subviews> |
| | | <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstItem="m9A-Xb-JPg" firstAttribute="top" secondItem="rEf-8b-RAY" secondAttribute="top" id="1JM-fs-BSA"/> |
| | | <constraint firstItem="lO3-VT-LVU" firstAttribute="centerX" secondItem="Peq-DE-vPX" secondAttribute="centerX" id="40K-BC-Ska"/> |
| | | <constraint firstItem="9RA-9C-jhI" firstAttribute="top" secondItem="dho-Mk-UEo" secondAttribute="bottom" constant="14.5" id="4H8-rg-qaV"/> |
| | | <constraint firstItem="CLm-un-lHA" firstAttribute="leading" secondItem="rC1-GG-uHG" secondAttribute="trailing" constant="13.5" id="7KP-Up-Wjn"/> |
| | | <constraint firstItem="9RA-9C-jhI" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="31" id="7YN-Nf-NVK"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="7Tv-DA-R5E" secondAttribute="trailing" id="97Z-Lt-Xc6"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="m9A-Xb-JPg" secondAttribute="trailing" constant="32" id="AOB-qc-e1Y"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="9RA-9C-jhI" secondAttribute="trailing" constant="31" id="Adw-GT-Y0X"/> |
| | | <constraint firstItem="dho-Mk-UEo" firstAttribute="top" secondItem="kqK-MA-Vfm" secondAttribute="bottom" constant="37" id="ENW-DR-ptu"/> |
| | | <constraint firstItem="kqK-MA-Vfm" firstAttribute="centerY" secondItem="rC1-GG-uHG" secondAttribute="centerY" id="H2t-1L-Swv"/> |
| | | <constraint firstItem="rC1-GG-uHG" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="24" id="HgH-ec-6mG"/> |
| | | <constraint firstItem="rEf-8b-RAY" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="32" id="J8r-1H-0zw"/> |
| | | <constraint firstItem="3bk-Zw-hOl" firstAttribute="top" secondItem="CLm-un-lHA" secondAttribute="bottom" constant="9" id="NL7-24-lfZ"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="dho-Mk-UEo" secondAttribute="trailing" id="Oyo-J1-MSN"/> |
| | | <constraint firstItem="lO3-VT-LVU" firstAttribute="leading" secondItem="rEf-8b-RAY" secondAttribute="trailing" constant="25" id="PmD-Dt-ho8"/> |
| | | <constraint firstItem="Peq-DE-vPX" firstAttribute="top" secondItem="E06-bD-LoM" secondAttribute="top" id="QY6-Xm-ShD"/> |
| | | <constraint firstItem="7Tv-DA-R5E" firstAttribute="leading" secondItem="Peq-DE-vPX" secondAttribute="trailing" id="Tw1-gw-DR2"/> |
| | | <constraint firstItem="lO3-VT-LVU" firstAttribute="top" secondItem="Peq-DE-vPX" secondAttribute="bottom" constant="10" id="UVT-Su-Uiq"/> |
| | | <constraint firstItem="CLm-un-lHA" firstAttribute="top" secondItem="rC1-GG-uHG" secondAttribute="top" constant="14.5" id="Urr-X9-Yxg"/> |
| | | <constraint firstItem="3bk-Zw-hOl" firstAttribute="leading" secondItem="CLm-un-lHA" secondAttribute="leading" id="V1E-uQ-2x2"/> |
| | | <constraint firstItem="lO3-VT-LVU" firstAttribute="top" secondItem="rEf-8b-RAY" secondAttribute="top" id="V79-Pc-1wJ"/> |
| | | <constraint firstItem="Peq-DE-vPX" firstAttribute="top" secondItem="9RA-9C-jhI" secondAttribute="bottom" constant="24" id="cff-f0-lmR"/> |
| | | <constraint firstItem="dho-Mk-UEo" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="fzG-wS-Dji"/> |
| | | <constraint firstItem="7Tv-DA-R5E" firstAttribute="top" secondItem="E06-bD-LoM" secondAttribute="top" id="gQX-Wq-R9D"/> |
| | | <constraint firstItem="Peq-DE-vPX" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="gbH-2M-vRU"/> |
| | | <constraint firstItem="E06-bD-LoM" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="gjE-T9-KXv"/> |
| | | <constraint firstItem="lO3-VT-LVU" firstAttribute="width" secondItem="rEf-8b-RAY" secondAttribute="width" id="ljt-w2-XRi"/> |
| | | <constraint firstItem="m9A-Xb-JPg" firstAttribute="leading" secondItem="lO3-VT-LVU" secondAttribute="trailing" constant="25" id="msI-qw-ojx"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="kqK-MA-Vfm" secondAttribute="trailing" constant="35" id="qYf-Yz-QGa"/> |
| | | <constraint firstItem="m9A-Xb-JPg" firstAttribute="width" secondItem="rEf-8b-RAY" secondAttribute="width" id="qda-yh-5e1"/> |
| | | <constraint firstItem="Peq-DE-vPX" firstAttribute="leading" secondItem="E06-bD-LoM" secondAttribute="trailing" id="rNC-0l-Kxm"/> |
| | | <constraint firstItem="7Tv-DA-R5E" firstAttribute="width" secondItem="E06-bD-LoM" secondAttribute="width" id="sGr-Co-SRW"/> |
| | | <constraint firstItem="dho-Mk-UEo" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="uqs-Ug-h0k"/> |
| | | <constraint firstItem="rC1-GG-uHG" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" constant="24" id="whU-9h-iS8"/> |
| | | <constraint firstItem="Peq-DE-vPX" firstAttribute="width" secondItem="E06-bD-LoM" secondAttribute="width" id="y0w-N0-AB4"/> |
| | | </constraints> |
| | | <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> |
| | | <point key="canvasLocation" x="81.679389312977094" y="-132.3943661971831"/> |
| | | </view> |
| | | </objects> |
| | | <resources> |
| | | <image name="btn_exchange" width="40" height="35"/> |
| | | <namedColor name="FE6E0D"> |
| | | <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | <systemColor name="systemGray4Color"> |
| | | <color red="0.81960784313725488" green="0.81960784313725488" blue="0.83921568627450982" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
New file |
| | |
| | | // |
| | | // WorldCupMenuVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/26. |
| | | // |
| | | |
| | | import UIKit |
| | | import SPPageMenu |
| | | import JQTools |
| | | |
| | | class WorldCupMenuVC: BaseVC { |
| | | |
| | | var pageMenu:SPPageMenu! |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view.backgroundColor = .clear |
| | | pageMenu = SPPageMenu(frame: CGRect(x: 0, y: 0, width: JQ_ScreenW, height: 51), trackerStyle: .line) |
| | | view.addSubview(pageMenu) |
| | | pageMenu.backgroundColor = .clear |
| | | |
| | | // 追踪线 |
| | | pageMenu.trackerWidth = 50 |
| | | pageMenu.setTrackerHeight(1.5, cornerRadius: 0) |
| | | pageMenu.tracker.backgroundColor = UIColor(hexString: "#3876F2") |
| | | pageMenu.trackerFollowingMode = .always |
| | | |
| | | // 分割线 |
| | | pageMenu.dividingLine.backgroundColor = UIColor.clear |
| | | pageMenu.dividingLineHeight = 1 |
| | | |
| | | // item |
| | | pageMenu.spacing = 20.0 |
| | | pageMenu.permutationWay = .notScrollAdaptContent |
| | | pageMenu.setItems(["进行中","未开始","比赛记录","排名"], selectedItemIndex: 0) |
| | | |
| | | // 字体 |
| | | pageMenu.selectedItemTitleFont = UIFont.systemFont(ofSize: 17, weight: .medium) |
| | | pageMenu.unSelectedItemTitleFont = UIFont.systemFont(ofSize: 17) |
| | | // 颜色 |
| | | pageMenu.selectedItemTitleColor = UIColor(hexString: "#3876F2")! |
| | | pageMenu.unSelectedItemTitleColor = UIColor(hexString: "#595757")! |
| | | } |
| | | } |
| | | |
| | | //extension WorldCupMenuVC:SPPageMenuDelegate{ |
| | | // func pageMenu(_ pageMenu: SPPageMenu, itemSelectedFrom fromIndex: Int, to toIndex: Int) { |
| | | // print("fromIndex:\(fromIndex) toIndex:\(toIndex)") |
| | | // } |
| | | // |
| | | //} |
New file |
| | |
| | | // |
| | | // WorldCupRankVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/27. |
| | | // |
| | | |
| | | import UIKit |
| | | import JQTools |
| | | import QMUIKit |
| | | |
| | | class WorldCupRankVC: BaseVC { |
| | | |
| | | private var tableView:UITableView! |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view.backgroundColor = .clear |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView = UITableView(frame: .zero, style: .plain) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.showsVerticalScrollIndicator = false |
| | | tableView.showsHorizontalScrollIndicator = false |
| | | tableView.backgroundColor = .clear |
| | | tableView.separatorStyle = .none |
| | | if #available(iOS 15.0, *) { |
| | | tableView.sectionHeaderTopPadding = 0 |
| | | } |
| | | tableView.register(WorldCupRankTCell.self, forCellReuseIdentifier: "rankTCell") |
| | | |
| | | view.addSubview(tableView) |
| | | tableView.snp.makeConstraints { make in |
| | | make.top.left.right.equalToSuperview().inset(UIEdgeInsets(top: 0, left: 14, bottom: 0, right: 14)) |
| | | make.bottom.equalToSuperview().offset(-69) |
| | | } |
| | | |
| | | let stackView = UIStackView() |
| | | stackView.axis = .horizontal |
| | | stackView.distribution = .equalCentering |
| | | stackView.spacing = 20 |
| | | view.addSubview(stackView) |
| | | stackView.snp.makeConstraints { make in |
| | | make.centerX.equalToSuperview() |
| | | make.bottom.equalTo(-16) |
| | | make.height.equalTo(40) |
| | | } |
| | | |
| | | let provinceBtn = UIButton(type: .custom) |
| | | provinceBtn.setTitle("全国", for: .normal) |
| | | provinceBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: .medium) |
| | | provinceBtn.setTitleColor(UIColor(hexString: "#FE7E03"), for: .normal) |
| | | provinceBtn.borderColor = UIColor(hexString: "#FE7E03") |
| | | provinceBtn.borderWidth = 1 |
| | | provinceBtn.cornerRadius = 20 |
| | | provinceBtn.snp.makeConstraints { make in |
| | | make.width.equalTo(144) |
| | | } |
| | | |
| | | let cityBtn = UIButton(type: .custom) |
| | | cityBtn.setTitle("城市", for: .normal) |
| | | cityBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: .medium) |
| | | cityBtn.setTitleColor(.white, for: .normal) |
| | | cityBtn.backgroundColor = UIColor(hexString: "#FE7E03") |
| | | cityBtn.cornerRadius = 20 |
| | | cityBtn.snp.makeConstraints { make in |
| | | make.width.equalTo(144) |
| | | } |
| | | |
| | | stackView.addArrangedSubview(provinceBtn) |
| | | stackView.addArrangedSubview(cityBtn) |
| | | } |
| | | } |
| | | |
| | | extension WorldCupRankVC:UITableViewDelegate,UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | if section == 0{ |
| | | return 1 |
| | | } |
| | | return 2 |
| | | } |
| | | |
| | | func numberOfSections(in tableView: UITableView) -> Int { |
| | | return 2 |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | |
| | | if indexPath.section == 0{ |
| | | var cell = tableView.dequeueReusableCell(withIdentifier: "topHanderView") |
| | | if cell == nil{ |
| | | cell = UITableViewCell(style: .default, reuseIdentifier: "topHanderView") |
| | | let label = UILabel() |
| | | label.text = "排名" |
| | | label.textAlignment = .center |
| | | label.font = UIFont.systemFont(ofSize: 12, weight: .medium) |
| | | label.textColor = .black.withAlphaComponent(0.8) |
| | | cell?.contentView.addSubview(label) |
| | | label.snp.makeConstraints { make in |
| | | make.top.bottom.equalToSuperview() |
| | | make.left.equalToSuperview() |
| | | make.width.equalTo((JQ_ScreenW - 28) * 0.138) |
| | | make.height.equalTo(32) |
| | | } |
| | | |
| | | label.addLine(UIColor(hexStr: "#E1E1E1"), true, true, true, false, 0.4) |
| | | |
| | | let label1 = UILabel() |
| | | label1.text = "用户" |
| | | label1.textAlignment = .center |
| | | label1.font = UIFont.systemFont(ofSize: 12, weight: .medium) |
| | | label1.textColor = .black.withAlphaComponent(0.8) |
| | | cell?.contentView.addSubview(label1) |
| | | label1.snp.makeConstraints { make in |
| | | make.top.bottom.equalToSuperview() |
| | | make.width.equalTo((JQ_ScreenW - 28) * 0.337) |
| | | make.height.equalTo(32) |
| | | make.left.equalTo(label.snp.right) |
| | | } |
| | | label1.addLine(UIColor(hexStr: "#E1E1E1"), true, true, true, false, 0.4) |
| | | |
| | | let label2 = UILabel() |
| | | label2.text = "总场次" |
| | | label2.textAlignment = .center |
| | | label2.font = UIFont.systemFont(ofSize: 12, weight: .medium) |
| | | label2.textColor = .black.withAlphaComponent(0.8) |
| | | cell?.contentView.addSubview(label2) |
| | | label2.snp.makeConstraints { make in |
| | | make.top.bottom.equalToSuperview() |
| | | make.width.equalTo((JQ_ScreenW - 28) * 0.3314) |
| | | make.height.equalTo(32) |
| | | make.left.equalTo(label1.snp.right) |
| | | } |
| | | label2.addLine(UIColor(hexStr: "#E1E1E1"), true, true, true, false, 0.4) |
| | | |
| | | let label3 = UILabel() |
| | | label3.text = "胜率" |
| | | label3.textAlignment = .center |
| | | label3.font = UIFont.systemFont(ofSize: 12, weight: .medium) |
| | | label3.textColor = .black.withAlphaComponent(0.8) |
| | | cell?.contentView.addSubview(label3) |
| | | label3.snp.makeConstraints { make in |
| | | make.top.bottom.equalToSuperview() |
| | | make.width.equalTo((JQ_ScreenW - 28) * 0.2016) |
| | | make.height.equalTo(32) |
| | | make.left.equalTo(label2.snp.right) |
| | | } |
| | | label3.addLine(UIColor(hexStr: "#E1E1E1"), true, true, true, true, 0.4) |
| | | } |
| | | return cell! |
| | | } |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "rankTCell") as! WorldCupRankTCell |
| | | cell.addLine(UIColor(hexStr: "#E1E1E1"), false, true, false, true, 0.4) |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
| | | if indexPath.section == 0{ |
| | | return 32 |
| | | } |
| | | return 45 |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { |
| | | |
| | | if section != 0{ |
| | | return nil |
| | | } |
| | | |
| | | var headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") |
| | | if headerView == nil{ |
| | | headerView = UITableViewHeaderFooterView(reuseIdentifier: "header") |
| | | headerView?.backgroundColor = .clear |
| | | headerView?.contentView.backgroundColor = .clear |
| | | |
| | | let label = UILabel(text: "参与年份: ") |
| | | label.font = UIFont.systemFont(ofSize: 16, weight: .semibold) |
| | | label.textColor = .black.withAlphaComponent(0.8) |
| | | headerView?.contentView.addSubview(label) |
| | | label.snp.makeConstraints { make in |
| | | make.left.equalTo(14) |
| | | make.centerY.equalToSuperview() |
| | | } |
| | | |
| | | let btn = QMUIButton(type: .custom) |
| | | btn.setTitle("全部", for: .normal) |
| | | btn.setTitleColor(.black.withAlphaComponent(0.74), for: .normal) |
| | | btn.titleLabel?.font = UIFont.systemFont(ofSize: 16) |
| | | btn.borderColor = UIColor(hexString: "#D9D9D9") |
| | | btn.borderWidth = 1 |
| | | btn.setImage(UIImage(named: "icon_down_arrow"), for: .normal) |
| | | btn.spacingBetweenImageAndTitle = 20 |
| | | btn.imagePosition = .right |
| | | btn.jq_cornerRadius = 5 |
| | | headerView?.contentView.addSubview(btn) |
| | | btn.snp.makeConstraints { make in |
| | | make.left.equalTo(label.snp.right).offset(2) |
| | | make.centerY.equalToSuperview() |
| | | make.width.greaterThanOrEqualTo(88) |
| | | make.height.equalTo(35) |
| | | } |
| | | |
| | | let btn1 = QMUIButton(type: .custom) |
| | | btn1.setTitle("按胜率排名", for: .normal) |
| | | btn1.setTitleColor(UIColor(hexString: "#3876F2"), for: .normal) |
| | | btn1.titleLabel?.font = UIFont.systemFont(ofSize: 16,weight: .medium) |
| | | btn1.setImage(UIImage(named: "icon_reset"), for: .normal) |
| | | btn1.spacingBetweenImageAndTitle = 5 |
| | | btn1.imagePosition = .right |
| | | headerView?.contentView.addSubview(btn1) |
| | | btn1.snp.makeConstraints { make in |
| | | make.right.equalToSuperview().offset(-14) |
| | | make.centerY.equalToSuperview() |
| | | make.height.equalTo(22) |
| | | } |
| | | } |
| | | return headerView |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { |
| | | if section != 0{ |
| | | return 0.0001 |
| | | } |
| | | return 85 |
| | | } |
| | | } |
| | | |
| | | extension UIView{ |
| | | //给当前的view边界换上线,可以任意设置4个边 |
| | | func addLine(_ color:UIColor = UIColor.lightGray.withAlphaComponent(0.3),_ top:Bool = false,_ left:Bool = false,_ bottom:Bool = false,_ right:Bool = false,_ width:CGFloat = 0.5){ |
| | | if top{ |
| | | let line = UIView() |
| | | line.backgroundColor = color |
| | | addSubview(line) |
| | | line.snp.makeConstraints { make in |
| | | make.top.left.right.equalToSuperview() |
| | | make.height.equalTo(width) |
| | | } |
| | | } |
| | | |
| | | if left{ |
| | | let line = UIView() |
| | | line.backgroundColor = color |
| | | addSubview(line) |
| | | line.snp.makeConstraints { make in |
| | | make.top.left.bottom.equalToSuperview() |
| | | make.width.equalTo(width) |
| | | } |
| | | } |
| | | |
| | | if bottom{ |
| | | let line = UIView() |
| | | line.backgroundColor = color |
| | | addSubview(line) |
| | | line.snp.makeConstraints { make in |
| | | make.bottom.left.right.equalToSuperview() |
| | | make.height.equalTo(width) |
| | | } |
| | | } |
| | | |
| | | if right{ |
| | | let line = UIView() |
| | | line.backgroundColor = color |
| | | addSubview(line) |
| | | line.snp.makeConstraints { make in |
| | | make.top.bottom.equalToSuperview() |
| | | make.right.equalToSuperview().offset(-0.4) |
| | | make.width.equalTo(width) |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |
New file |
| | |
| | | // |
| | | // WorldCupRecordVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/27. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class WorldCupRecordVC: BaseVC { |
| | | |
| | | private var tableView:UITableView! |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view.backgroundColor = .clear |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView = UITableView(frame: .zero, style: .grouped) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.backgroundColor = .clear |
| | | if #available(iOS 15.0, *) { |
| | | tableView.sectionHeaderTopPadding = 0 |
| | | } |
| | | tableView.register(UINib(nibName: "WorldCupRecordTCell", bundle: nil), forCellReuseIdentifier: "_WorldCupRecordTCell") |
| | | |
| | | view.addSubview(tableView) |
| | | tableView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension WorldCupRecordVC:UITableViewDelegate,UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return 20 |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_WorldCupRecordTCell") as! WorldCupRecordTCell |
| | | cell.backgroundColor = .clear |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
| | | return 102 |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { |
| | | var headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") |
| | | if headerView == nil{ |
| | | headerView = UITableViewHeaderFooterView(reuseIdentifier: "header") |
| | | headerView?.backgroundColor = .clear |
| | | headerView?.contentView.backgroundColor = .clear |
| | | let label = UILabel() |
| | | label.text = "总场次:0场" |
| | | label.font = UIFont.systemFont(ofSize: 16, weight: .semibold) |
| | | label.textColor = .black.withAlphaComponent(0.8) |
| | | headerView?.contentView.addSubview(label) |
| | | label.snp.makeConstraints { make in |
| | | make.left.equalTo(14) |
| | | make.height.equalTo(22) |
| | | make.bottom.equalToSuperview().offset(-6.5) |
| | | } |
| | | } |
| | | return headerView |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { |
| | | return 54 |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | // |
| | | // WorldCupVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/26. |
| | | // |
| | | |
| | | import UIKit |
| | | import SPPageMenu |
| | | import FFPage |
| | | import JQTools |
| | | |
| | | |
| | | class WorldCupVC: BaseVC { |
| | | |
| | | lazy var headerVC:WorldCupHeaderVC = { |
| | | let vc = WorldCupHeaderVC() |
| | | return vc |
| | | }() |
| | | |
| | | lazy var menuVC:WorldCupMenuVC = { |
| | | let vc = WorldCupMenuVC() |
| | | return vc |
| | | }() |
| | | |
| | | lazy var adapterVC:FFAdapterViewController = { |
| | | let vc = FFAdapterViewController() |
| | | vc.headViewController = headerVC |
| | | vc.menuViewController = menuVC |
| | | vc.pageViewController = pageVC |
| | | vc.headHeight = 350 |
| | | vc.menuHeight = 50 |
| | | vc.style = .subRefresh |
| | | return vc |
| | | }() |
| | | |
| | | |
| | | lazy var pageVC:FFPageViewController = { |
| | | let pageViewController = FFPageViewController() |
| | | pageViewController.view.backgroundColor = .clear |
| | | pageViewController.delegate = self |
| | | pageViewController.scrollview.backgroundColor = .clear |
| | | return pageViewController |
| | | }() |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "我的报名" |
| | | |
| | | let bgImg = UIImageView(image: UIImage(named: "bg_long")) |
| | | bgImg.contentMode = .scaleAspectFill |
| | | view.addSubview(bgImg) |
| | | bgImg.snp.makeConstraints { make in |
| | | make.top.equalTo(200) |
| | | make.left.right.bottom.equalToSuperview() |
| | | } |
| | | |
| | | |
| | | addChild(adapterVC) |
| | | adapterVC.view.backgroundColor = .clear |
| | | view.addSubview(adapterVC.view) |
| | | adapterVC.view.snp.makeConstraints { make in |
| | | make.top.equalTo(self.view.safeAreaLayoutGuide) |
| | | make.left.right.bottom.equalToSuperview() |
| | | } |
| | | |
| | | menuVC.pageMenu.delegate = self |
| | | } |
| | | |
| | | override func setUI() { |
| | | |
| | | } |
| | | } |
| | | |
| | | extension WorldCupVC:FFPageViewControllerDelegate{ |
| | | func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { |
| | | return 4 |
| | | } |
| | | |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | if page <= 1{ |
| | | return WorldCupContentVC() |
| | | }else if page == 2{ |
| | | return WorldCupRecordVC() |
| | | }else{ |
| | | return WorldCupRankVC() |
| | | } |
| | | } |
| | | |
| | | func pageViewController(_ pageViewController: FFPageViewController, didScrollTo index: Int) { |
| | | |
| | | } |
| | | } |
| | | |
| | | extension WorldCupVC:SPPageMenuDelegate{ |
| | | func pageMenu(_ pageMenu: SPPageMenu, didSelectedItem index: Int) { |
| | | pageVC.scroll(toPage: index, animation: true) |
| | | } |
| | | |
| | | func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { |
| | | |
| | | } |
| | | func pageMenu(_ pageMenu: SPPageMenu, itemSelectedFrom fromIndex: Int, to toIndex: Int) { |
| | | pageVC.scroll(toPage: toIndex, animation: true) |
| | | } |
| | | |
| | | } |
| | | |
New file |
| | |
| | | // |
| | | // FindItemCCell.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/26. |
| | | // |
| | | |
| | | import UIKit |
| | | |
| | | class FindItemCCell: UICollectionViewCell { |
| | | |
| | | @IBOutlet weak var label_title: UILabel! |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | // Initialization code |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_FindItemCCell" id="gTV-IL-0wX" customClass="FindItemCCell" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="0.0" width="145" height="187"/> |
| | | <autoresizingMask key="autoresizingMask"/> |
| | | <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> |
| | | <rect key="frame" x="0.0" y="0.0" width="145" height="187"/> |
| | | <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
| | | <subviews> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="A0h-c2-sMH"> |
| | | <rect key="frame" x="47.666666666666657" y="0.0" width="50" height="50"/> |
| | | <color key="backgroundColor" red="0.98039215690000003" green="0.57254901960000004" blue="0.23529411759999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="50" id="MnY-6I-gT0"/> |
| | | <constraint firstAttribute="height" constant="50" id="vg3-hc-JPZ"/> |
| | | </constraints> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5ma-Jk-HRg"> |
| | | <rect key="frame" x="51.666666666666657" y="60" width="42" height="21"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="17"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | </subviews> |
| | | </view> |
| | | <constraints> |
| | | <constraint firstItem="5ma-Jk-HRg" firstAttribute="top" secondItem="A0h-c2-sMH" secondAttribute="bottom" constant="10" id="54e-B1-BJk"/> |
| | | <constraint firstItem="5ma-Jk-HRg" firstAttribute="centerX" secondItem="A0h-c2-sMH" secondAttribute="centerX" id="JMK-wR-iZ7"/> |
| | | <constraint firstItem="A0h-c2-sMH" firstAttribute="centerX" secondItem="gTV-IL-0wX" secondAttribute="centerX" id="j7b-lP-gGO"/> |
| | | <constraint firstItem="A0h-c2-sMH" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="p3Y-S2-EJ3"/> |
| | | </constraints> |
| | | <size key="customSize" width="145" height="187"/> |
| | | <connections> |
| | | <outlet property="label_title" destination="5ma-Jk-HRg" id="zUy-fV-rdb"/> |
| | | </connections> |
| | | <point key="canvasLocation" x="112.21374045801527" y="68.661971830985919"/> |
| | | </collectionViewCell> |
| | | </objects> |
| | | </document> |
| | |
| | | |
| | | class WelfareFreeVC: BaseVC { |
| | | |
| | | var storeWalfareModel:StoreWalfareModel? |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var btn_call: QMUIButton! |
| | | var storeWalfareModel:StoreWalfareModel? |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var btn_call: QMUIButton! |
| | | |
| | | init(_ model:StoreWalfareModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.storeWalfareModel = model |
| | | } |
| | | init(_ model:StoreWalfareModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.storeWalfareModel = model |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "免费福利" |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "免费福利" |
| | | |
| | | if let m = storeWalfareModel{ |
| | | let html = "<img src='\(m.img)' width='\(JQ_ScreenW)' loading=eager/>" |
| | | self.webView.loadHTMLString(html.jq_wrapHtml(), baseURL: nil) |
| | | self.btn_call.isHidden = m.phone.isEmpty |
| | | } |
| | | } |
| | | |
| | | if let m = storeWalfareModel{ |
| | | let html = "<img src='\(m.img)' width='\(JQ_ScreenW)' loading=eager/>" |
| | | self.webView.loadHTMLString(html.jq_wrapHtml(), baseURL: nil) |
| | | self.btn_call.isHidden = m.phone.isEmpty |
| | | } |
| | | } |
| | | override func setUI() { |
| | | btn_call.imagePosition = .left |
| | | btn_call.spacingBetweenImageAndTitle = 13 |
| | | } |
| | | |
| | | override func setUI() { |
| | | btn_call.imagePosition = .left |
| | | btn_call.spacingBetweenImageAndTitle = 13 |
| | | } |
| | | |
| | | @IBAction func callPhoneAction(_ sender: UIButton) { |
| | | if let phone = storeWalfareModel?.phone{ |
| | | UIApplication.shared.open(URL(string: "tel://\(phone)")!, options: [:], completionHandler: nil) |
| | | } |
| | | } |
| | | @IBAction func callPhoneAction(_ sender: UIButton) { |
| | | if let phone = storeWalfareModel?.phone{ |
| | | UIApplication.shared.open(URL(string: "tel://\(phone)")!, options: [:], completionHandler: nil) |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | class WelfareVC: BaseVC { |
| | | |
| | | @IBOutlet weak var img_userProfile: UIImageView! |
| | | @IBOutlet weak var label_username: UILabel! |
| | | @IBOutlet weak var btn_vip: QMUIButton! |
| | | @IBOutlet weak var label_coin: UILabel! |
| | | @IBOutlet weak var label_score: UILabel! |
| | | @IBOutlet weak var scrollView: UIScrollView! |
| | | @IBOutlet weak var coinCollectionView: UICollectionView! |
| | | @IBOutlet weak var btn_coupon: UIButton! |
| | | // @IBOutlet weak var btn_shoppping: UIButton! |
| | | // @IBOutlet weak var btn_weekly: UIButton! |
| | | // @IBOutlet weak var btn_todayFree: UIButton! |
| | | @IBOutlet weak var img_userProfile: UIImageView! |
| | | @IBOutlet weak var label_username: UILabel! |
| | | @IBOutlet weak var btn_vip: QMUIButton! |
| | | @IBOutlet weak var label_coin: UILabel! |
| | | @IBOutlet weak var label_score: UILabel! |
| | | @IBOutlet weak var scrollView: UIScrollView! |
| | | @IBOutlet weak var coinCollectionView: UICollectionView! |
| | | @IBOutlet weak var btn_coupon: UIButton! |
| | | // @IBOutlet weak var btn_shoppping: UIButton! |
| | | // @IBOutlet weak var btn_weekly: UIButton! |
| | | // @IBOutlet weak var btn_todayFree: UIButton! |
| | | |
| | | private var timerOffsetX:Double = 0 |
| | | private let cellW = 144.0 |
| | | private var benefitHomeModel:BenefitHomeModel? |
| | | private var updateProdDate:Date? |
| | | private var timerOffsetX:Double = 0 |
| | | private let cellW = 144.0 |
| | | private var benefitHomeModel:BenefitHomeModel? |
| | | private var updateProdDate:Date? |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | getData() |
| | | } |
| | | |
| | | override func viewDidAppear(_ animated: Bool) { |
| | | super.viewDidAppear(animated) |
| | | if let date = updateProdDate{ |
| | | //防止反复切换,15秒 |
| | | if Date().timeIntervalSince1970 - date.timeIntervalSince1970 > 15{ |
| | | getData() |
| | | } |
| | | } |
| | | } |
| | | |
| | | override func setUI() { |
| | | scrollView.contentInsetAdjustmentBehavior = .never |
| | | coinCollectionView.delegate = self |
| | | coinCollectionView.dataSource = self |
| | | coinCollectionView.register(UINib(nibName: "WelfareCoinCCell", bundle: nil), forCellWithReuseIdentifier: "_WelfareCoinCCell") |
| | | } |
| | | |
| | | override func setRx() { |
| | | NotificationCenter.default.rx.notification(UpdateWelfare_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in |
| | | self?.getData() |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | private func getData(){ |
| | | Services.benefitHome().subscribe(onNext: {[weak self] data in |
| | | if let model = data.data{ |
| | | self?.benefitHomeModel = model |
| | | self?.img_userProfile.sd_setImage(with: URL(string: model.userHeadImg)) |
| | | self?.label_username.text = model.userName.isEmpty ? "未命名":model.userName |
| | | self?.btn_vip.isHidden = model.isMember != "年度会员" |
| | | self?.label_coin.text = model.wpCoin.currencyNotPrefix() |
| | | self?.label_score.text = "\(model.userIntegral)" |
| | | self?.coinCollectionView.reloadData() |
| | | |
| | | if let coupon = model.image?.myConpons{ |
| | | self?.btn_coupon.sd_setImage(with: URL(string: coupon), for: .normal, placeholderImage: nil,context: nil) |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | getData() |
| | | } |
| | | |
| | | if let weeksBenefit = model.image?.weeksBenefit{ |
| | | // self?.btn_weekly.sd_setImage(with: URL(string: weeksBenefit), for: .normal, placeholderImage: nil, context: nil) |
| | | override func viewDidAppear(_ animated: Bool) { |
| | | super.viewDidAppear(animated) |
| | | if let date = updateProdDate{ |
| | | //防止反复切换,15秒 |
| | | if Date().timeIntervalSince1970 - date.timeIntervalSince1970 > 15{ |
| | | getData() |
| | | } |
| | | } |
| | | } |
| | | |
| | | if let todayFree = model.image?.todayFree{ |
| | | // self?.btn_todayFree.sd_setImage(with: URL(string: todayFree), for: .normal, placeholderImage: nil, context: nil) |
| | | override func setUI() { |
| | | scrollView.contentInsetAdjustmentBehavior = .never |
| | | coinCollectionView.delegate = self |
| | | coinCollectionView.dataSource = self |
| | | coinCollectionView.register(UINib(nibName: "WelfareCoinCCell", bundle: nil), forCellWithReuseIdentifier: "_WelfareCoinCCell") |
| | | } |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | override func setRx() { |
| | | NotificationCenter.default.rx.notification(UpdateWelfare_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in |
| | | self?.getData() |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func userProfileAction(_ sender: UIButton) { |
| | | let vc = ProfileVC() |
| | | push(vc: vc) |
| | | } |
| | | private func getData(){ |
| | | Services.benefitHome().subscribe(onNext: {[weak self] data in |
| | | if let model = data.data{ |
| | | self?.benefitHomeModel = model |
| | | self?.img_userProfile.sd_setImage(with: URL(string: model.userHeadImg)) |
| | | self?.label_username.text = model.userName.isEmpty ? "未命名":model.userName |
| | | self?.btn_vip.isHidden = model.isMember != "年度会员" |
| | | self?.label_coin.text = model.wpCoin.currencyNotPrefix() |
| | | self?.label_score.text = "\(model.userIntegral)" |
| | | self?.coinCollectionView.reloadData() |
| | | |
| | | @IBAction func billAction(_ sender: UIButton) { |
| | | let vc = WelfareBillListVC() |
| | | push(vc: vc) |
| | | } |
| | | if let coupon = model.image?.myConpons{ |
| | | self?.btn_coupon.sd_setImage(with: URL(string: coupon), for: .normal, placeholderImage: nil,context: nil) |
| | | } |
| | | |
| | | @IBAction func couponsAction(_ sender: UIButton) { |
| | | let vc = WelfareCouponsListVC() |
| | | push(vc: vc) |
| | | } |
| | | if let weeksBenefit = model.image?.weeksBenefit{ |
| | | // self?.btn_weekly.sd_setImage(with: URL(string: weeksBenefit), for: .normal, placeholderImage: nil, context: nil) |
| | | } |
| | | |
| | | @IBAction func rechargeAction(_ sender: UIButton) { |
| | | let vc = RechargeRecordVC(coin: benefitHomeModel?.wpCoin ?? 0,subtype: .coin) |
| | | push(vc: vc) |
| | | } |
| | | if let todayFree = model.image?.todayFree{ |
| | | // self?.btn_todayFree.sd_setImage(with: URL(string: todayFree), for: .normal, placeholderImage: nil, context: nil) |
| | | } |
| | | } |
| | | }) { error in |
| | | |
| | | @IBAction func welfareWeeklyAction(_ sender: UIButton) { |
| | | let vc = WelfareWeeklyListVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func freeTodayAction(_ sender: UIButton) { |
| | | if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ |
| | | if let deserModel = HomeStoreModel.deserialize(from: storeStr){ |
| | | Services.queryStoreFreeBenefit(id: deserModel.storeId).subscribe(onNext: {[weak self] data in |
| | | if let m = data.data{ |
| | | let vc = WelfareFreeVC(m) |
| | | self?.push(vc: vc) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | alert(msg: "门店获取失败") |
| | | } |
| | | }else{ |
| | | alert(msg: "门店获取失败") |
| | | } |
| | | } |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func storeAction(_ sender: Any) { |
| | | let vc = CoinStoreCenterVC() |
| | | vc.benefitHomeModel = benefitHomeModel |
| | | push(vc: vc) |
| | | } |
| | | @IBAction func userProfileAction(_ sender: UIButton) { |
| | | let vc = ProfileVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .lightContent |
| | | } |
| | | @IBAction func billAction(_ sender: UIButton) { |
| | | let vc = WelfareBillListVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func couponsAction(_ sender: UIButton) { |
| | | let vc = WelfareCouponsListVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func rechargeAction(_ sender: UIButton) { |
| | | let vc = RechargeRecordVC(coin: benefitHomeModel?.wpCoin ?? 0,subtype: .coin) |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func welfareWeeklyAction(_ sender: UIButton) { |
| | | let vc = WelfareWeeklyListVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func freeTodayAction(_ sender: UIButton) { |
| | | if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ |
| | | if let deserModel = HomeStoreModel.deserialize(from: storeStr){ |
| | | Services.queryStoreFreeBenefit(id: deserModel.storeId).subscribe(onNext: {[weak self] data in |
| | | if let m = data.data{ |
| | | let vc = WelfareFreeVC(m) |
| | | self?.push(vc: vc) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | alert(msg: "门店获取失败") |
| | | } |
| | | }else{ |
| | | alert(msg: "门店获取失败") |
| | | } |
| | | } |
| | | |
| | | @IBAction func storeAction(_ sender: Any) { |
| | | let vc = CoinStoreCenterVC() |
| | | vc.benefitHomeModel = benefitHomeModel |
| | | push(vc: vc) |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .lightContent |
| | | } |
| | | } |
| | | |
| | | extension WelfareVC:UICollectionViewDelegate{ |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | let model = benefitHomeModel!.commodities[indexPath.row] |
| | | let vc = WelfareRedeemGoodsDetailVC(commodityId: model.commodityId, goodsType: model.goodsType) |
| | | push(vc: vc) |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | let model = benefitHomeModel!.commodities[indexPath.row] |
| | | let vc = WelfareRedeemGoodsDetailVC(commodityId: model.commodityId, goodsType: model.goodsType) |
| | | push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | extension WelfareVC:UICollectionViewDataSource{ |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | let resultCount = min(5,benefitHomeModel?.commodities.count ?? 0) |
| | | return resultCount |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | let resultCount = min(5,benefitHomeModel?.commodities.count ?? 0) |
| | | return resultCount |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let model = benefitHomeModel!.commodities[indexPath.row] |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_WelfareCoinCCell", for: indexPath) as! WelfareCoinCCell |
| | | cell.label_name.text = model.commodityName |
| | | cell.label_price.text = model.commodityPrice.currency() |
| | | cell.img_cover.sd_setImage(with: URL(string: model.commodityImg), placeholderImage: nil) |
| | | return cell |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let model = benefitHomeModel!.commodities[indexPath.row] |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_WelfareCoinCCell", for: indexPath) as! WelfareCoinCCell |
| | | cell.label_name.text = model.commodityName |
| | | cell.label_price.text = model.commodityPrice.currency() |
| | | cell.img_cover.sd_setImage(with: URL(string: model.commodityImg), placeholderImage: nil) |
| | | return cell |
| | | } |
| | | } |
| | | |
| | | extension WelfareVC:UICollectionViewDelegateFlowLayout{ |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { |
| | | return 0 |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { |
| | | return 0 |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { |
| | | return 0 |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { |
| | | return 0 |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { |
| | | |
| | | return CGSize(width: cellW, height: 178) |
| | | } |
| | | return CGSize(width: cellW, height: 178) |
| | | } |
| | | } |
New file |
| | |
| | | // |
| | | // WorldCupIntroVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2024/2/28. |
| | | // |
| | | |
| | | import UIKit |
| | | import WebKit |
| | | import JQTools |
| | | |
| | | class WorldCupIntroVC: BaseVC { |
| | | private var webView: WKWebView! |
| | | private var btn:UIButton! |
| | | private var model:BannerModel? |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | Services.getHomeModule().subscribe(onNext: {data in |
| | | if let data = data.data{ |
| | | self.title = data.title |
| | | self.btn.sd_setBackgroundImage(with: URL(string: data.buttonImage), for: .normal) |
| | | self.btn.imageView?.contentMode = .scaleAspectFit |
| | | self.btn.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: .medium) |
| | | self.webView.loadHTMLString(data.content.jq_wrapHtml(), baseURL: nil) |
| | | self.model = data |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | | webView = WKWebView(frame: .zero) |
| | | view.addSubview(webView) |
| | | webView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | |
| | | btn = UIButton(type: .custom) |
| | | btn.backgroundColor = Def_ThemeColor |
| | | btn.addTarget(self, action: #selector(jumpAction), for: .touchUpInside) |
| | | btn.setTitle("查看详情", for: .normal) |
| | | btn.setTitleColor(.white, for: .normal) |
| | | btn.cornerRadius = 20 |
| | | view.addSubview(btn) |
| | | btn.snp.makeConstraints { make in |
| | | make.left.equalTo(64) |
| | | make.right.equalTo(-64) |
| | | make.height.equalTo(40) |
| | | make.bottom.equalToSuperview().offset(-23) |
| | | } |
| | | } |
| | | |
| | | @objc func jumpAction(){ |
| | | if let m = model{ |
| | | jumpPage(model: m.model, page: m.page, type: m.type, id: m.id) |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | // |
| | | // YardDetailVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2023/6/19. |
| | | // |
| | | // |
| | | // YardDetailVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2023/6/19. |
| | | // |
| | | |
| | | import UIKit |
| | | import QMUIKit |
| | |
| | | |
| | | |
| | | class YardDetailDateManager { |
| | | private static var _sharedInstance: YardDetailDateManager? |
| | | private static var _sharedInstance: YardDetailDateManager? |
| | | |
| | | class func shared() -> YardDetailDateManager { |
| | | guard let instance = _sharedInstance else { |
| | | _sharedInstance = YardDetailDateManager() |
| | | return _sharedInstance! |
| | | } |
| | | return instance |
| | | } |
| | | class func shared() -> YardDetailDateManager { |
| | | guard let instance = _sharedInstance else { |
| | | _sharedInstance = YardDetailDateManager() |
| | | return _sharedInstance! |
| | | } |
| | | return instance |
| | | } |
| | | |
| | | private init() {} // 私有化init方法 |
| | | private init() {} // 私有化init方法 |
| | | |
| | | var dates = BehaviorRelay<[String:[SiteDetailDateTimeModel]]>(value: [:]) |
| | | var dates = BehaviorRelay<[String:[SiteDetailDateTimeModel]]>(value: [:]) |
| | | |
| | | //销毁单例对象 |
| | | class func destroy() { |
| | | _sharedInstance = nil |
| | | } |
| | | //销毁单例对象 |
| | | class func destroy() { |
| | | _sharedInstance = nil |
| | | } |
| | | } |
| | | |
| | | class YardDetailVC: BaseVC { |
| | | |
| | | @IBOutlet weak var scrollView: UIScrollView! |
| | | @IBOutlet weak var view_banner: CommonBannerView! |
| | | @IBOutlet weak var btn_calendar: QMUIButton! |
| | | @IBOutlet weak var collectionView: UICollectionView! |
| | | @IBOutlet weak var view_pages: UIView! |
| | | @IBOutlet weak var cons_pagesHei: NSLayoutConstraint! |
| | | @IBOutlet weak var view_coupon: UIView! |
| | | @IBOutlet weak var label_name: UILabel! |
| | | @IBOutlet weak var label_typeName: UILabel! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_cashPrice: UILabel! |
| | | @IBOutlet weak var label_coinPrice: UILabel! |
| | | @IBOutlet weak var label_datetime: UILabel! |
| | | @IBOutlet weak var tf_person: UITextField! |
| | | @IBOutlet weak var tf_phone: QMUITextField! |
| | | @IBOutlet weak var label_selectTimes: UILabel! |
| | | @IBOutlet weak var label_totalHours: UILabel! |
| | | @IBOutlet weak var label_price: UILabel! |
| | | @IBOutlet weak var btn_coupon: UIButton! |
| | | @IBOutlet weak var btn_fullYard: QMUIButton! |
| | | @IBOutlet weak var btn_halfYard: QMUIButton! |
| | | @IBOutlet weak var collection_halfYard: UICollectionView! |
| | | @IBOutlet weak var collection_yardType: UICollectionView! |
| | | @IBOutlet weak var view_yardType: UIView! |
| | | @IBOutlet weak var cons_halfYardHei: NSLayoutConstraint! |
| | | @IBOutlet weak var cons_yardTypeHei: NSLayoutConstraint! |
| | | @IBOutlet weak var view_halfYard: UIView! |
| | | @IBOutlet weak var view_selectYardType: UIView! |
| | | @IBOutlet weak var web_introduce: WKWebView! |
| | | @IBOutlet weak var cons_webHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_booking: UIButton! |
| | | @IBOutlet weak var label_conponInfo: UILabel! |
| | | |
| | | private var coupons = [CouponInfoModel]() |
| | | private var selectCouponModel:CouponInfoModel? |
| | | private let yardCellW = (JQ_ScreenW - 144) / 3 |
| | | private var halfIndex:Int? |
| | | private var yardIndex:Int = 0 //场地 |
| | | @IBOutlet weak var scrollView: UIScrollView! |
| | | @IBOutlet weak var view_banner: CommonBannerView! |
| | | @IBOutlet weak var btn_calendar: QMUIButton! |
| | | @IBOutlet weak var collectionView: UICollectionView! |
| | | @IBOutlet weak var view_pages: UIView! |
| | | @IBOutlet weak var cons_pagesHei: NSLayoutConstraint! |
| | | @IBOutlet weak var view_coupon: UIView! |
| | | @IBOutlet weak var label_name: UILabel! |
| | | @IBOutlet weak var label_typeName: UILabel! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_cashPrice: UILabel! |
| | | @IBOutlet weak var label_coinPrice: UILabel! |
| | | @IBOutlet weak var label_datetime: UILabel! |
| | | @IBOutlet weak var tf_person: UITextField! |
| | | @IBOutlet weak var tf_phone: QMUITextField! |
| | | @IBOutlet weak var label_selectTimes: UILabel! |
| | | @IBOutlet weak var label_totalHours: UILabel! |
| | | @IBOutlet weak var label_price: UILabel! |
| | | @IBOutlet weak var btn_coupon: UIButton! |
| | | @IBOutlet weak var btn_fullYard: QMUIButton! |
| | | @IBOutlet weak var btn_halfYard: QMUIButton! |
| | | @IBOutlet weak var collection_halfYard: UICollectionView! |
| | | @IBOutlet weak var collection_yardType: UICollectionView! |
| | | @IBOutlet weak var view_yardType: UIView! |
| | | @IBOutlet weak var cons_halfYardHei: NSLayoutConstraint! |
| | | @IBOutlet weak var cons_yardTypeHei: NSLayoutConstraint! |
| | | @IBOutlet weak var view_halfYard: UIView! |
| | | @IBOutlet weak var view_selectYardType: UIView! |
| | | @IBOutlet weak var web_introduce: WKWebView! |
| | | @IBOutlet weak var cons_webHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_booking: UIButton! |
| | | @IBOutlet weak var label_conponInfo: UILabel! |
| | | |
| | | private var coupons = [CouponInfoModel]() |
| | | private var selectCouponModel:CouponInfoModel? |
| | | private let yardCellW = (JQ_ScreenW - 144) / 3 |
| | | private var halfIndex:Int? |
| | | private var yardIndex:Int = 0 //场地 |
| | | |
| | | |
| | | lazy var pageViewController:FFPageViewController = { |
| | | let pageVC = FFPageViewController() |
| | | pageVC.view.backgroundColor = .clear |
| | | pageVC.scrollview.backgroundColor = .clear |
| | | pageVC.prePages = 2 |
| | | pageVC.scrollview.bounces = false |
| | | return pageVC |
| | | }() |
| | | lazy var pageViewController:FFPageViewController = { |
| | | let pageVC = FFPageViewController() |
| | | pageVC.view.backgroundColor = .clear |
| | | pageVC.scrollview.backgroundColor = .clear |
| | | pageVC.prePages = 2 |
| | | pageVC.scrollview.bounces = false |
| | | return pageVC |
| | | }() |
| | | |
| | | private var siteDetailModel:SiteDetailModel! |
| | | private var siteDetailDateTimeModel:SiteDetailDateTimeModel! |
| | | private let banner = CommonBannerView() |
| | | private var siteDetailModel:SiteDetailModel! |
| | | private var siteDetailDateTimeModel:SiteDetailDateTimeModel! |
| | | private let banner = CommonBannerView() |
| | | |
| | | private var id:Int! |
| | | private var cellW:Double! |
| | | private var selectIndex = 0 |
| | | private var weeklys = [Date]() |
| | | private var currentDate:Date?{ |
| | | didSet{ |
| | | if let d = currentDate{ |
| | | selectIndex = currentDate?.jq_nowWeekDay(identifier: .republicOfChina).index ?? 0 |
| | | weeklys = d.jq_currentWeekDates |
| | | collectionView.reloadData() |
| | | } |
| | | } |
| | | } |
| | | |
| | | required init(id:Int){ |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.id = id |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "预约场地" |
| | | Services.querySiteDetail(id: id).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | if let model = data.data{ |
| | | weakSelf.siteDetailModel = model |
| | | weakSelf.label_name.text = model.name |
| | | weakSelf.label_typeName.text = model.siteTypeName |
| | | weakSelf.label_address.text = String(format: "%@(%@)",model.storeName, model.storeAddress) |
| | | weakSelf.changePrice(cashPrice: model.cashPrice, coin: model.playPaiCoin, typeName: model.typeName) |
| | | weakSelf.view_yardType.isHidden = model.nextName.count == 0 |
| | | weakSelf.view_selectYardType.isHidden = model.ishalf == 2 |
| | | |
| | | let c:Double = Double(model.halfName.count) |
| | | let h:Double = weakSelf.yardCellW * 0.439 |
| | | weakSelf.cons_halfYardHei.constant = ceil(c / 3.0) * h + floor(c / 3.0) * 21 |
| | | |
| | | let c1:Double = Double(model.nextName.count) |
| | | weakSelf.cons_yardTypeHei.constant = ceil(c1 / 3.0) * h + floor(c1 / 3.0) * 21 |
| | | |
| | | weakSelf.collection_halfYard.reloadData() |
| | | weakSelf.collection_yardType.reloadData() |
| | | |
| | | weakSelf.web_introduce.loadHTMLString(model.introduce.jq_wrapHtml(), baseURL: nil) |
| | | weakSelf.view_banner.frame = CGRect(origin: .zero, size: CGSize(width: JQ_ScreenW, height: JQ_ScreenW * 0.56)) |
| | | |
| | | let imgs = model.imgs.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | weakSelf.view_banner.setItems(items: items) |
| | | |
| | | weakSelf.view_yardType.isHidden = model.nextName.filter({!$0.isEmpty}).count == 0 |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | weakSelf.pageViewController.reloadData() |
| | | if let currentVC = weakSelf.pageViewController.currentController as? YardDetailDateTimeVC{ |
| | | currentVC.querySiteTimes(halfName: nil, siteName: nil) |
| | | } |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setRx() { |
| | | YardDetailDateManager.shared().dates.subscribe(onNext: { [weak self] dict in |
| | | guard let weakSelf = self else { return } |
| | | guard weakSelf.siteDetailModel != nil else {return} |
| | | |
| | | if let a = dict.values.first,a.count > 0{ |
| | | var cashPrice:Double = 0 |
| | | var coinPrice:Int = 0 |
| | | |
| | | if weakSelf.btn_halfYard.isSelected{ |
| | | cashPrice = weakSelf.siteDetailModel.cashPriceOne |
| | | coinPrice = weakSelf.siteDetailModel.playPaiCoinOne |
| | | }else{ |
| | | cashPrice = weakSelf.siteDetailModel.cashPrice |
| | | coinPrice = weakSelf.siteDetailModel.playPaiCoin |
| | | private var id:Int! |
| | | private var cellW:Double! |
| | | private var selectIndex = 0 |
| | | private var weeklys = [Date]() |
| | | private var currentDate:Date?{ |
| | | didSet{ |
| | | if let d = currentDate{ |
| | | selectIndex = currentDate?.jq_nowWeekDay(identifier: .republicOfChina).index ?? 0 |
| | | weeklys = d.jq_currentWeekDates |
| | | collectionView.reloadData() |
| | | } |
| | | } |
| | | } |
| | | |
| | | let key = dict.keys.first! |
| | | weakSelf.label_price.text = String(format: "%@/%ld币", (Double(a.count) * cashPrice - (weakSelf.selectCouponModel?.favorable ?? 0)).currency(),a.count * coinPrice) |
| | | let prefix = a.first?.time.components(separatedBy: "-").first |
| | | let suffix = a.last?.time.components(separatedBy: "-").last |
| | | weakSelf.label_selectTimes.text = String(format: "%@ %@-%@",key,prefix ?? "",suffix ?? "") |
| | | weakSelf.label_totalHours.text = String(format: "(合计%.1lf小时)", Double(a.count) * 0.5) |
| | | weakSelf.queryCoupon(price: (Double(a.count) * cashPrice)) |
| | | }else{ |
| | | weakSelf.label_selectTimes.text = "未选择" |
| | | weakSelf.label_totalHours.text = "(合计0小时)" |
| | | weakSelf.label_price.text = "¥-/-币" |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | required init(id:Int){ |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.id = id |
| | | } |
| | | |
| | | web_introduce.scrollView.rx.observe(CGSize.self, "contentSize").map { (size) -> CGFloat? in |
| | | if let size = size{ |
| | | return size.height |
| | | } |
| | | return nil |
| | | }.subscribe(onNext: { [unowned self](height) in |
| | | if let height = height{ |
| | | self.cons_webHei.constant = height |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func setUI() { |
| | | view_coupon.isHidden = true |
| | | cellW = (JQ_ScreenW - 68.0) / 7.0 |
| | | btn_calendar.imagePosition = .top |
| | | btn_calendar.spacingBetweenImageAndTitle = 3 |
| | | cons_pagesHei.constant = 150 |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "预约场地" |
| | | Services.querySiteDetail(id: id).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | if let model = data.data{ |
| | | weakSelf.siteDetailModel = model |
| | | weakSelf.label_name.text = model.name |
| | | weakSelf.label_typeName.text = model.siteTypeName |
| | | weakSelf.label_address.text = String(format: "%@(%@)",model.storeName, model.storeAddress) |
| | | weakSelf.changePrice(cashPrice: model.cashPrice, coin: model.playPaiCoin, typeName: model.typeName) |
| | | weakSelf.view_yardType.isHidden = model.nextName.count == 0 |
| | | weakSelf.view_selectYardType.isHidden = model.ishalf == 2 |
| | | |
| | | collectionView.register(UINib(nibName: "CalendarItemCCell", bundle: nil), forCellWithReuseIdentifier: "_CalendarItemCCell") |
| | | collectionView.delegate = self |
| | | collectionView.dataSource = self |
| | | let c:Double = Double(model.halfName.count) |
| | | let h:Double = weakSelf.yardCellW * 0.439 |
| | | weakSelf.cons_halfYardHei.constant = ceil(c / 3.0) * h + floor(c / 3.0) * 21 |
| | | |
| | | addChild(pageViewController) |
| | | view_pages.insertSubview(pageViewController.view, at: 0) |
| | | pageViewController.didMove(toParent: self) |
| | | let c1:Double = Double(model.nextName.count) |
| | | weakSelf.cons_yardTypeHei.constant = ceil(c1 / 3.0) * h + floor(c1 / 3.0) * 21 |
| | | |
| | | pageViewController.view.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | pageViewController.delegate = self |
| | | weakSelf.collection_halfYard.reloadData() |
| | | weakSelf.collection_yardType.reloadData() |
| | | |
| | | btn_fullYard.spacingBetweenImageAndTitle = 13 |
| | | btn_halfYard.spacingBetweenImageAndTitle = 13 |
| | | weakSelf.web_introduce.loadHTMLString(model.introduce.jq_wrapHtml(), baseURL: nil) |
| | | weakSelf.view_banner.frame = CGRect(origin: .zero, size: CGSize(width: JQ_ScreenW, height: JQ_ScreenW * 0.56)) |
| | | |
| | | collection_halfYard.delegate = self |
| | | collection_halfYard.dataSource = self |
| | | collection_halfYard.register(UINib(nibName: "Common_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_Common_1_CCell") |
| | | let imgs = model.imgs.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | weakSelf.view_banner.setItems(items: items) |
| | | |
| | | collection_yardType.delegate = self |
| | | collection_yardType.dataSource = self |
| | | collection_yardType.register(UINib(nibName: "Common_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_Common_1_CCell") |
| | | weakSelf.view_yardType.isHidden = model.nextName.filter({!$0.isEmpty}).count == 0 |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | weakSelf.pageViewController.reloadData() |
| | | if let currentVC = weakSelf.pageViewController.currentController as? YardDetailDateTimeVC{ |
| | | currentVC.querySiteTimes(halfName: nil, siteName: nil) |
| | | } |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | view_halfYard.isHidden = true |
| | | view_yardType.isHidden = true |
| | | view_selectYardType.isHidden = true |
| | | override func setRx() { |
| | | YardDetailDateManager.shared().dates.subscribe(onNext: { [weak self] dict in |
| | | guard let weakSelf = self else { return } |
| | | guard weakSelf.siteDetailModel != nil else {return} |
| | | |
| | | scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 75, right: 0) |
| | | if let a = dict.values.first,a.count > 0{ |
| | | var cashPrice:Double = 0 |
| | | var coinPrice:Int = 0 |
| | | |
| | | tf_person.text = UserInfoModel.get()?.userName ?? "" |
| | | tf_phone.text = UserInfoModel.get()?.userPhone ?? "" |
| | | } |
| | | if weakSelf.btn_halfYard.isSelected{ |
| | | cashPrice = weakSelf.siteDetailModel.cashPriceOne |
| | | coinPrice = weakSelf.siteDetailModel.playPaiCoinOne |
| | | }else{ |
| | | cashPrice = weakSelf.siteDetailModel.cashPrice |
| | | coinPrice = weakSelf.siteDetailModel.playPaiCoin |
| | | } |
| | | |
| | | /// 查询优惠券 |
| | | private func queryCoupon(price:Double){ |
| | | Services.querySiteCouponList(price: price, siteId: siteDetailModel.id).subscribe(onNext: {[weak self] data in |
| | | if let models = data.data{ |
| | | self?.view_coupon.isHidden = models.count == 0 |
| | | self?.coupons = models |
| | | self?.label_conponInfo.isHidden = models.count == 0 |
| | | self?.label_conponInfo.text = String(format: "(%ld张可用)",models.count) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | let key = dict.keys.first! |
| | | weakSelf.label_price.text = String(format: "%@/%ld币", (Double(a.count) * cashPrice - (weakSelf.selectCouponModel?.favorable ?? 0)).currency(),a.count * coinPrice) |
| | | let prefix = a.first?.time.components(separatedBy: "-").first |
| | | let suffix = a.last?.time.components(separatedBy: "-").last |
| | | weakSelf.label_selectTimes.text = String(format: "%@ %@-%@",key,prefix ?? "",suffix ?? "") |
| | | weakSelf.label_totalHours.text = String(format: "(合计%.1lf小时)", Double(a.count) * 0.5) |
| | | weakSelf.queryCoupon(price: (Double(a.count) * cashPrice)) |
| | | }else{ |
| | | weakSelf.label_selectTimes.text = "未选择" |
| | | weakSelf.label_totalHours.text = "(合计0小时)" |
| | | weakSelf.label_price.text = "¥-/-币" |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | |
| | | private func changePrice(cashPrice:Double,coin:Int,typeName:String){ |
| | | let att = AttributedStringbuilder.build() |
| | | att.add(string: "\(cashPrice.currency())/", withFont: UIFont.systemFont(ofSize: 18, weight: .medium), withColor: UIColor(hexStr: "#EC0808")) |
| | | if typeName == "智慧场地"{ |
| | | att.add(string: "15分钟", withFont: UIFont.systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#535353")) |
| | | }else{ |
| | | att.add(string: "半小时", withFont: UIFont.systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#535353")) |
| | | } |
| | | label_cashPrice.attributedText = att.mutableAttributedString |
| | | web_introduce.scrollView.rx.observe(CGSize.self, "contentSize").map { (size) -> CGFloat? in |
| | | if let size = size{ |
| | | return size.height |
| | | } |
| | | return nil |
| | | }.subscribe(onNext: { [unowned self](height) in |
| | | if let height = height{ |
| | | self.cons_webHei.constant = height |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | let att1 = AttributedStringbuilder.build() |
| | | att1.add(string: "\(coin)币/", withFont: UIFont.systemFont(ofSize: 18, weight: .medium), withColor: UIColor(hexStr: "#EC0808")) |
| | | if typeName == "智慧场地"{ |
| | | att1.add(string: "15分钟", withFont: UIFont.systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#535353")) |
| | | }else{ |
| | | att1.add(string: "半小时", withFont: UIFont.systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#535353")) |
| | | } |
| | | label_coinPrice.attributedText = att1.mutableAttributedString |
| | | } |
| | | override func setUI() { |
| | | view_coupon.isHidden = true |
| | | cellW = (JQ_ScreenW - 68.0) / 7.0 |
| | | btn_calendar.imagePosition = .top |
| | | btn_calendar.spacingBetweenImageAndTitle = 3 |
| | | cons_pagesHei.constant = 150 |
| | | |
| | | @IBAction func halfYardTypeAction(_ sender: QMUIButton) { |
| | | btn_fullYard.isSelected = sender.tag == 200 |
| | | btn_halfYard.isSelected = sender.tag == 201 |
| | | selectCouponModel = nil |
| | | btn_coupon.setTitle("去选择", for: .normal) |
| | | if btn_fullYard.isSelected{ |
| | | halfIndex = nil |
| | | }else{ |
| | | halfIndex = 0 |
| | | } |
| | | collectionView.register(UINib(nibName: "CalendarItemCCell", bundle: nil), forCellWithReuseIdentifier: "_CalendarItemCCell") |
| | | collectionView.delegate = self |
| | | collectionView.dataSource = self |
| | | |
| | | collection_halfYard.reloadData() |
| | | addChild(pageViewController) |
| | | view_pages.insertSubview(pageViewController.view, at: 0) |
| | | pageViewController.didMove(toParent: self) |
| | | |
| | | UIView.animate(withDuration: 0.5) { |
| | | self.view_halfYard.isHidden = self.btn_fullYard.isSelected |
| | | self.view_halfYard.alpha = (self.view_halfYard.isHidden ? 0:1) |
| | | } |
| | | pageViewController.view.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | pageViewController.delegate = self |
| | | |
| | | if btn_halfYard.isSelected{ |
| | | changePrice(cashPrice: siteDetailModel.cashPriceOne, coin: siteDetailModel.playPaiCoinOne, typeName: siteDetailModel.typeName) |
| | | }else{ |
| | | changePrice(cashPrice: siteDetailModel.cashPrice, coin: siteDetailModel.playPaiCoin, typeName: siteDetailModel.typeName) |
| | | } |
| | | btn_fullYard.spacingBetweenImageAndTitle = 13 |
| | | btn_halfYard.spacingBetweenImageAndTitle = 13 |
| | | |
| | | //为了计算价格 【半场/全场】切换 |
| | | var val = YardDetailDateManager.shared().dates.value |
| | | val.removeAll() |
| | | YardDetailDateManager.shared().dates.accept(val) |
| | | clearAll() |
| | | } |
| | | collection_halfYard.delegate = self |
| | | collection_halfYard.dataSource = self |
| | | collection_halfYard.register(UINib(nibName: "Common_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_Common_1_CCell") |
| | | |
| | | private func clearAll(){ |
| | | if let currentVC = pageViewController.currentController as? YardDetailDateTimeVC{ |
| | | currentVC.clearALL() |
| | | var halfName:String? |
| | | var nextName:String? |
| | | collection_yardType.delegate = self |
| | | collection_yardType.dataSource = self |
| | | collection_yardType.register(UINib(nibName: "Common_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_Common_1_CCell") |
| | | |
| | | if halfIndex != nil{ |
| | | halfName = siteDetailModel.halfName[halfIndex!] |
| | | } |
| | | view_halfYard.isHidden = true |
| | | view_yardType.isHidden = true |
| | | view_selectYardType.isHidden = true |
| | | |
| | | if siteDetailModel.nextName.count > 0{ |
| | | nextName = siteDetailModel.nextName[yardIndex] |
| | | } |
| | | currentVC.querySiteTimes(halfName: halfName, siteName: nextName) |
| | | } |
| | | } |
| | | scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 75, right: 0) |
| | | |
| | | tf_person.text = UserInfoModel.get()?.userName ?? "" |
| | | tf_phone.text = UserInfoModel.get()?.userPhone ?? "" |
| | | } |
| | | |
| | | @IBAction func callPhoneAction(_ sender: UIButton) { |
| | | UIApplication.shared.open(URL(string: "tel://\(siteDetailModel.storePhone)")!) |
| | | } |
| | | /// 查询优惠券 |
| | | private func queryCoupon(price:Double){ |
| | | Services.querySiteCouponList(price: price, siteId: siteDetailModel.id).subscribe(onNext: {[weak self] data in |
| | | if let models = data.data{ |
| | | self?.view_coupon.isHidden = models.count == 0 |
| | | self?.coupons = models |
| | | self?.label_conponInfo.isHidden = models.count == 0 |
| | | self?.label_conponInfo.text = String(format: "(%ld张可用)",models.count) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func couponAction(_ sender: UIButton) { |
| | | CouponChooseView.show(coupons, defaultModel: selectCouponModel) { [weak self] m in |
| | | self?.selectCouponModel = m |
| | | let string = m == nil ? "去选择":"-\(m!.favorable.currency())" |
| | | self?.btn_coupon.setTitle(string, for: .normal) |
| | | let temp = YardDetailDateManager.shared().dates.value |
| | | YardDetailDateManager.shared().dates.accept(temp) |
| | | } |
| | | } |
| | | private func changePrice(cashPrice:Double,coin:Int,typeName:String){ |
| | | let att = AttributedStringbuilder.build() |
| | | att.add(string: "\(cashPrice.currency())/", withFont: UIFont.systemFont(ofSize: 18, weight: .medium), withColor: UIColor(hexStr: "#EC0808")) |
| | | if typeName == "智慧场地"{ |
| | | att.add(string: "15分钟", withFont: UIFont.systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#535353")) |
| | | }else{ |
| | | att.add(string: "半小时", withFont: UIFont.systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#535353")) |
| | | } |
| | | label_cashPrice.attributedText = att.mutableAttributedString |
| | | |
| | | @IBAction func calendarAction(_ sender: QMUIButton) { |
| | | CalendarPickerView.show(selectDate: currentDate) { [weak self] date in |
| | | let offsetDay = Date.jq_CalByDays(startDate: Date().jq_clearTimes(), endDate: date) |
| | | self?.pageViewController.scroll(toPage: offsetDay, animation: true) |
| | | self?.collectionView.reloadData() |
| | | } |
| | | } |
| | | let att1 = AttributedStringbuilder.build() |
| | | att1.add(string: "\(coin)币/", withFont: UIFont.systemFont(ofSize: 18, weight: .medium), withColor: UIColor(hexStr: "#EC0808")) |
| | | if typeName == "智慧场地"{ |
| | | att1.add(string: "15分钟", withFont: UIFont.systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#535353")) |
| | | }else{ |
| | | att1.add(string: "半小时", withFont: UIFont.systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#535353")) |
| | | } |
| | | label_coinPrice.attributedText = att1.mutableAttributedString |
| | | } |
| | | |
| | | @IBAction func bookingAction(_ sender: UIButton) { |
| | | @IBAction func halfYardTypeAction(_ sender: QMUIButton) { |
| | | btn_fullYard.isSelected = sender.tag == 200 |
| | | btn_halfYard.isSelected = sender.tag == 201 |
| | | selectCouponModel = nil |
| | | btn_coupon.setTitle("去选择", for: .normal) |
| | | if btn_fullYard.isSelected{ |
| | | halfIndex = nil |
| | | }else{ |
| | | halfIndex = 0 |
| | | } |
| | | |
| | | guard !YardDetailDateManager.shared().dates.value.isEmpty else {alertError(msg: "请选择预约时间");return} |
| | | guard YardDetailDateManager.shared().dates.value.values.first!.count != 0 else {alertError(msg: "请选择预约时间");return} |
| | | guard !tf_person.isEmpty else {alertError(msg: "请输入预约人");tf_person.becomeFirstResponder();return} |
| | | guard !tf_phone.isEmpty else {alertError(msg: "请输入联系方式");tf_phone.becomeFirstResponder();return} |
| | | guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的联系方式");return} |
| | | if btn_halfYard.isSelected && halfIndex == nil{ |
| | | alert(msg: "请选择半场");return |
| | | } |
| | | collection_halfYard.reloadData() |
| | | |
| | | var halfName:String? |
| | | var isHalf:Int = 2 |
| | | var nextName:String? |
| | | UIView.animate(withDuration: 0.5) { |
| | | self.view_halfYard.isHidden = self.btn_fullYard.isSelected |
| | | self.view_halfYard.alpha = (self.view_halfYard.isHidden ? 0:1) |
| | | } |
| | | |
| | | if halfIndex != nil{ |
| | | halfName = siteDetailModel.halfName[halfIndex!] |
| | | } |
| | | if btn_halfYard.isSelected{ |
| | | changePrice(cashPrice: siteDetailModel.cashPriceOne, coin: siteDetailModel.playPaiCoinOne, typeName: siteDetailModel.typeName) |
| | | }else{ |
| | | changePrice(cashPrice: siteDetailModel.cashPrice, coin: siteDetailModel.playPaiCoin, typeName: siteDetailModel.typeName) |
| | | } |
| | | |
| | | if siteDetailModel.ishalf == 1 && btn_halfYard.isSelected{ |
| | | isHalf = 1 |
| | | } |
| | | //为了计算价格 【半场/全场】切换 |
| | | var val = YardDetailDateManager.shared().dates.value |
| | | val.removeAll() |
| | | YardDetailDateManager.shared().dates.accept(val) |
| | | clearAll() |
| | | } |
| | | |
| | | if siteDetailModel.nextName.count > 0{ |
| | | nextName = siteDetailModel.nextName[yardIndex] |
| | | } |
| | | private func clearAll(){ |
| | | if let currentVC = pageViewController.currentController as? YardDetailDateTimeVC{ |
| | | currentVC.clearALL() |
| | | var halfName:String? |
| | | var nextName:String? |
| | | |
| | | if halfIndex != nil{ |
| | | halfName = siteDetailModel.halfName[halfIndex!] |
| | | } |
| | | |
| | | StoresInfoView.show(siteDetailModel) { [weak self] status in |
| | | guard let weakSelf = self else { return } |
| | | if status{ |
| | | let a = YardDetailDateManager.shared().dates.value.values.first! |
| | | let cashPrice = weakSelf.btn_halfYard.isSelected ? weakSelf.siteDetailModel.cashPriceOne:weakSelf.siteDetailModel.cashPrice |
| | | let coinPrice = weakSelf.btn_halfYard.isSelected ? weakSelf.siteDetailModel.playPaiCoinOne : weakSelf.siteDetailModel.playPaiCoin |
| | | let price = Double(a.count) * cashPrice - (weakSelf.selectCouponModel?.favorable ?? 0) |
| | | let coin = a.count * coinPrice |
| | | |
| | | var datetimes = [String]() |
| | | let key = YardDetailDateManager.shared().dates.value.keys.first! |
| | | for value in YardDetailDateManager.shared().dates.value.values.first!{ |
| | | datetimes.append(String(format: "%@ %@", key,value.time)) |
| | | if siteDetailModel.nextName.count > 0{ |
| | | nextName = siteDetailModel.nextName[yardIndex] |
| | | } |
| | | currentVC.querySiteTimes(halfName: halfName, siteName: nextName) |
| | | } |
| | | } |
| | | |
| | | |
| | | PaymentView.show(enumType: .yard, money: (ali:price,wx:price,coin:coin,course:nil,integral:nil)) { [weak self] type in |
| | | guard let weakSelf = self else { return } |
| | | Services.reservationSite(booker: weakSelf.tf_person.text!, couponId: weakSelf.selectCouponModel?.id, id: weakSelf.siteDetailModel.id, payType: type, phone: weakSelf.tf_phone.text!, times: datetimes.joined(separator: ";"),halfName:halfName,isHalf:isHalf,nextName:nextName).subscribe(onNext: { data in |
| | | if let m = data.data{ |
| | | weakSelf.selectCouponModel = nil |
| | | weakSelf.btn_coupon.setTitle("去选择", for: .normal) |
| | | weakSelf.queryCoupon(price: Double(a.count) * cashPrice) |
| | | switch type { |
| | | case .aliPay: |
| | | YYPaymentManager.shared.sendPaymentRequest(YYAlipayRequest(orderString: m.orderString)) { result in |
| | | switch result { |
| | | case .success: |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = YardBookingDetailVC(siteBookingId: m.siteBooking) |
| | | weakSelf.push(vc: vc) |
| | | case .cancel: |
| | | alert(msg: "交易取消") |
| | | let vc = YardBookingListVC(page: 5) |
| | | weakSelf.push(vc: vc) |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | case .failure(_): |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = PaymentResultVC(result: .fail("交易失败",0), objType: .yard,handleVC: nil) |
| | | weakSelf.push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | case .wechat,.integral:break |
| | | case .coin,.free: |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = YardBookingDetailVC(siteBookingId: m.siteBooking) |
| | | weakSelf.push(vc: vc) |
| | | case .courseNum:break |
| | | } |
| | | } |
| | | },onError: { error in |
| | | if let er = error as? NetworkRequest.NetRequestError{ |
| | | switch er { |
| | | case .Other(let code,let string): |
| | | // NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .yard){[weak self] in |
| | | let vc1 = YardBookingListVC(page: 5) |
| | | self?.push(vc: vc1) |
| | | } |
| | | self?.push(vc: vc) |
| | | default: |
| | | // NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .yard){[weak self] in |
| | | let vc1 = YardBookingListVC(page: 5) |
| | | self?.push(vc: vc1) |
| | | } |
| | | self?.push(vc: vc) |
| | | } |
| | | } |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | @IBAction func callPhoneAction(_ sender: UIButton) { |
| | | UIApplication.shared.open(URL(string: "tel://\(siteDetailModel.storePhone)")!) |
| | | } |
| | | }else{ |
| | | weakSelf.navigationController?.popToRootViewController(animated: true) |
| | | NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) |
| | | } |
| | | } |
| | | } |
| | | |
| | | private func showPaymentView(){ |
| | | @IBAction func couponAction(_ sender: UIButton) { |
| | | CouponChooseView.show(coupons, defaultModel: selectCouponModel) { [weak self] m in |
| | | self?.selectCouponModel = m |
| | | let string = m == nil ? "去选择":"-\(m!.favorable.currency())" |
| | | self?.btn_coupon.setTitle(string, for: .normal) |
| | | let temp = YardDetailDateManager.shared().dates.value |
| | | YardDetailDateManager.shared().dates.accept(temp) |
| | | } |
| | | } |
| | | |
| | | } |
| | | @IBAction func calendarAction(_ sender: QMUIButton) { |
| | | CalendarPickerView.show(selectDate: currentDate) { [weak self] date in |
| | | let offsetDay = Date.jq_CalByDays(startDate: Date().jq_clearTimes(), endDate: date) |
| | | self?.pageViewController.scroll(toPage: offsetDay, animation: true) |
| | | self?.collectionView.reloadData() |
| | | } |
| | | } |
| | | |
| | | deinit{ |
| | | YardDetailDateManager.destroy() |
| | | } |
| | | @IBAction func bookingAction(_ sender: UIButton) { |
| | | |
| | | guard !YardDetailDateManager.shared().dates.value.isEmpty else {alertError(msg: "请选择预约时间");return} |
| | | guard YardDetailDateManager.shared().dates.value.values.first!.count != 0 else {alertError(msg: "请选择预约时间");return} |
| | | guard !tf_person.isEmpty else {alertError(msg: "请输入预约人");tf_person.becomeFirstResponder();return} |
| | | guard !tf_phone.isEmpty else {alertError(msg: "请输入联系方式");tf_phone.becomeFirstResponder();return} |
| | | guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的联系方式");return} |
| | | if btn_halfYard.isSelected && halfIndex == nil{ |
| | | alert(msg: "请选择半场");return |
| | | } |
| | | |
| | | var halfName:String? |
| | | var isHalf:Int = 2 |
| | | var nextName:String? |
| | | |
| | | if halfIndex != nil{ |
| | | halfName = siteDetailModel.halfName[halfIndex!] |
| | | } |
| | | |
| | | if siteDetailModel.ishalf == 1 && btn_halfYard.isSelected{ |
| | | isHalf = 1 |
| | | } |
| | | |
| | | if siteDetailModel.nextName.count > 0{ |
| | | nextName = siteDetailModel.nextName[yardIndex] |
| | | } |
| | | |
| | | |
| | | StoresInfoView.show(siteDetailModel) { [weak self] status in |
| | | guard let weakSelf = self else { return } |
| | | if status{ |
| | | let a = YardDetailDateManager.shared().dates.value.values.first! |
| | | let cashPrice = weakSelf.btn_halfYard.isSelected ? weakSelf.siteDetailModel.cashPriceOne:weakSelf.siteDetailModel.cashPrice |
| | | let coinPrice = weakSelf.btn_halfYard.isSelected ? weakSelf.siteDetailModel.playPaiCoinOne : weakSelf.siteDetailModel.playPaiCoin |
| | | let price = Double(a.count) * cashPrice - (weakSelf.selectCouponModel?.favorable ?? 0) |
| | | let coin = a.count * coinPrice |
| | | |
| | | var datetimes = [String]() |
| | | let key = YardDetailDateManager.shared().dates.value.keys.first! |
| | | for value in YardDetailDateManager.shared().dates.value.values.first!{ |
| | | datetimes.append(String(format: "%@ %@", key,value.time)) |
| | | } |
| | | |
| | | |
| | | PaymentView.show(enumType: .yard, money: (ali:price,wx:price,coin:coin,course:nil,integral:nil)) { [weak self] type in |
| | | guard let weakSelf = self else { return } |
| | | Services.reservationSite(booker: weakSelf.tf_person.text!, couponId: weakSelf.selectCouponModel?.id, id: weakSelf.siteDetailModel.id, payType: type, phone: weakSelf.tf_phone.text!, times: datetimes.joined(separator: ";"),halfName:halfName,isHalf:isHalf,nextName:nextName).subscribe(onNext: { data in |
| | | if let m = data.data{ |
| | | weakSelf.selectCouponModel = nil |
| | | weakSelf.btn_coupon.setTitle("去选择", for: .normal) |
| | | weakSelf.queryCoupon(price: Double(a.count) * cashPrice) |
| | | switch type { |
| | | case .aliPay: |
| | | YYPaymentManager.shared.sendPaymentRequest(YYAlipayRequest(orderString: m.orderString)) { result in |
| | | switch result { |
| | | case .success: |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = YardBookingDetailVC(siteBookingId: m.siteBooking) |
| | | weakSelf.push(vc: vc) |
| | | case .cancel: |
| | | alert(msg: "交易取消") |
| | | let vc = YardBookingListVC(page: 5) |
| | | weakSelf.push(vc: vc) |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | case .failure(_): |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = PaymentResultVC(result: .fail("交易失败",0), objType: .yard,handleVC: nil) |
| | | weakSelf.push(vc: vc) |
| | | } |
| | | } |
| | | |
| | | case .wechat,.integral:break |
| | | case .coin,.free: |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = YardBookingDetailVC(siteBookingId: m.siteBooking) |
| | | weakSelf.push(vc: vc) |
| | | case .courseNum:break |
| | | } |
| | | } |
| | | },onError: { error in |
| | | if let er = error as? NetworkRequest.NetRequestError{ |
| | | switch er { |
| | | case .Other(let code,let string): |
| | | // NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .yard){[weak self] in |
| | | let vc1 = YardBookingListVC(page: 5) |
| | | self?.push(vc: vc1) |
| | | } |
| | | self?.push(vc: vc) |
| | | default: |
| | | // NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .yard){[weak self] in |
| | | let vc1 = YardBookingListVC(page: 5) |
| | | self?.push(vc: vc1) |
| | | } |
| | | self?.push(vc: vc) |
| | | } |
| | | } |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | }else{ |
| | | weakSelf.navigationController?.popToRootViewController(animated: true) |
| | | NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) |
| | | } |
| | | } |
| | | } |
| | | |
| | | private func showPaymentView(){ |
| | | |
| | | } |
| | | |
| | | deinit{ |
| | | YardDetailDateManager.destroy() |
| | | } |
| | | } |
| | | |
| | | extension YardDetailVC:FFPageViewControllerDelegate{ |
| | | |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | if let vc = pageViewController.currentController as? YardDetailDateTimeVC{ |
| | | currentDate = vc.date |
| | | label_datetime.text = vc.date.jq_format("yyyy年MM月dd日") |
| | | cons_pagesHei.constant = vc.innerHeight |
| | | UIView.animate(withDuration: 0.5) { |
| | | self.view.layoutIfNeeded() |
| | | } |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | if let vc = pageViewController.currentController as? YardDetailDateTimeVC{ |
| | | currentDate = vc.date |
| | | label_datetime.text = vc.date.jq_format("yyyy年MM月dd日") |
| | | cons_pagesHei.constant = vc.innerHeight |
| | | UIView.animate(withDuration: 0.5) { |
| | | self.view.layoutIfNeeded() |
| | | } |
| | | |
| | | var halfName:String? |
| | | var nextName:String? |
| | | if halfIndex != nil{ |
| | | halfName = siteDetailModel.halfName[halfIndex!] |
| | | } |
| | | var halfName:String? |
| | | var nextName:String? |
| | | if halfIndex != nil{ |
| | | halfName = siteDetailModel.halfName[halfIndex!] |
| | | } |
| | | |
| | | if siteDetailModel.nextName.count > 0{ |
| | | nextName = siteDetailModel.nextName[yardIndex] |
| | | } |
| | | vc.querySiteTimes(halfName: halfName, siteName: nextName) |
| | | } |
| | | } |
| | | |
| | | func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { |
| | | guard siteDetailModel != nil else {return 0} |
| | | return 11 |
| | | } |
| | | |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | let date = Date().jq_add(day: page) |
| | | var halfName:String? |
| | | var nextName:String? |
| | | |
| | | if halfIndex != nil{ |
| | | halfName = siteDetailModel.halfName[halfIndex!] |
| | | } |
| | | |
| | | if (siteDetailModel?.nextName.count ?? 0) > 0{ |
| | | nextName = siteDetailModel.nextName[yardIndex] |
| | | } |
| | | |
| | | let vc = YardDetailDateTimeVC(id:id,date: date!,currentPage: page,halfName: halfName,siteName: nextName) |
| | | vc.updateInnerHeight { [weak self] (height, currentPage) in |
| | | if currentPage == self?.pageViewController.currentPage{ |
| | | self?.cons_pagesHei.constant = height |
| | | UIView.animate(withDuration: 0.3) { |
| | | self?.view.layoutIfNeeded() |
| | | if siteDetailModel.nextName.count > 0{ |
| | | nextName = siteDetailModel.nextName[yardIndex] |
| | | } |
| | | vc.querySiteTimes(halfName: halfName, siteName: nextName) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return vc |
| | | } |
| | | |
| | | func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { |
| | | guard siteDetailModel != nil else {return 0} |
| | | return 11 |
| | | } |
| | | |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | let date = Date().jq_add(day: page) |
| | | var halfName:String? |
| | | var nextName:String? |
| | | |
| | | if halfIndex != nil{ |
| | | halfName = siteDetailModel.halfName[halfIndex!] |
| | | } |
| | | |
| | | if (siteDetailModel?.nextName.count ?? 0) > 0{ |
| | | nextName = siteDetailModel.nextName[yardIndex] |
| | | } |
| | | |
| | | let vc = YardDetailDateTimeVC(id:id,date: date!,currentPage: page,halfName: halfName,siteName: nextName) |
| | | vc.updateInnerHeight { [weak self] (height, currentPage) in |
| | | if currentPage == self?.pageViewController.currentPage{ |
| | | self?.cons_pagesHei.constant = height |
| | | UIView.animate(withDuration: 0.3) { |
| | | self?.view.layoutIfNeeded() |
| | | } |
| | | } |
| | | } |
| | | return vc |
| | | } |
| | | } |
| | | |
| | | |
| | | extension YardDetailVC:UICollectionViewDataSource{ |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | |
| | | if self.collectionView == collectionView{ |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_CalendarItemCCell", for: indexPath) as! CalendarItemCCell |
| | | let date = weeklys[indexPath.row] |
| | | cell.label_weekly.text = weeklys[indexPath.row].jq_nowWeekDay(identifier: .republicOfChina).weekName |
| | | cell.label_date.text = weeklys[indexPath.row].jq_format("MM.dd") |
| | | if self.collectionView == collectionView{ |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_CalendarItemCCell", for: indexPath) as! CalendarItemCCell |
| | | let date = weeklys[indexPath.row] |
| | | cell.label_weekly.text = weeklys[indexPath.row].jq_nowWeekDay(identifier: .republicOfChina).weekName |
| | | cell.label_date.text = weeklys[indexPath.row].jq_format("MM.dd") |
| | | |
| | | if date.jq_nowDay() == currentDate?.jq_nowDay(){ |
| | | cell.label_weekly.textColor = .white |
| | | cell.label_date.textColor = .white |
| | | cell.view_bg.backgroundColor = Def_ThemeColor |
| | | }else{ |
| | | cell.label_weekly.textColor = .black.withAlphaComponent(0.6) |
| | | cell.label_date.textColor = .black.withAlphaComponent(0.6) |
| | | cell.view_bg.backgroundColor = .clear |
| | | } |
| | | return cell |
| | | } |
| | | if date.jq_nowDay() == currentDate?.jq_nowDay(){ |
| | | cell.label_weekly.textColor = .white |
| | | cell.label_date.textColor = .white |
| | | cell.view_bg.backgroundColor = Def_ThemeColor |
| | | }else{ |
| | | cell.label_weekly.textColor = .black.withAlphaComponent(0.6) |
| | | cell.label_date.textColor = .black.withAlphaComponent(0.6) |
| | | cell.view_bg.backgroundColor = .clear |
| | | } |
| | | return cell |
| | | } |
| | | |
| | | if collection_yardType == collectionView{ |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_Common_1_CCell", for: indexPath) as! Common_1_CCell |
| | | cell.label_content.text = siteDetailModel.nextName[indexPath.row] |
| | | cell.label_content.backgroundColor = yardIndex == indexPath.row ? Def_ThemeColor : .white |
| | | cell.label_content.textColor = yardIndex == indexPath.row ? .white : UIColor(hexStr: "#898989") |
| | | cell.label_content.borderWidth = yardIndex == indexPath.row ? 0:1 |
| | | return cell |
| | | } |
| | | if collection_yardType == collectionView{ |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_Common_1_CCell", for: indexPath) as! Common_1_CCell |
| | | cell.label_content.text = siteDetailModel.nextName[indexPath.row] |
| | | cell.label_content.backgroundColor = yardIndex == indexPath.row ? Def_ThemeColor : .white |
| | | cell.label_content.textColor = yardIndex == indexPath.row ? .white : UIColor(hexStr: "#898989") |
| | | cell.label_content.borderWidth = yardIndex == indexPath.row ? 0:1 |
| | | return cell |
| | | } |
| | | |
| | | //选择半场: |
| | | if collection_halfYard == collectionView{ |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_Common_1_CCell", for: indexPath) as! Common_1_CCell |
| | | cell.label_content.text = siteDetailModel.halfName[indexPath.row] |
| | | cell.label_content.backgroundColor = halfIndex == indexPath.row ? Def_ThemeColor : .white |
| | | cell.label_content.textColor = halfIndex == indexPath.row ? .white : UIColor(hexStr: "#898989") |
| | | cell.label_content.borderWidth = halfIndex == indexPath.row ? 0:1 |
| | | return cell |
| | | } |
| | | return UICollectionViewCell() |
| | | } |
| | | //选择半场: |
| | | if collection_halfYard == collectionView{ |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_Common_1_CCell", for: indexPath) as! Common_1_CCell |
| | | cell.label_content.text = siteDetailModel.halfName[indexPath.row] |
| | | cell.label_content.backgroundColor = halfIndex == indexPath.row ? Def_ThemeColor : .white |
| | | cell.label_content.textColor = halfIndex == indexPath.row ? .white : UIColor(hexStr: "#898989") |
| | | cell.label_content.borderWidth = halfIndex == indexPath.row ? 0:1 |
| | | return cell |
| | | } |
| | | return UICollectionViewCell() |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | |
| | | if self.collectionView == collectionView{ |
| | | return weeklys.count |
| | | } |
| | | if self.collectionView == collectionView{ |
| | | return weeklys.count |
| | | } |
| | | |
| | | guard siteDetailModel != nil else { |
| | | return 0 |
| | | } |
| | | guard siteDetailModel != nil else { |
| | | return 0 |
| | | } |
| | | |
| | | if collection_yardType == collectionView{ |
| | | return siteDetailModel.nextName.count |
| | | } |
| | | if collection_yardType == collectionView{ |
| | | return siteDetailModel.nextName.count |
| | | } |
| | | |
| | | if collection_halfYard == collectionView{ |
| | | return siteDetailModel.halfName.count |
| | | } |
| | | if collection_halfYard == collectionView{ |
| | | return siteDetailModel.halfName.count |
| | | } |
| | | |
| | | return 0 |
| | | } |
| | | return 0 |
| | | } |
| | | } |
| | | |
| | | extension YardDetailVC:UICollectionViewDelegate{ |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | |
| | | if self.collectionView == collectionView{ |
| | | let date = weeklys[indexPath.row] |
| | | let offsetDay = Date.jq_CalByDays(startDate: Date().jq_clearTimes(), endDate: date) |
| | | if (date.jq_isToday() || date.isInFuture) && offsetDay <= 10{ |
| | | currentDate = weeklys[indexPath.row] |
| | | collectionView.reloadData() |
| | | pageViewController.scroll(toPage: offsetDay, animation: true) |
| | | } |
| | | } |
| | | if self.collectionView == collectionView{ |
| | | let date = weeklys[indexPath.row] |
| | | let offsetDay = Date.jq_CalByDays(startDate: Date().jq_clearTimes(), endDate: date) |
| | | if (date.jq_isToday() || date.isInFuture) && offsetDay <= 10{ |
| | | currentDate = weeklys[indexPath.row] |
| | | collectionView.reloadData() |
| | | pageViewController.scroll(toPage: offsetDay, animation: true) |
| | | } |
| | | } |
| | | |
| | | if self.collection_yardType == collectionView{ |
| | | yardIndex = indexPath.row |
| | | collectionView.reloadData() |
| | | clearAll() |
| | | } |
| | | if self.collection_yardType == collectionView{ |
| | | yardIndex = indexPath.row |
| | | collectionView.reloadData() |
| | | clearAll() |
| | | } |
| | | |
| | | if self.collection_halfYard == collectionView{ |
| | | halfIndex = indexPath.row |
| | | collectionView.reloadData() |
| | | clearAll() |
| | | } |
| | | } |
| | | if self.collection_halfYard == collectionView{ |
| | | halfIndex = indexPath.row |
| | | collectionView.reloadData() |
| | | clearAll() |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension YardDetailVC:UICollectionViewDelegateFlowLayout{ |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { |
| | | |
| | | if self.collectionView == collectionView{ |
| | | return CGSize(width: cellW, height: 50) |
| | | } |
| | | if self.collectionView == collectionView{ |
| | | return CGSize(width: cellW, height: 50) |
| | | } |
| | | |
| | | return CGSize(width: yardCellW, height: yardCellW * 0.439) |
| | | } |
| | | return CGSize(width: yardCellW, height: yardCellW * 0.439) |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { |
| | | if self.collectionView == collectionView{ |
| | | return 0 |
| | | } |
| | | return 21 |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { |
| | | if self.collectionView == collectionView{ |
| | | return 0 |
| | | } |
| | | return 21 |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { |
| | | if self.collectionView == collectionView{ |
| | | return 0 |
| | | } |
| | | return 21 |
| | | } |
| | | func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { |
| | | if self.collectionView == collectionView{ |
| | | return 0 |
| | | } |
| | | return 21 |
| | | } |
| | | } |
| | |
| | | import JQTools |
| | | |
| | | class SceneDelegate: UIResponder, UIWindowSceneDelegate,WXApiDelegate { |
| | | |
| | | var window: UIWindow? |
| | | |
| | | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { |
| | | guard let windowScene = (scene as? UIWindowScene) else { return } |
| | | window = UIWindow(windowScene: windowScene) |
| | | window?.frame = windowScene.coordinateSpace.bounds |
| | | |
| | | var window: UIWindow? |
| | | |
| | | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { |
| | | guard let windowScene = (scene as? UIWindowScene) else { return } |
| | | window = UIWindow(windowScene: windowScene) |
| | | window?.frame = windowScene.coordinateSpace.bounds |
| | | |
| | | |
| | | if UserViewModel.getToken() != nil{ |
| | | app.registerAndLoginSuccess() |
| | | }else{ |
| | | let loginNav = LoginNav(rootViewController: LoginVC()) |
| | | window?.rootViewController = loginNav |
| | | window?.makeKeyAndVisible() |
| | | } |
| | | if UserViewModel.getToken() != nil{ |
| | | app.registerAndLoginSuccess() |
| | | }else{ |
| | | let loginNav = LoginNav(rootViewController: LoginVC()) |
| | | window?.rootViewController = loginNav |
| | | window?.makeKeyAndVisible() |
| | | } |
| | | |
| | | SVProgressHUD.setContainerView(window) |
| | | SVProgressHUD.setDefaultStyle(.dark) |
| | | SVProgressHUD.setDefaultMaskType(.custom) //禁止交互 |
| | | SVProgressHUD.setMinimumDismissTimeInterval(1.5) |
| | | SVProgressHUD.setMaximumDismissTimeInterval(30.0) |
| | | |
| | | if #available(iOS 13.0, *) { |
| | | window?.overrideUserInterfaceStyle = .light |
| | | } |
| | | |
| | | } |
| | | SVProgressHUD.setContainerView(window) |
| | | SVProgressHUD.setDefaultStyle(.dark) |
| | | SVProgressHUD.setDefaultMaskType(.custom) //禁止交互 |
| | | SVProgressHUD.setMinimumDismissTimeInterval(1.5) |
| | | SVProgressHUD.setMaximumDismissTimeInterval(30.0) |
| | | |
| | | func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { |
| | | print("---->4") |
| | | YYPaymentManager.shared.handleApplication(userActivity) |
| | | } |
| | | if #available(iOS 13.0, *) { |
| | | window?.overrideUserInterfaceStyle = .light |
| | | } |
| | | |
| | | func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { |
| | | if let code = URLContexts.first?.url.jq_params?["code"]{ |
| | | DispatchQueue.main.async { |
| | | hiddenHUD() |
| | | let resp = SendAuthResp() |
| | | resp.code = code |
| | | WeChatTools.getAccessToken(resp) { model in |
| | | if let m = model{ |
| | | WeChatTools.getUserInfo(access_token: m.access_token, openId: m.openid) { userInfoModel in |
| | | if let u = userInfoModel{ |
| | | Services.wxLogin(openId: u.openid, nickname: u.nickname, headimgurl: u.headimgurl, sex: u.sex).subscribe(onNext: { data in |
| | | if let m = data.data{ |
| | | if m.isBind == 0{ |
| | | let vc = BindPhoneVC(wxUserInfoModel: u,token: m.token) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else{ |
| | | UserViewModel.saveToken(m.token) |
| | | app.registerAndLoginSuccess() |
| | | } |
| | | } |
| | | }) { error in |
| | | alertError(msg: error.localizedDescription) |
| | | }.disposed(by: JQ_disposeBag) |
| | | }else{ |
| | | alertError(msg: "获取信息失败") |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if ((URLContexts.first?.url.absoluteString.contains("weparklife://safepay")) != nil){ |
| | | let url = URLContexts.first!.url |
| | | YYPaymentManager.shared.handleApplication(UIApplication.shared, open: url, options: [:]) |
| | | } |
| | | func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { |
| | | print("---->4") |
| | | YYPaymentManager.shared.handleApplication(userActivity) |
| | | } |
| | | |
| | | if URLContexts.first!.url.host == "resendContextReqByScheme"{ |
| | | WXApi.handleOpen(URLContexts.first!.url, delegate: YYPaymentManager.shared) |
| | | } |
| | | } |
| | | func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { |
| | | if let code = URLContexts.first?.url.jq_params?["code"]{ |
| | | DispatchQueue.main.async { |
| | | hiddenHUD() |
| | | let resp = SendAuthResp() |
| | | resp.code = code |
| | | WeChatTools.getAccessToken(resp) { model in |
| | | if let m = model{ |
| | | WeChatTools.getUserInfo(access_token: m.access_token, openId: m.openid) { userInfoModel in |
| | | if let u = userInfoModel{ |
| | | Services.wxLogin(openId: u.openid, nickname: u.nickname, headimgurl: u.headimgurl, sex: u.sex).subscribe(onNext: { data in |
| | | if let m = data.data{ |
| | | if m.isBind == 0{ |
| | | let vc = BindPhoneVC(wxUserInfoModel: u,token: m.token) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | }else{ |
| | | UserViewModel.saveToken(m.token) |
| | | app.registerAndLoginSuccess() |
| | | } |
| | | } |
| | | }) { error in |
| | | alertError(msg: error.localizedDescription) |
| | | }.disposed(by: JQ_disposeBag) |
| | | }else{ |
| | | alertError(msg: "获取信息失败") |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | func sceneDidDisconnect(_ scene: UIScene) { |
| | | |
| | | } |
| | | |
| | | func sceneDidBecomeActive(_ scene: UIScene) { |
| | | if ((URLContexts.first?.url.absoluteString.contains("weparklife://safepay")) != nil){ |
| | | let url = URLContexts.first!.url |
| | | YYPaymentManager.shared.handleApplication(UIApplication.shared, open: url, options: [:]) |
| | | } |
| | | |
| | | } |
| | | |
| | | func sceneWillResignActive(_ scene: UIScene) { |
| | | |
| | | } |
| | | |
| | | func sceneWillEnterForeground(_ scene: UIScene) { |
| | | |
| | | } |
| | | |
| | | func sceneDidEnterBackground(_ scene: UIScene) { |
| | | |
| | | } |
| | | if URLContexts.first!.url.host == "resendContextReqByScheme"{ |
| | | WXApi.handleOpen(URLContexts.first!.url, delegate: YYPaymentManager.shared) |
| | | } |
| | | } |
| | | |
| | | func sceneDidDisconnect(_ scene: UIScene) { |
| | | |
| | | } |
| | | |
| | | func sceneDidBecomeActive(_ scene: UIScene) { |
| | | |
| | | } |
| | | |
| | | func sceneWillResignActive(_ scene: UIScene) { |
| | | |
| | | } |
| | | |
| | | func sceneWillEnterForeground(_ scene: UIScene) { |
| | | |
| | | } |
| | | |
| | | func sceneDidEnterBackground(_ scene: UIScene) { |
| | | |
| | | } |
| | | } |
| | | |