fix
杨锴
2025-04-16 f646fbebad928833d15546a36e37768d00fe6173
fix
31个文件已修改
12个文件已删除
56个文件已添加
4163 ■■■■■ 已修改文件
WanPai.xcodeproj/project.pbxproj 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/AppDelegate.swift 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/bg_card_1.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/bg_card_1.imageset/Group@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/bg_card_1.imageset/Group@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_add_large_1.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_add_large_1.imageset/btn_add_large_1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_add_large_1.imageset/btn_add_large_1@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_delete_2.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_delete_2.imageset/btn_delete_2@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_delete_2.imageset/btn_delete_2@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_s_setting.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_s_setting.imageset/btn_s_setting@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Btns/btn_s_setting.imageset/btn_s_setting@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/CardCenter/Contents.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/CardCenter/icon_card_item.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/CardCenter/icon_card_item.imageset/icon_card_item@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/CardCenter/icon_card_item.imageset/icon_card_item@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/CardCenter/icon_card_mask.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/CardCenter/icon_card_mask.imageset/icon_card_mask@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/CardCenter/icon_card_mask.imageset/icon_card_mask@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/me_card.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/me_card.imageset/me_card@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/me_card.imageset/me_card@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/user_default.imageset/Contents.json 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/user_default.imageset/user_default@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/Combined Shape@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/Combined Shape@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/Contents.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/tabbar_course@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/tabbar_course@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/Combined Shape@2x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/Combined Shape@3x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/Contents.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/tabbar_course_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/tabbar_course_s@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/Contents.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/tabbar_profile@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/tabbar_profile@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/我的@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/我的@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/Contents.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/tabbar_profile_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/tabbar_profile_s@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/我的@2x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/我的@3x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/Contents.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/H5-个人中心-优惠卡券@2x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/H5-个人中心-优惠卡券@3x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/tabbar_welfare@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/tabbar_welfare@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/Contents.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/H5-个人中心-优惠卡券@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/H5-个人中心-优惠卡券@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/tabbar_welfare_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/tabbar_welfare_s@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Base/BaseNav.swift 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Common/VC/CommonWebVC.swift 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Common/View/PaymentView.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Config/Enums.swift 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Model/CommonModels.swift 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Network/NetworkRequest.swift 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Network/Services.swift 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Activity/VC/ActivityListVC.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Activity/VC/ActivitySignupDetailVC.swift 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/CardCenter/TCell/CardCenterTCell.swift 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/CardCenter/TCell/CardCenterTCell.xib 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/CardCenter/VC/CardCenterAddUserVC.swift 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/CardCenter/VC/CardCenterAddUserVC.xib 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/CardCenter/VC/CardCenterDetailVC.swift 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/CardCenter/VC/CardCenterDetailVC.xib 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/CardCenter/VC/CardCenterVC.swift 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/CardCenter/View/CardCenterSheetView.swift 310 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/CardCenter/View/CardCenterSheetView.xib 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/AddStudentVC.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/CourseVC.swift 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/CCell/HomeCCell.xib 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/Model/HomeModel.swift 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/VC/HomeVC.swift 137 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Login/VC/LoginVC.swift 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Login/VC/LoginVC.xib 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/TCell/StudentInfo_2_1_TCell.swift 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/TCell/StudentInfo_2_2_TCell.swift 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/TCell/StudentInfo_2_2_TCell.xib 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/VC/PaymentResultVC.swift 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/View/StudentChoose3View.swift 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/View/StudentChoose3View.xib 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/CCell/SearchBannerCCell.swift 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/CCell/SearchBannerCCell.xib 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/TCell/MyCardTCell.swift 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/TCell/MyCardTCell.xib 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/TCell/StudentInfo_6_TCell.swift 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/TCell/StudentInfo_6_TCell.xib 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/MyCardItemVC.swift 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/MyCardItemVC.xib 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/MyCardListVC.swift 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/SearchVC.swift 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/SearchVC.xib 421 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/ViewModel/RefreshModel.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai.xcodeproj/project.pbxproj
@@ -18,6 +18,8 @@
        1304B85D2A4EB0F8000D4F2E /* SearchBannerCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1304B85B2A4EB0F8000D4F2E /* SearchBannerCCell.xib */; };
        1304B8602A4EB59F000D4F2E /* SearchStoreListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1304B85E2A4EB59F000D4F2E /* SearchStoreListVC.swift */; };
        1304B8612A4EB59F000D4F2E /* SearchStoreListVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1304B85F2A4EB59F000D4F2E /* SearchStoreListVC.xib */; };
        130A59302D9406A40094D92D /* CardCenterSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130A592F2D9406A40094D92D /* CardCenterSheetView.swift */; };
        130A59322D9406AB0094D92D /* CardCenterSheetView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130A59312D9406AB0094D92D /* CardCenterSheetView.xib */; };
        130CE4532A4823AC00394384 /* StudentMedalCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130CE4512A4823AC00394384 /* StudentMedalCCell.swift */; };
        130CE4542A4823AC00394384 /* StudentMedalCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130CE4522A4823AC00394384 /* StudentMedalCCell.xib */; };
        130CE4572A4925AB00394384 /* StudentVideoCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130CE4552A4925AB00394384 /* StudentVideoCCell.swift */; };
@@ -29,10 +31,16 @@
        130EC17E2AD3905F003CA9BA /* BindPhoneVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130EC17C2AD3905F003CA9BA /* BindPhoneVC.xib */; };
        130EC1802AD3F6AF003CA9BA /* CommonAlertSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130EC17F2AD3F6AF003CA9BA /* CommonAlertSheetView.swift */; };
        130EC1822AD3F6C0003CA9BA /* CommonAlertSheetView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130EC1812AD3F6C0003CA9BA /* CommonAlertSheetView.xib */; };
        1314FF922D93F8730070E83A /* CardCenterDetailVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1314FF912D93F8730070E83A /* CardCenterDetailVC.xib */; };
        1314FF932D93F8730070E83A /* CardCenterDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1314FF902D93F8730070E83A /* CardCenterDetailVC.swift */; };
        131732B72A405DED00F722AF /* YardDetailDateTimeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 131732B62A405DED00F722AF /* YardDetailDateTimeVC.swift */; };
        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 */; };
        13240EED2D94F197008944A0 /* StudentInfo_6_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13240EEC2D94F197008944A0 /* StudentInfo_6_TCell.xib */; };
        13240EEE2D94F197008944A0 /* StudentInfo_6_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13240EEB2D94F197008944A0 /* StudentInfo_6_TCell.swift */; };
        13240EF02D94F8AD008944A0 /* StudentChoose3View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13240EEF2D94F8AD008944A0 /* StudentChoose3View.swift */; };
        13240EF22D94F8B6008944A0 /* StudentChoose3View.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13240EF12D94F8B6008944A0 /* StudentChoose3View.xib */; };
        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 */; };
@@ -76,6 +84,13 @@
        134BD52C2A6008BA00786819 /* YYPaymentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134BD5202A6008BA00786819 /* YYPaymentManager.swift */; };
        134BD52D2A6008BA00786819 /* YYPaymentResultModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134BD5212A6008BA00786819 /* YYPaymentResultModel.swift */; };
        134BD52E2A6008BA00786819 /* YYPayRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134BD5222A6008BA00786819 /* YYPayRequest.swift */; };
        134D0BF02DA76C0E003D79C3 /* StudentInfo_2_2_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 134D0BEF2DA76C0E003D79C3 /* StudentInfo_2_2_TCell.xib */; };
        134D0BF12DA76C0E003D79C3 /* StudentInfo_2_2_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134D0BEE2DA76C0E003D79C3 /* StudentInfo_2_2_TCell.swift */; };
        134EC5DA2D9567D400D6F82B /* CardCenterAddUserVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134EC5D82D9567D400D6F82B /* CardCenterAddUserVC.swift */; };
        134EC5DB2D9567D400D6F82B /* CardCenterAddUserVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 134EC5D92D9567D400D6F82B /* CardCenterAddUserVC.xib */; };
        134EC5DD2D96400100D6F82B /* MyCardListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134EC5DC2D96400100D6F82B /* MyCardListVC.swift */; };
        134EC5E02D9645EB00D6F82B /* MyCardTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134EC5DE2D9645EB00D6F82B /* MyCardTCell.swift */; };
        134EC5E12D9645EB00D6F82B /* MyCardTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 134EC5DF2D9645EB00D6F82B /* MyCardTCell.xib */; };
        134F87702B90AAD100962CE3 /* JudgeListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134F876E2B90AAD100962CE3 /* JudgeListVC.swift */; };
        134F87712B90AAD100962CE3 /* JudgeListVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 134F876F2B90AAD100962CE3 /* JudgeListVC.xib */; };
        1350BF172ADFD1D9007FC49F /* RatingBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1350BF162ADFD1D9007FC49F /* RatingBar.swift */; };
@@ -242,6 +257,9 @@
        13DA7D4C2AAEFD630085ABF9 /* CommonWebVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13DA7D4A2AAEFD630085ABF9 /* CommonWebVC.swift */; };
        13DA7D4D2AAEFD630085ABF9 /* CommonWebVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13DA7D4B2AAEFD630085ABF9 /* CommonWebVC.xib */; };
        13DA7D4F2AAF03F90085ABF9 /* CommonScanQRCodeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13DA7D4E2AAF03F90085ABF9 /* CommonScanQRCodeVC.swift */; };
        13E82AAB2D93C32B006116E3 /* CardCenterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E82AAA2D93C32B006116E3 /* CardCenterVC.swift */; };
        13E82AAF2D93CE32006116E3 /* CardCenterTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13E82AAE2D93CE32006116E3 /* CardCenterTCell.xib */; };
        13E82AB02D93CE32006116E3 /* CardCenterTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E82AAD2D93CE32006116E3 /* CardCenterTCell.swift */; };
        13EAF3772AB406C3000A6F07 /* GamesListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EAF3762AB406C3000A6F07 /* GamesListVC.swift */; };
        13EAF3792AB4162A000A6F07 /* GamesSubListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EAF3782AB4162A000A6F07 /* GamesSubListVC.swift */; };
        13EAF37D2AB42CFD000A6F07 /* GamesTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EAF37B2AB42CFD000A6F07 /* GamesTCell.swift */; };
@@ -262,6 +280,8 @@
        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 */; };
        13F8D1EE2D96529500E90519 /* MyCardItemVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13F8D1ED2D96529500E90519 /* MyCardItemVC.xib */; };
        13F8D1EF2D96529500E90519 /* MyCardItemVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F8D1EC2D96529500E90519 /* MyCardItemVC.swift */; };
        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 */; };
@@ -373,6 +393,8 @@
        1304B85E2A4EB59F000D4F2E /* SearchStoreListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchStoreListVC.swift; sourceTree = "<group>"; };
        1304B85F2A4EB59F000D4F2E /* SearchStoreListVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchStoreListVC.xib; sourceTree = "<group>"; };
        1306580A2B22C1BB008B2500 /* WanPaiRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WanPaiRelease.entitlements; sourceTree = "<group>"; };
        130A592F2D9406A40094D92D /* CardCenterSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardCenterSheetView.swift; sourceTree = "<group>"; };
        130A59312D9406AB0094D92D /* CardCenterSheetView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CardCenterSheetView.xib; sourceTree = "<group>"; };
        130CE4512A4823AC00394384 /* StudentMedalCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentMedalCCell.swift; sourceTree = "<group>"; };
        130CE4522A4823AC00394384 /* StudentMedalCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StudentMedalCCell.xib; sourceTree = "<group>"; };
        130CE4552A4925AB00394384 /* StudentVideoCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentVideoCCell.swift; sourceTree = "<group>"; };
@@ -384,11 +406,17 @@
        130EC17C2AD3905F003CA9BA /* BindPhoneVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BindPhoneVC.xib; sourceTree = "<group>"; };
        130EC17F2AD3F6AF003CA9BA /* CommonAlertSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonAlertSheetView.swift; sourceTree = "<group>"; };
        130EC1812AD3F6C0003CA9BA /* CommonAlertSheetView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CommonAlertSheetView.xib; sourceTree = "<group>"; };
        1314FF902D93F8730070E83A /* CardCenterDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardCenterDetailVC.swift; sourceTree = "<group>"; };
        1314FF912D93F8730070E83A /* CardCenterDetailVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CardCenterDetailVC.xib; sourceTree = "<group>"; };
        131732B62A405DED00F722AF /* YardDetailDateTimeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YardDetailDateTimeVC.swift; sourceTree = "<group>"; };
        131732B82A405EF800F722AF /* CalendarDateTimeTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarDateTimeTCell.swift; sourceTree = "<group>"; };
        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>"; };
        13240EEB2D94F197008944A0 /* StudentInfo_6_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentInfo_6_TCell.swift; sourceTree = "<group>"; };
        13240EEC2D94F197008944A0 /* StudentInfo_6_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StudentInfo_6_TCell.xib; sourceTree = "<group>"; };
        13240EEF2D94F8AD008944A0 /* StudentChoose3View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentChoose3View.swift; sourceTree = "<group>"; };
        13240EF12D94F8B6008944A0 /* StudentChoose3View.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StudentChoose3View.xib; 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>"; };
@@ -433,6 +461,13 @@
        134BD5212A6008BA00786819 /* YYPaymentResultModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YYPaymentResultModel.swift; sourceTree = "<group>"; };
        134BD5222A6008BA00786819 /* YYPayRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YYPayRequest.swift; sourceTree = "<group>"; };
        134BD5332A60099B00786819 /* WanPai-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "WanPai-Bridging-Header.h"; sourceTree = SOURCE_ROOT; };
        134D0BEE2DA76C0E003D79C3 /* StudentInfo_2_2_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentInfo_2_2_TCell.swift; sourceTree = "<group>"; };
        134D0BEF2DA76C0E003D79C3 /* StudentInfo_2_2_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StudentInfo_2_2_TCell.xib; sourceTree = "<group>"; };
        134EC5D82D9567D400D6F82B /* CardCenterAddUserVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardCenterAddUserVC.swift; sourceTree = "<group>"; };
        134EC5D92D9567D400D6F82B /* CardCenterAddUserVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CardCenterAddUserVC.xib; sourceTree = "<group>"; };
        134EC5DC2D96400100D6F82B /* MyCardListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCardListVC.swift; sourceTree = "<group>"; };
        134EC5DE2D9645EB00D6F82B /* MyCardTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCardTCell.swift; sourceTree = "<group>"; };
        134EC5DF2D9645EB00D6F82B /* MyCardTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyCardTCell.xib; sourceTree = "<group>"; };
        134F876E2B90AAD100962CE3 /* JudgeListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JudgeListVC.swift; sourceTree = "<group>"; };
        134F876F2B90AAD100962CE3 /* JudgeListVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = JudgeListVC.xib; sourceTree = "<group>"; };
        1350BF162ADFD1D9007FC49F /* RatingBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RatingBar.swift; sourceTree = "<group>"; };
@@ -599,6 +634,9 @@
        13DA7D4A2AAEFD630085ABF9 /* CommonWebVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonWebVC.swift; sourceTree = "<group>"; };
        13DA7D4B2AAEFD630085ABF9 /* CommonWebVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CommonWebVC.xib; sourceTree = "<group>"; };
        13DA7D4E2AAF03F90085ABF9 /* CommonScanQRCodeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonScanQRCodeVC.swift; sourceTree = "<group>"; };
        13E82AAA2D93C32B006116E3 /* CardCenterVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardCenterVC.swift; sourceTree = "<group>"; };
        13E82AAD2D93CE32006116E3 /* CardCenterTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardCenterTCell.swift; sourceTree = "<group>"; };
        13E82AAE2D93CE32006116E3 /* CardCenterTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CardCenterTCell.xib; sourceTree = "<group>"; };
        13EAF3762AB406C3000A6F07 /* GamesListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamesListVC.swift; sourceTree = "<group>"; };
        13EAF3782AB4162A000A6F07 /* GamesSubListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamesSubListVC.swift; sourceTree = "<group>"; };
        13EAF37B2AB42CFD000A6F07 /* GamesTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamesTCell.swift; sourceTree = "<group>"; };
@@ -619,6 +657,8 @@
        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>"; };
        13F8D1EC2D96529500E90519 /* MyCardItemVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCardItemVC.swift; sourceTree = "<group>"; };
        13F8D1ED2D96529500E90519 /* MyCardItemVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyCardItemVC.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>"; };
@@ -750,6 +790,15 @@
            path = CCell;
            sourceTree = "<group>";
        };
        130A592E2D94068B0094D92D /* View */ = {
            isa = PBXGroup;
            children = (
                130A592F2D9406A40094D92D /* CardCenterSheetView.swift */,
                130A59312D9406AB0094D92D /* CardCenterSheetView.xib */,
            );
            path = View;
            sourceTree = "<group>";
        };
        130E40282A4EC32D003A3D75 /* View */ = {
            isa = PBXGroup;
            children = (
@@ -758,6 +807,18 @@
                138ED7972AF3A5BE0001F2EF /* CustomPointAnnotationView.swift */,
            );
            path = View;
            sourceTree = "<group>";
        };
        1314FF8F2D93F8580070E83A /* VC */ = {
            isa = PBXGroup;
            children = (
                13E82AAA2D93C32B006116E3 /* CardCenterVC.swift */,
                1314FF902D93F8730070E83A /* CardCenterDetailVC.swift */,
                1314FF912D93F8730070E83A /* CardCenterDetailVC.xib */,
                134EC5D82D9567D400D6F82B /* CardCenterAddUserVC.swift */,
                134EC5D92D9567D400D6F82B /* CardCenterAddUserVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        13272DC92A4006B500AC6481 /* View */ = {
@@ -802,6 +863,10 @@
                13F88AFC2B8F29F10055317B /* StudentInfo_4_TCell.xib */,
                13FF80F32B90AE8400B70178 /* JudgeTCell.swift */,
                13FF80F42B90AE8400B70178 /* JudgeTCell.xib */,
                13240EEB2D94F197008944A0 /* StudentInfo_6_TCell.swift */,
                13240EEC2D94F197008944A0 /* StudentInfo_6_TCell.xib */,
                134EC5DE2D9645EB00D6F82B /* MyCardTCell.swift */,
                134EC5DF2D9645EB00D6F82B /* MyCardTCell.xib */,
            );
            path = TCell;
            sourceTree = "<group>";
@@ -1002,6 +1067,25 @@
            path = VC;
            sourceTree = "<group>";
        };
        13E82AA92D93C300006116E3 /* CardCenter */ = {
            isa = PBXGroup;
            children = (
                130A592E2D94068B0094D92D /* View */,
                1314FF8F2D93F8580070E83A /* VC */,
                13E82AAC2D93CE1F006116E3 /* TCell */,
            );
            path = CardCenter;
            sourceTree = "<group>";
        };
        13E82AAC2D93CE1F006116E3 /* TCell */ = {
            isa = PBXGroup;
            children = (
                13E82AAD2D93CE32006116E3 /* CardCenterTCell.swift */,
                13E82AAE2D93CE32006116E3 /* CardCenterTCell.xib */,
            );
            path = TCell;
            sourceTree = "<group>";
        };
        13EAF37A2AB42CEE000A6F07 /* TCell */ = {
            isa = PBXGroup;
            children = (
@@ -1123,6 +1207,8 @@
                138A25AF2B91CE8E00B2EE49 /* StudentInfo_5_TCell.xib */,
                1371CD042BA3E7F2007E0849 /* StudentInfo_2_1_TCell.swift */,
                1371CD052BA3E7F2007E0849 /* StudentInfo_2_1_TCell.xib */,
                134D0BEE2DA76C0E003D79C3 /* StudentInfo_2_2_TCell.swift */,
                134D0BEF2DA76C0E003D79C3 /* StudentInfo_2_2_TCell.xib */,
            );
            path = TCell;
            sourceTree = "<group>";
@@ -1285,6 +1371,8 @@
                13638ACC2B95AE8900ABDD0D /* StudentChoose2View.xib */,
                133FAE972B96F651005CF2F2 /* CommonYearsPickerView.swift */,
                133FAE992B96F658005CF2F2 /* CommonYearsPickerView.xib */,
                13240EEF2D94F8AD008944A0 /* StudentChoose3View.swift */,
                13240EF12D94F8B6008944A0 /* StudentChoose3View.xib */,
            );
            path = View;
            sourceTree = "<group>";
@@ -1384,6 +1472,7 @@
        8DFA9B782A31722300E99281 /* Root */ = {
            isa = PBXGroup;
            children = (
                13E82AA92D93C300006116E3 /* CardCenter */,
                137B86672AB3F02A00C4D01B /* Games */,
                138D8B8A2A3FFE1D009DCA9E /* Yard */,
                8DC3BE0D2A38038F00C91B7F /* Activity */,
@@ -1562,6 +1651,9 @@
                13D871112B90B7C2006B81AF /* MatchDetailVC.xib */,
                138A25A62B91CC2300B2EE49 /* StudentsManagerListVC.swift */,
                138A25A72B91CC2300B2EE49 /* StudentsManagerListVC.xib */,
                134EC5DC2D96400100D6F82B /* MyCardListVC.swift */,
                13F8D1EC2D96529500E90519 /* MyCardItemVC.swift */,
                13F8D1ED2D96529500E90519 /* MyCardItemVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
@@ -1651,6 +1743,7 @@
                139A39EE2A41349800737AFB /* YardBookingTCell.xib in Resources */,
                13ECD42F2B8DD82C00187EE9 /* WorldCupTCell.xib in Resources */,
                8DA51DFC2A32C6D00085F4BA /* StoresChooseView.xib in Resources */,
                134D0BF02DA76C0E003D79C3 /* StudentInfo_2_2_TCell.xib in Resources */,
                138D8B942A4000D2009DCA9E /* YardTCell.xib in Resources */,
                8D6810EC2A3710D8004486DE /* StudentChooseView.xib in Resources */,
                1371CD0B2BA44584007E0849 /* QRWithTitlePreview.xib in Resources */,
@@ -1707,10 +1800,12 @@
                13477DC32B8C9F28002E69FB /* MeQRCodeVC.xib in Resources */,
                13EAF3822AB43657000A6F07 /* GamesIntruduceView.xib in Resources */,
                8DFA9B922A317DE900E99281 /* WelfareVC.xib in Resources */,
                13240EED2D94F197008944A0 /* StudentInfo_6_TCell.xib in Resources */,
                13F88B062B8F46EA0055317B /* WorldCupListVC.xib in Resources */,
                1371CD072BA3E7F2007E0849 /* StudentInfo_2_1_TCell.xib in Resources */,
                13B640C12A54108B00EA33ED /* UploadImgCCell.xib in Resources */,
                8D8DEDF32A31DDC500F2C7FA /* CouponCCell.xib in Resources */,
                13F8D1EE2D96529500E90519 /* MyCardItemVC.xib in Resources */,
                138D8B8F2A3FFE36009DCA9E /* YardListVC.xib in Resources */,
                130EC17E2AD3905F003CA9BA /* BindPhoneVC.xib in Resources */,
                8D4905AE2A31AE7100E38513 /* JoinMemberIntroduceVC.xib in Resources */,
@@ -1726,10 +1821,13 @@
                13BEEAEB2A4D92A200685667 /* ExchangeRecordTCell.xib in Resources */,
                8DF184412A3327EE0095687B /* Common_1_CCell.xib in Resources */,
                13A501922A4D6EA600FF6763 /* CoinStoreCCell.xib in Resources */,
                134EC5DB2D9567D400D6F82B /* CardCenterAddUserVC.xib in Resources */,
                8D6D58D52A3997250003CFE6 /* StoresInfoView.xib in Resources */,
                13477DCB2B8CA1C1002E69FB /* MyQRCodeTCell.xib in Resources */,
                8D5C150C2A31885B00A8BCC9 /* CommonAlertView.xib in Resources */,
                1376A6A22A4A7E1E00D4C851 /* CourseChargeTCell.xib in Resources */,
                13E82AAF2D93CE32006116E3 /* CardCenterTCell.xib in Resources */,
                130A59322D9406AB0094D92D /* CardCenterSheetView.xib in Resources */,
                13D7D6242A4EBBCF000136BD /* SearchStoreTCell.xib in Resources */,
                1393B3932A4ACDB200B73072 /* CourseExerciseSubListVC.xib in Resources */,
                13426D682B8F20AB0032338B /* WorldCupContentDetailVC.xib in Resources */,
@@ -1749,9 +1847,11 @@
                13927C792B97338C00223A21 /* FinishWorldCupMatchView.xib in Resources */,
                13CCC4BD2A4A820100DEDF19 /* StudentCourseDetailHeadView.xib in Resources */,
                8D5C150D2A31885B00A8BCC9 /* AgreentView.xib in Resources */,
                134EC5E12D9645EB00D6F82B /* MyCardTCell.xib in Resources */,
                130EC1822AD3F6C0003CA9BA /* CommonAlertSheetView.xib in Resources */,
                137D2C3D2B8F630F001E34BF /* WorldCupContentApplyInputVC.xib in Resources */,
                137D2C372B8F5B8E001E34BF /* WorldCupContentApplyVC.xib in Resources */,
                1314FF922D93F8730070E83A /* CardCenterDetailVC.xib in Resources */,
                1304B8562A4EAA81000D4F2E /* CustomerContentDetailVC.xib in Resources */,
                137801A42A3C644200414959 /* CourseVideoDetailVC.xib in Resources */,
                13921C012B8C838700BED781 /* FindItemCCell.xib in Resources */,
@@ -1766,6 +1866,7 @@
                8D44E4F82A331DF800E7010E /* CourseDetailApplyVC.xib in Resources */,
                8D79A5942A395BF40029874B /* ActivityStudentListVC.xib in Resources */,
                13FBB8D72A4ED96C00FF70DB /* SearchStoreDetailFeedbackVC.xib in Resources */,
                13240EF22D94F8B6008944A0 /* StudentChoose3View.xib in Resources */,
                1304B8522A4EA5ED000D4F2E /* CustomerContentQATCell.xib in Resources */,
                1304B8612A4EB59F000D4F2E /* SearchStoreListVC.xib in Resources */,
                137801942A3B0D3C00414959 /* CourseOnlineCCell.xib in Resources */,
@@ -1842,6 +1943,7 @@
                13D7BA9B2A4BDF0A0007E4B7 /* WelfareCouponsTCell.swift in Sources */,
                8D4905AD2A31AE7100E38513 /* JoinMemberIntroduceVC.swift in Sources */,
                130EC1802AD3F6AF003CA9BA /* CommonAlertSheetView.swift in Sources */,
                1314FF932D93F8730070E83A /* CardCenterDetailVC.swift in Sources */,
                138BE81C2AF0E41400FECE44 /* SocketManager.swift in Sources */,
                13D7D6232A4EBBCF000136BD /* SearchStoreTCell.swift in Sources */,
                8DC3BE112A3803B500C91B7F /* ActivityListVC.swift in Sources */,
@@ -1878,6 +1980,7 @@
                8DAEB54B2A30593C00814766 /* BaseVC.swift in Sources */,
                1387B6662A4AB66300BF2F2E /* CourseBookingListVC.swift in Sources */,
                8DAEB54E2A305A0100814766 /* Colors.swift in Sources */,
                130A59302D9406A40094D92D /* CardCenterSheetView.swift in Sources */,
                132876682A49A4CB00FC9122 /* StudentReportVC.swift in Sources */,
                13426D672B8F20AB0032338B /* WorldCupContentDetailVC.swift in Sources */,
                133A61882A4E7A200066C4E6 /* CustomerSubListVC.swift in Sources */,
@@ -1892,6 +1995,7 @@
                8DC99C882A3701CE00D0F04E /* CouponChooseView.swift in Sources */,
                8D44E4F72A331DF800E7010E /* CourseDetailApplyVC.swift in Sources */,
                8D6D6AF22A32D6F800DCA2C6 /* CourseListVC.swift in Sources */,
                134EC5E02D9645EB00D6F82B /* MyCardTCell.swift in Sources */,
                13BEEAE52A4D8DFB00685667 /* WelfareExchangeRecordListVC.swift in Sources */,
                8DF184402A3327EE0095687B /* Common_1_CCell.swift in Sources */,
                13DA7D4C2AAEFD630085ABF9 /* CommonWebVC.swift in Sources */,
@@ -1903,6 +2007,7 @@
                1393B3962A4AD03A00B73072 /* CourseExerciseTCell.swift in Sources */,
                13B2DEFC2AE12A7E00FCD31E /* LaunchImageHelper.swift in Sources */,
                137546402A57F545001FA77A /* UserModel.swift in Sources */,
                13240EF02D94F8AD008944A0 /* StudentChoose3View.swift in Sources */,
                13019C7D2A42ADA2004880CD /* CourseInfoVC.swift in Sources */,
                138D8B8E2A3FFE36009DCA9E /* YardListVC.swift in Sources */,
                13A9F8B12B0F2DC400ADF402 /* TransitionUtil.swift in Sources */,
@@ -1928,6 +2033,7 @@
                8D5C150E2A31885B00A8BCC9 /* CommonAlertView.swift in Sources */,
                139A39F62A4139E000737AFB /* WelfareWeeklyListVC.swift in Sources */,
                1324D3562B8DE4CA00F168A8 /* WorldCupRecordVC.swift in Sources */,
                134D0BF12DA76C0E003D79C3 /* StudentInfo_2_2_TCell.swift in Sources */,
                133435032A40407200F23951 /* CalendarItemCCell.swift in Sources */,
                13CE11D42AF25C6400F6ACA4 /* UCCateDecorationView.swift in Sources */,
                8D7017892A3308DC00473C40 /* Common_1_TCell.swift in Sources */,
@@ -1973,6 +2079,7 @@
                133A61862A4E78340066C4E6 /* CustomerListVC.swift in Sources */,
                133E223C2AFB37020045B544 /* StoresInfo_2_View.swift in Sources */,
                13A7F72C2AB7E0EC000B3436 /* CourseEXPVC.swift in Sources */,
                134EC5DD2D96400100D6F82B /* MyCardListVC.swift in Sources */,
                136B63982A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.swift in Sources */,
                8D4905A92A31A6EC00E38513 /* HomeCCell.swift in Sources */,
                8D6D58CF2A3972A80003CFE6 /* ActivitySignupListVC.swift in Sources */,
@@ -2010,16 +2117,21 @@
                13801CBE2A4D20D20041454D /* ChooseStoreView.swift in Sources */,
                137801932A3B0D3C00414959 /* CourseOnlineCCell.swift in Sources */,
                13675FF72B8CBDD400085A66 /* WorldCupMenuVC.swift in Sources */,
                13F8D1EF2D96529500E90519 /* MyCardItemVC.swift in Sources */,
                1371CD062BA3E7F2007E0849 /* StudentInfo_2_1_TCell.swift in Sources */,
                138A25B02B91CE8E00B2EE49 /* StudentInfo_5_TCell.swift in Sources */,
                1324D35B2B8DE5EA00F168A8 /* WorldCupRecordTCell.swift in Sources */,
                136FD9AD2A4C2F0500933B7C /* RechargeItemCCell.swift in Sources */,
                8D630BFB2A3180B000F0B7A8 /* BaseTabBarVC.swift in Sources */,
                13E82AAB2D93C32B006116E3 /* CardCenterVC.swift in Sources */,
                137801862A3B01FA00414959 /* ActivitySignupDetailVC.swift in Sources */,
                134EC5DA2D9567D400D6F82B /* CardCenterAddUserVC.swift in Sources */,
                137801A32A3C644200414959 /* CourseVideoDetailVC.swift in Sources */,
                13EC6DDC2A493D23009FC09A /* WelfareCoinCCell.swift in Sources */,
                13BEEAE72A4D927100685667 /* WelfareExchangeRecordSubListVC.swift in Sources */,
                138D8B932A4000D2009DCA9E /* YardTCell.swift in Sources */,
                13E82AB02D93CE32006116E3 /* CardCenterTCell.swift in Sources */,
                13240EEE2D94F197008944A0 /* StudentInfo_6_TCell.swift in Sources */,
                1304B8552A4EAA81000D4F2E /* CustomerContentDetailVC.swift in Sources */,
                13F88AFD2B8F29F10055317B /* StudentInfo_4_TCell.swift in Sources */,
                135772AC2AB1B11400EA3544 /* YardBookingDetailVC.swift in Sources */,
@@ -2193,7 +2305,7 @@
                CODE_SIGN_ENTITLEMENTS = WanPai/WanPaiDebug.entitlements;
                "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
                CODE_SIGN_STYLE = Manual;
                CURRENT_PROJECT_VERSION = 13;
                CURRENT_PROJECT_VERSION = 16;
                DEVELOPMENT_TEAM = "";
                "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 2MWV8K39DV;
                FRAMEWORK_SEARCH_PATHS = (
@@ -2222,7 +2334,7 @@
                    "$(inherited)",
                    "$(PROJECT_DIR)/WanPai/YYPaymentManager/WeChatPay",
                );
                MARKETING_VERSION = 2.0.3;
                MARKETING_VERSION = 2.0.6;
                OTHER_LDFLAGS = (
                    "$(inherited)",
                    "-ObjC",
@@ -2341,6 +2453,7 @@
                SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
                SUPPORTS_MACCATALYST = NO;
                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
                SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
                SWIFT_EMIT_LOC_STRINGS = YES;
                SWIFT_OBJC_BRIDGING_HEADER = "WanPai-Bridging-Header.h";
                SWIFT_VERSION = 5.0;
@@ -2357,7 +2470,7 @@
                CODE_SIGN_ENTITLEMENTS = WanPai/WanPaiRelease.entitlements;
                "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
                CODE_SIGN_STYLE = Manual;
                CURRENT_PROJECT_VERSION = 13;
                CURRENT_PROJECT_VERSION = 16;
                DEVELOPMENT_TEAM = "";
                "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 2MWV8K39DV;
                FRAMEWORK_SEARCH_PATHS = (
@@ -2386,7 +2499,7 @@
                    "$(inherited)",
                    "$(PROJECT_DIR)/WanPai/YYPaymentManager/WeChatPay",
                );
                MARKETING_VERSION = 2.0.3;
                MARKETING_VERSION = 2.0.6;
                OTHER_LDFLAGS = (
                    "$(inherited)",
                    "-ObjC",
@@ -2505,6 +2618,7 @@
                SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
                SUPPORTS_MACCATALYST = NO;
                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
                SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
                SWIFT_EMIT_LOC_STRINGS = YES;
                SWIFT_OBJC_BRIDGING_HEADER = "WanPai-Bridging-Header.h";
                SWIFT_VERSION = 5.0;
WanPai/AppDelegate.swift
@@ -85,17 +85,20 @@
                                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))
                                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))
                                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 carderCenterVCNav = BaseNav(rootViewController: CardCenterVC())
        carderCenterVCNav.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]
                                searchVCNav.tabBarItem = UITabBarItem(title: "我的玩湃", image: UIImage(named: "tabbar_search"), selectedImage: UIImage(named: "tabbar_search_s")!.withRenderingMode(.alwaysOriginal))
                                tabBar.viewControllers = [homeNav,carderCenterVCNav,clouseNav,searchVCNav]
                                sceneDelegate?.window?.rootViewController = tabBar
                                sceneDelegate?.window?.rootViewController?.view.addSubview(snapView!)
                                sceneDelegate?.window?.makeKeyAndVisible()
WanPai/Assets.xcassets/Bg/bg_card_1.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "Group@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "Group@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Bg/bg_card_1.imageset/Group@2x.png
WanPai/Assets.xcassets/Bg/bg_card_1.imageset/Group@3x.png
WanPai/Assets.xcassets/Btns/btn_add_large_1.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_add_large_1@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_add_large_1@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Btns/btn_add_large_1.imageset/btn_add_large_1@2x.png
WanPai/Assets.xcassets/Btns/btn_add_large_1.imageset/btn_add_large_1@3x.png
WanPai/Assets.xcassets/Btns/btn_delete_2.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_delete_2@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_delete_2@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Btns/btn_delete_2.imageset/btn_delete_2@2x.png
WanPai/Assets.xcassets/Btns/btn_delete_2.imageset/btn_delete_2@3x.png
WanPai/Assets.xcassets/Btns/btn_s_setting.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_s_setting@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_s_setting@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Btns/btn_s_setting.imageset/btn_s_setting@2x.png
WanPai/Assets.xcassets/Btns/btn_s_setting.imageset/btn_s_setting@3x.png
WanPai/Assets.xcassets/CardCenter/Contents.json
New file
@@ -0,0 +1,6 @@
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/CardCenter/icon_card_item.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_card_item@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_card_item@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/CardCenter/icon_card_item.imageset/icon_card_item@2x.png
WanPai/Assets.xcassets/CardCenter/icon_card_item.imageset/icon_card_item@3x.png
WanPai/Assets.xcassets/CardCenter/icon_card_mask.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_card_mask@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_card_mask@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/CardCenter/icon_card_mask.imageset/icon_card_mask@2x.png
WanPai/Assets.xcassets/CardCenter/icon_card_mask.imageset/icon_card_mask@3x.png
WanPai/Assets.xcassets/Icons/me_card.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "me_card@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "me_card@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/me_card.imageset/me_card@2x.png
WanPai/Assets.xcassets/Icons/me_card.imageset/me_card@3x.png
WanPai/Assets.xcassets/Icons/user_default.imageset/Contents.json
New file
@@ -0,0 +1,21 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "user_default@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
WanPai/Assets.xcassets/Icons/user_default.imageset/user_default@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/Combined Shape@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/Combined Shape@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/Contents.json
@@ -5,12 +5,12 @@
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_course@2x.png",
      "filename" : "Combined Shape@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_course@3x.png",
      "filename" : "Combined Shape@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/tabbar_course@2x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_course.imageset/tabbar_course@3x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/Combined Shape@2x(1).png
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/Combined Shape@3x(1).png
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/Contents.json
@@ -5,12 +5,12 @@
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_course_s@2x.png",
      "filename" : "Combined Shape@2x(1).png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_course_s@3x.png",
      "filename" : "Combined Shape@3x(1).png",
      "idiom" : "universal",
      "scale" : "3x"
    }
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/tabbar_course_s@2x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_course_s.imageset/tabbar_course_s@3x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/Contents.json
@@ -5,12 +5,12 @@
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_profile@2x.png",
      "filename" : "我的@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_profile@3x.png",
      "filename" : "我的@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/tabbar_profile@2x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/tabbar_profile@3x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/我的@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_search.imageset/我的@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/Contents.json
@@ -5,12 +5,12 @@
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_profile_s@2x.png",
      "filename" : "我的@2x(1).png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_profile_s@3x.png",
      "filename" : "我的@3x(1).png",
      "idiom" : "universal",
      "scale" : "3x"
    }
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/tabbar_profile_s@2x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/tabbar_profile_s@3x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/我的@2x(1).png
WanPai/Assets.xcassets/Tabbar/tabbar_search_s.imageset/我的@3x(1).png
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/Contents.json
@@ -5,12 +5,12 @@
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_welfare@2x.png",
      "filename" : "H5-个人中心-优惠卡券@2x(1).png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_welfare@3x.png",
      "filename" : "H5-个人中心-优惠卡券@3x(1).png",
      "idiom" : "universal",
      "scale" : "3x"
    }
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/H5-个人中心-优惠卡券@2x(1).png
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/H5-个人中心-优惠卡券@3x(1).png
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/tabbar_welfare@2x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_welfare.imageset/tabbar_welfare@3x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/Contents.json
@@ -5,12 +5,12 @@
      "scale" : "1x"
    },
    {
      "filename" : "tabbar_welfare_s@2x.png",
      "filename" : "H5-个人中心-优惠卡券@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "tabbar_welfare_s@3x.png",
      "filename" : "H5-个人中心-优惠卡券@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/H5-个人中心-优惠卡券@2x.png
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/H5-个人中心-优惠卡券@3x.png
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/tabbar_welfare_s@2x.png
Binary files differ
WanPai/Assets.xcassets/Tabbar/tabbar_welfare_s.imageset/tabbar_welfare_s@3x.png
Binary files differ
WanPai/Base/BaseNav.swift
@@ -14,10 +14,10 @@
                /// 需要透明Nav的VC
                private var lucencyVCs = [RechargeRecordVC.self,RechargeCenterVC.self]
    private var lucencyVCs = [RechargeRecordVC.self,RechargeCenterVC.self]
                /// 世界杯风格
                private var worldCupVCs = [SearchVC.self,WorldCupVC.self,WorldCupHeaderVC.self,WorldCupMenuVC.self,WorldCupContentVC.self,WorldCupRecordVC.self,WorldCupRankVC.self,WorldCupListVC.self,WorldCupContentApplyVC.self,WorldCupContentApplyInputVC.self,WorldCupContentDetailVC.self]
                private var worldCupVCs = [WorldCupVC.self,WorldCupHeaderVC.self,WorldCupMenuVC.self,WorldCupContentVC.self,WorldCupRecordVC.self,WorldCupRankVC.self,WorldCupListVC.self,WorldCupContentApplyVC.self,WorldCupContentApplyInputVC.self,WorldCupContentDetailVC.self]
                private let img = UIImage.jq_gradient([UIColor(hexStr: "#FD8C02"),UIColor(hexStr: "#FD7202")], size: CGSize(width: JQ_ScreenW, height: JQ_NavBarHeight), radius: 0, locations: [0,1], direction: .vertical)
@@ -29,7 +29,6 @@
                                self.navigationBar.shadowImage = UIImage()
                                self.navigationBar.isTranslucent = true
                                self.delegate = self
                                //        self.popDelegate = self.interactivePopGestureRecognizer?.delegate
                                self.interactivePopGestureRecognizer?.delegate = self
@@ -81,6 +80,16 @@
                                                return
                                }
        if viewController.classForCoder == CardCenterVC.self{
            if #available(iOS 15.0, *) {
                navigationBar.standardAppearance.backgroundImage = img
                navigationBar.scrollEdgeAppearance?.backgroundImage = img
            }else{
                navigationBar.setBackgroundImage(img, for: .default)
            }
            return
        }
                                let status = lucencyVCs.contains(where: {$0 == viewController.classForCoder})
                                if (navigationController.viewControllers.count == 1 || status) && !(viewController is WelfareVC){
                                                if #available(iOS 15.0, *) {
WanPai/Common/VC/CommonWebVC.swift
@@ -35,6 +35,11 @@
                                view_btns.isHidden = true
                                webView.navigationDelegate = self
        yy_popBlock = {[unowned self] in
            NotificationCenter.default.post(name: Noti_showSheetView, object: nil)
            self.navigationController?.popViewController(animated: true)
        }
                                if type != .other{
                                                title = type.titleStr
@@ -44,6 +49,11 @@
                                                                title = type.titleStr
                                                }
            if !content.isEmpty{
                webView.loadHTMLString(content!.jq_wrapHtml(), baseURL: nil)
                return
            }
                                                Services.queryProtocol(type,progress: false).subscribe(onNext: {[weak self] result in
                                                                if let text = result.data?.jq_wrapHtml(edge: .init(top: 5, left:0, bottom: 0, right: 0)){
                                                                                self?.webView.loadHTMLString(text, baseURL: nil)
WanPai/Common/View/PaymentView.swift
@@ -18,6 +18,7 @@
                                case recharge //充值
                                case goods(ExchangeType)
                                case activity
        case huiminCard
                                case worldCup
                }
WanPai/Config/Enums.swift
@@ -128,6 +128,8 @@
                case worldcupDetail = 9
    case huimin = 10
                case nothing = -999
                var defaultImg:UIImage{
WanPai/Model/CommonModels.swift
@@ -102,16 +102,16 @@
                var birthday = ""
                var headImg = ""
                var height:Double = 0
                var idCard:String?
                var idCard:String = ""
                var name = ""
                var phone:String?
                var phone:String = ""
                var sex:GenderType = .man
                var weight:Double = 0
                var stuId:Int?
}
struct StudentProfile1Model:HandyJSON{
struct StudentProfile1Model:HandyJSON,Hashable{
                var birthday = ""
                var isNot = 2 //1. 是默认 2. 不是默认
                var stuAge:Int = 0
@@ -245,7 +245,7 @@
                var storeCoverDrawing = ""
}
struct ActivityDetailPartModel:HandyJSON{
struct ActivityDetailPartModel:HandyJSON,Hashable{
                var age = 0
                var id = 0
                var idcard = ""
@@ -980,5 +980,101 @@
                var isBind = 0
}
struct HuiminCardModel:HandyJSON{
    var cardList = [HuiminCardItemModel]()
    var introduce:String = ""
    var showType = 0 //1展示富文本内容 2展示惠民卡列表
}
struct HuiminCardItemModel:HandyJSON{
    var cover = ""
    var id = 0
    var isBuy = 0
}
struct HuiminCardDetailModel:HandyJSON{
    var agreementSettings = [HuiminCardDetailAgreementModel]()
    var banner: String = ""
    var buyCover: String = ""
    var buyRemark: String = ""
    var endTime: String = ""
    var grantCount: Int = 0
    var huiMinName: String = ""
    var huiMinType: Int = 0
    var id: Int = 0
    var introduce: String = ""
    var qrCode:String = ""
    var isBuy: Int = 0
    var limitCount: Int = 0
    var salesMoney: Double = 0
    var sort: String = ""
    var startTime: String = ""
    var status: Int = 0
    var storeId: Int = 0
    var unBuyCover: String = ""
    var unBuyRemark: String = ""
    var unUseTimes: String = ""
    var useIds: String = ""
    var useScope: Int = 0
    var useTimes: String = ""
    var useWeeks: String = ""
}
struct HuiminCardDetailAgreementModel:HandyJSON {
    var agreementContent: String = ""
    var agreementId: Int = 0
    var agreementName: String = ""
    var id: Int = 0
}
struct HuiminCardMyItemModel:HandyJSON{
    var cardId: Int = 0
    var cover = ""
    var endTime = ""
    var id: Int = 0
    var isExpire: Int = 0 //是否过期 0否1是
    var isRefund: Int = 0 //是否可以退款 0否1是2退款中
    var paymentTime = ""
    var status: Int = 0 //状态1待支付2使用中3已退款
    var salesMoney:Double = 0
    var studentId = ""
    var studentList = [HuiminCardItemStuModel]()
}
struct HuiminCardItemStuModel:HandyJSON{
    var appUserId: Int = 0
    var birthday:String = ""
    var bmi: Int = 0
    var headImg:String = ""
    var height: Int = 0
    var id: Int = 0
    var idCard:String = ""
    var insertTime:String = ""
    var isDefault: Int = 0
    var lateralSurface:String = ""
    var name:String = ""
    var phone:String = ""
    var sex: Int = 0
    var state: Int = 0
    var weight: Int = 0
}
struct HuiminCardDetail_1_Model:HandyJSON{
    var cardId: Int = 0
    var endTime: String = ""
    var huiminCard: HuiminCardDetailModel?
    var introduce: String = ""
    var qrCode: String = ""
    var studentList = [HuiminCardItemStuModel]()
}
struct HuiminCardRuleInfoModel:HandyJSON{
    var addUserRemark = ""
    var id = 0
    var selectUserRemark = ""
    var storeNoHuiminCardIntro = ""
}
WanPai/Network/NetworkRequest.swift
@@ -21,6 +21,10 @@
                var msg: String = ""
}
protocol BaseResponseProtocol:HandyJSON{
}
struct BaseResponseList<T :HandyJSON>: HandyJSON {
                var list: [T] = []
                var totalSession:Int = 0
WanPai/Network/Services.swift
@@ -13,7 +13,7 @@
#if DEBUG
//let All_Url = "http://192.168.110.80:56666" //正式地址
let All_Url = "http://8.137.22.229:56666"
let All_Url = "http://vbef9arg13uu.guyubao.com"
let Game_Url = "https://try.daowepark.com"
//let Socket_Url = "192.168.110.22"
#else
@@ -1145,6 +1145,7 @@
                                                .append(key: "id", value: model.id)
                                                .append(key: "idcard", value: model.idcard)
                                                .append(key: "headImg",value: model.headImg)
            .append(key:"isStudent",value:model.isStudent)
                                return NetworkRequest.request(params: params, method: .post, progress: true)
                }
@@ -1426,8 +1427,62 @@
                                                .append(key: "id", value: id)
                                return NetworkRequest.request(params: params, method: .post, progress: true)
                }
}
extension Services{
    class func getHuiminAgreementAndList(page:Int,pageSize:Int = 20,storeId:Int)->Observable<BaseResponse<HuiminCardModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/activity/huimin/getHuiminAgreementAndList")
            .append(key: "pageNo", value: page)
            .append(key: "pageSize", value: pageSize)
            .append(key: "storeId", value: storeId)
        return NetworkRequest.request(params: params, method: .post, progress: false)
    }
    class func getHuiminDetail(id:Int,storeId:Int)->Observable<BaseResponse<HuiminCardDetailModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/activity/huimin/getHuiminCardDetail")
            .append(key: "id", value: id)
            .append(key: "storeId", value: storeId)
        return NetworkRequest.request(params: params, method: .post, progress: true)
    }
    class func getMyHuiminCard(page:Int,pageSize:Int = 20)->Observable<BaseResponse<[HuiminCardMyItemModel]>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/activity/huimin/myHuiminCardList")
            .append(key: "pageNo", value: page)
            .append(key: "pageSize", value: pageSize)
        return NetworkRequest.request(params: params, method: .post, progress: false)
    }
    class func payHuiminCard(id:Int,payType:PayType,studentIds:String)->Observable<BaseResponse<PaymentModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/activity/huimin/payHuiminCard")
            .append(key: "id", value: id)
            .append(key: "payType", value: payType.rawValue)
            .append(key: "studentIds", value: studentIds)
        return NetworkRequest.request(params: params, method: .post, progress: true)
    }
    class func myHuiminCardDetail(id:Int)->Observable<BaseResponse<HuiminCardDetail_1_Model>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/activity/huimin/myHuiminCardDetail")
            .append(key: "id", value: id)
        return NetworkRequest.request(params: params, method: .post, progress: true)
    }
    class func myHuiminRefund(id:Int)->Observable<BaseResponse<HuiminCardDetail_1_Model>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/activity/huimin/refund")
            .append(key: "id", value: id)
        return NetworkRequest.request(params: params, method: .post, progress: true)
    }
    class func myHuiminRuleInfo()->Observable<BaseResponse<HuiminCardRuleInfoModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/activity/huimin/getContentForStudent")
        return NetworkRequest.request(params: params, method: .post, progress: true)
    }
}
extension Services{
WanPai/Root/Activity/VC/ActivityListVC.swift
@@ -109,6 +109,7 @@
                                items.append(NormalSimpleModel(id: 1, name: "全部用户参与"))
                                items.append(NormalSimpleModel(id: 2, name: "仅限年度会员参与"))
                                items.append(NormalSimpleModel(id: 3, name: "仅限运动营成员参与"))
        items.append(NormalSimpleModel(id: 4, 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
WanPai/Root/Activity/VC/ActivitySignupDetailVC.swift
@@ -92,6 +92,12 @@
                                                switch m.status {
                                                                case .prepare:
                    //不能取消
                    if m.apply == 1{
                        btn_cancel.isHidden = true;return
                    }
                                                                                let name = m.apply == 1 ? "取消":"已取消"
                                                                                let color = m.apply == 1 ? Def_ThemeColor:UIColor(hexStr: "#C0C0C0")
                                                                                btn_cancel.isUserInteractionEnabled = m.apply == 1
@@ -102,9 +108,14 @@
                                                                                                btn_cancel.setImage(UIImage(named: "btn_cancel"), for: .normal)
                                                                                }
                                                                case .ongoing:
                    //不能取消
                    if m.apply == 1{
                        btn_cancel.isHidden = true;return
                    }
                                                                                let endTime = Date.jq_StringToTimeInterval(m.registerEndTime, "yyyy-MM-dd HH:mm")
                                                                                let a = Date.jq_CalByDays(startDate: Date(), endDate: Date(timeIntervalSince1970: endTime))
                                                                                if Date.jq_CalByEnum(startDate: Date(), endDate: Date(timeIntervalSince1970: endTime)).minute > 0{
                                                                                                let name = m.apply == 1 ? "取消":"已取消"
                                                                                                let color = m.apply == 1 ? Def_ThemeColor:UIColor(hexStr: "#C0C0C0")
@@ -121,10 +132,12 @@
                                                                                }
                                                                case .over:
                    btn_cancel.isHidden = false
                                                                                btn_cancel.setTitle("已结束", for: .normal)
                                                                                btn_cancel.isUserInteractionEnabled = false
                                                                                btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0")
                                                                case .cancel:
                    btn_cancel.isHidden = false
                                                                                btn_cancel.setTitle("已取消", for: .normal)
                                                                                btn_cancel.isUserInteractionEnabled = false
                                                                                btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0")
@@ -161,6 +174,7 @@
                                tableView.register(UINib(nibName: "StudentInfo_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_TCell")
                                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)
        btn_cancel.isHidden = true
                }
                @IBAction func matchStoreAction(_ sender: UIButton) {
WanPai/Root/CardCenter/TCell/CardCenterTCell.swift
New file
@@ -0,0 +1,25 @@
//
//  CardCenterTCell.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/26.
//
import UIKit
import SDWebImage
class CardCenterTCell: UITableViewCell {
    @IBOutlet weak var img_bg: UIImageView!
    override func awakeFromNib() {
        super.awakeFromNib()
        selectionStyle = .none
        img_bg.cornerRadius = 10
    }
    func setHuiminCardItemModel(_ model:HuiminCardItemModel){
        img_bg.sd_setImage(with: URL(string: model.cover))
    }
}
WanPai/Root/CardCenter/TCell/CardCenterTCell.xib
New file
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="23506"/>
        <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" rowHeight="305" id="KGk-i7-Jjw" customClass="CardCenterTCell" customModule="WanPai" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="744" height="305"/>
            <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="744" height="305"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <view contentMode="scaleAspectFill" translatesAutoresizingMaskIntoConstraints="NO" id="qoX-GF-JqO">
                        <rect key="frame" x="20" y="0.0" width="704" height="285"/>
                        <subviews>
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_card_mask" translatesAutoresizingMaskIntoConstraints="NO" id="B5d-EI-Qow">
                                <rect key="frame" x="0.0" y="0.0" width="704" height="285"/>
                            </imageView>
                        </subviews>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstItem="B5d-EI-Qow" firstAttribute="leading" secondItem="qoX-GF-JqO" secondAttribute="leading" id="8tU-q8-yzI"/>
                            <constraint firstItem="B5d-EI-Qow" firstAttribute="top" secondItem="qoX-GF-JqO" secondAttribute="top" id="HOz-It-sNj"/>
                            <constraint firstAttribute="bottom" secondItem="B5d-EI-Qow" secondAttribute="bottom" id="O5P-V4-5bm"/>
                            <constraint firstAttribute="trailing" secondItem="B5d-EI-Qow" secondAttribute="trailing" id="vJD-FB-k2U"/>
                        </constraints>
                    </view>
                </subviews>
                <constraints>
                    <constraint firstAttribute="trailing" secondItem="qoX-GF-JqO" secondAttribute="trailing" constant="20" id="NyC-Hg-r3J"/>
                    <constraint firstAttribute="bottom" secondItem="qoX-GF-JqO" secondAttribute="bottom" constant="20" id="Z11-wO-SyL"/>
                    <constraint firstItem="qoX-GF-JqO" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="kgj-nB-pR9"/>
                    <constraint firstItem="qoX-GF-JqO" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="20" id="ro3-KW-P00"/>
                </constraints>
            </tableViewCellContentView>
            <connections>
                <outlet property="img_bg" destination="B5d-EI-Qow" id="s3S-hE-bX3"/>
            </connections>
            <point key="canvasLocation" x="453.43511450381675" y="94.014084507042256"/>
        </tableViewCell>
    </objects>
    <resources>
        <image name="icon_card_mask" width="350" height="140"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/CardCenter/VC/CardCenterAddUserVC.swift
New file
@@ -0,0 +1,154 @@
//
//  CardCenterAddUserVC.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/27.
//
import UIKit
import QMUIKit
import JQTools
class CardCenterAddUserVC: BaseVC {
    @IBOutlet weak var img_profile: UIImageView!
    @IBOutlet weak var tf_name: QMUITextField!
    @IBOutlet weak var tf_gender: UITextField!
    @IBOutlet weak var tf_idCard: UITextField!
    @IBOutlet weak var tf_phone: QMUITextField!
    @IBOutlet weak var btn_complete: UIButton!
    @IBOutlet weak var label_rule: UILabel!
    var studentModel = StudentProfileModel()
    var profileImg:UIImage?
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "添加人员"
        studentModel.headImg = "https://we-park-life.oss-cn-beijing.aliyuncs.com/img/b768075b77c248a189d48bcd60b6a3f8.jpg"
        img_profile.sd_setImage(with: URL(string: studentModel.headImg))
        yy_popBlock = {[unowned self] in
            self.navigationController?.popViewController(animated: true, {
                NotificationCenter.default.post(name: Noti_hiddenCardCenter_Add, object: false)
            })
        }
        let idCardView = IDCardView()
        idCardView.box.bind { [weak self] text in
            self?.tf_idCard.text = text
        }
        tf_idCard.inputView = idCardView
        let tap = UITapGestureRecognizer(target: self, action: #selector(userImgUploadAction))
        img_profile.isUserInteractionEnabled = true
        img_profile.addGestureRecognizer(tap)
        Services.myHuiminRuleInfo().subscribe(onNext: {[unowned self]data in
            self.label_rule.text = data.data?.addUserRemark.jq_filterFromHTML_1()
        }).disposed(by: disposeBag)
    }
    override func setUI() {
        tf_gender.delegate = self
    }
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let colors = [UIColor(hexStr: "#FD8C02").cgColor,
                      UIColor(hexStr: "#FD7202").cgColor,]
        btn_complete.jq_gradientNibColor(colorArr: colors, cornerRadius: 20)
        btn_complete.cornerRadius = 20
    }
    @objc func userImgUploadAction(){
        JQ_ImagePickerTool.getSharedInstance().singleImage({ [weak self] image in
            self?.img_profile.image = image
            self?.profileImg = image
        }, clipSize: CGSize(width: JQ_ScreenW, height: JQ_ScreenW))
    }
    @IBAction func completeAction(_ sender: UIButton) {
//        guard profileImg != nil  else {
//            alertError(msg: "请上传人员头像");return
//        }
        guard !tf_name.text!.isEmpty else {alertError(msg: tf_name.placeholder!);return}
        guard !tf_gender.text!.isEmpty else {alertError(msg: "请选择性别");return}
        if tf_gender.text?.isEmpty ?? true{
            alertError(msg: "请选择性别");return
        }
        if tf_idCard.text?.isEmpty ?? true{
            alertError(msg: "请输入身份证号");return
        }
        studentModel.name = tf_name.text ?? ""
        studentModel.idCard = tf_idCard.text ?? ""
        studentModel.phone = tf_phone.text ?? ""
        if profileImg != nil{
            showHUD("正在上传头像")
            profileImg!.uploadImgToService().subscribe(onNext: { [weak self] imgUrl in
//                guard let weakSelf = self else { return }
                self?.studentModel.headImg = imgUrl
                hiddenHUD()
                self?.publishData()
            }, onError: { error in
                hiddenHUD()
                alertError(msg: error.localizedDescription)
            }).disposed(by: disposeBag)
        }else{
            publishData()
        }
    }
    private func publishData(){
        Services.addParticipant(studentModel).subscribe(onNext: {[weak self] data in
            self?.addStudentSuccess(text: "添加成功")
        }).disposed(by: disposeBag)
    }
    private func addStudentSuccess(text:String){
        alertSuccess(msg: text)
        DispatchQueue.main.asyncAfter(deadline: .now()+1) {
            NotificationCenter.default.post(name: Noti_hiddenCardCenter_Add, object: false)
//            NotificationCenter.default.post(name: StudentUpdate_Nofi, object: ["needShow":true])
            self.navigationController?.popViewController()
        }
    }
    deinit{
        JQ_ImagePickerTool.destroy()
    }
}
extension CardCenterAddUserVC:UITextFieldDelegate{
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        if textField == tf_gender{
            let alertVC = UIAlertController(title: "性别", message: nil, preferredStyle: .actionSheet)
            alertVC.addAction(UIAlertAction(title: "男", style: .default) { _ in
                self.tf_gender.text = "男"
                self.studentModel.sex = .man
            })
            alertVC.addAction(UIAlertAction(title: "女", style: .default) { _ in
                self.tf_gender.text = "女"
                self.studentModel.sex = .woman
            })
            alertVC.addAction(UIAlertAction(title: "取消", style: .cancel))
            present(alertVC, animated: true)
            return false
        }
        return true
    }
}
WanPai/Root/CardCenter/VC/CardCenterAddUserVC.xib
New file
@@ -0,0 +1,291 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="23506"/>
        <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="CardCenterAddUserVC" customModule="WanPai" customModuleProvider="target">
            <connections>
                <outlet property="btn_complete" destination="H8r-kG-QaS" id="AJW-me-57m"/>
                <outlet property="img_profile" destination="DWX-NA-H7i" id="3Wa-7B-ble"/>
                <outlet property="label_rule" destination="jlC-ya-Z7x" id="XHU-R3-7tU"/>
                <outlet property="tf_gender" destination="L0m-wg-Lsi" id="vM5-Hn-I3H"/>
                <outlet property="tf_idCard" destination="GOW-Rm-Eeu" id="Gqx-hP-oyf"/>
                <outlet property="tf_name" destination="lvW-A7-Zz2" id="sK0-E7-pUe"/>
                <outlet property="tf_phone" destination="BYw-dm-CjF" id="7Ah-8T-yJH"/>
                <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>
                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="zHX-4j-dCx">
                    <rect key="frame" x="0.0" y="59" width="393" height="351"/>
                    <subviews>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IWS-eK-baw">
                            <rect key="frame" x="0.0" y="0.0" width="393" height="151"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="btn_add_large_1" translatesAutoresizingMaskIntoConstraints="NO" id="DWX-NA-H7i">
                                    <rect key="frame" x="145.66666666666666" y="24.666666666666671" width="102" height="102"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="102" id="BaO-nt-VUP"/>
                                        <constraint firstAttribute="width" constant="102" id="w1O-iX-7S6"/>
                                    </constraints>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="51"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                </imageView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="DWX-NA-H7i" firstAttribute="centerY" secondItem="IWS-eK-baw" secondAttribute="centerY" id="bPC-RQ-SGZ"/>
                                <constraint firstItem="DWX-NA-H7i" firstAttribute="centerX" secondItem="IWS-eK-baw" secondAttribute="centerX" id="f2o-N0-YRJ"/>
                                <constraint firstAttribute="height" constant="151" id="tNs-Uu-0DY"/>
                            </constraints>
                        </view>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mxP-f1-ysF">
                            <rect key="frame" x="0.0" y="151" width="393" height="50"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_item_p" translatesAutoresizingMaskIntoConstraints="NO" id="cJv-Jv-05E">
                                    <rect key="frame" x="15" y="19" width="12" height="12"/>
                                </imageView>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZBp-z0-Tvb">
                                    <rect key="frame" x="14" y="49.666666666666686" width="365" height="0.3333333333333357"/>
                                    <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="0.40000000000000002" id="gjw-t3-HPR"/>
                                    </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="Ilj-PF-IZh">
                                    <rect key="frame" x="30" y="16.666666666666657" width="28" height="17"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入姓名" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="lvW-A7-Zz2" customClass="QMUITextField">
                                    <rect key="frame" x="120" y="0.0" width="263" height="49.666666666666664"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <textInputTraits key="textInputTraits"/>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                            <integer key="value" value="6"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                </textField>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="trailing" secondItem="ZBp-z0-Tvb" secondAttribute="trailing" constant="14" id="0uJ-6o-qAf"/>
                                <constraint firstAttribute="trailing" secondItem="lvW-A7-Zz2" secondAttribute="trailing" constant="10" id="2C8-2O-MHr"/>
                                <constraint firstItem="cJv-Jv-05E" firstAttribute="centerY" secondItem="mxP-f1-ysF" secondAttribute="centerY" id="4eJ-Vq-KP3"/>
                                <constraint firstItem="ZBp-z0-Tvb" firstAttribute="top" secondItem="lvW-A7-Zz2" secondAttribute="bottom" id="5vz-aX-7KJ"/>
                                <constraint firstAttribute="bottom" secondItem="ZBp-z0-Tvb" secondAttribute="bottom" id="JSL-it-55L"/>
                                <constraint firstItem="lvW-A7-Zz2" firstAttribute="top" secondItem="mxP-f1-ysF" secondAttribute="top" id="Nqz-yh-MDL"/>
                                <constraint firstItem="Ilj-PF-IZh" firstAttribute="centerY" secondItem="cJv-Jv-05E" secondAttribute="centerY" id="SVv-HK-MMF"/>
                                <constraint firstItem="ZBp-z0-Tvb" firstAttribute="leading" secondItem="mxP-f1-ysF" secondAttribute="leading" constant="14" id="aOP-GD-ouC"/>
                                <constraint firstItem="cJv-Jv-05E" firstAttribute="leading" secondItem="mxP-f1-ysF" secondAttribute="leading" constant="15" id="fOP-VO-yEL"/>
                                <constraint firstAttribute="height" constant="50" id="nRm-c8-vNF"/>
                                <constraint firstItem="lvW-A7-Zz2" firstAttribute="leading" secondItem="mxP-f1-ysF" secondAttribute="leading" constant="120" id="otC-q9-Ujs"/>
                                <constraint firstItem="Ilj-PF-IZh" firstAttribute="leading" secondItem="cJv-Jv-05E" secondAttribute="trailing" constant="3" id="p8e-iT-l7q"/>
                            </constraints>
                        </view>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xcj-df-uEI">
                            <rect key="frame" x="0.0" y="201" width="393" height="50"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_item_p" translatesAutoresizingMaskIntoConstraints="NO" id="EI1-bL-f2F">
                                    <rect key="frame" x="15" y="19" width="12" height="12"/>
                                </imageView>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="384-Hn-thC">
                                    <rect key="frame" x="14" y="49.666666666666686" width="365" height="0.3333333333333357"/>
                                    <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="0.40000000000000002" id="nua-CF-bkK"/>
                                    </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="BB8-xb-nT6">
                                    <rect key="frame" x="30" y="16.666666666666686" width="28" height="17"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请选择" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="L0m-wg-Lsi">
                                    <rect key="frame" x="120" y="0.0" width="233" height="49.666666666666664"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <textInputTraits key="textInputTraits"/>
                                </textField>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_down_arrow" translatesAutoresizingMaskIntoConstraints="NO" id="6bQ-Ue-jug">
                                    <rect key="frame" x="366" y="21" width="13" height="8"/>
                                </imageView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="384-Hn-thC" firstAttribute="leading" secondItem="xcj-df-uEI" secondAttribute="leading" constant="14" id="6hU-Gt-MbD"/>
                                <constraint firstAttribute="trailing" secondItem="6bQ-Ue-jug" secondAttribute="trailing" constant="14" id="BZA-Nj-JNW"/>
                                <constraint firstItem="384-Hn-thC" firstAttribute="top" secondItem="L0m-wg-Lsi" secondAttribute="bottom" id="KpP-pc-8dk"/>
                                <constraint firstItem="L0m-wg-Lsi" firstAttribute="top" secondItem="xcj-df-uEI" secondAttribute="top" id="PKq-Vf-TF3"/>
                                <constraint firstItem="L0m-wg-Lsi" firstAttribute="leading" secondItem="xcj-df-uEI" secondAttribute="leading" constant="120" id="S7d-WV-2iA"/>
                                <constraint firstItem="EI1-bL-f2F" firstAttribute="leading" secondItem="xcj-df-uEI" secondAttribute="leading" constant="15" id="T8U-8B-uMn"/>
                                <constraint firstAttribute="trailing" secondItem="384-Hn-thC" secondAttribute="trailing" constant="14" id="aDy-Z5-B7s"/>
                                <constraint firstItem="6bQ-Ue-jug" firstAttribute="centerY" secondItem="xcj-df-uEI" secondAttribute="centerY" id="aox-Jf-ean"/>
                                <constraint firstAttribute="bottom" secondItem="384-Hn-thC" secondAttribute="bottom" id="dNM-Mr-ngc"/>
                                <constraint firstAttribute="height" constant="50" id="jpj-dP-YFN"/>
                                <constraint firstItem="BB8-xb-nT6" firstAttribute="centerY" secondItem="EI1-bL-f2F" secondAttribute="centerY" id="nxV-KC-n3t"/>
                                <constraint firstItem="BB8-xb-nT6" firstAttribute="leading" secondItem="EI1-bL-f2F" secondAttribute="trailing" constant="3" id="pYu-Yx-ctb"/>
                                <constraint firstItem="EI1-bL-f2F" firstAttribute="centerY" secondItem="xcj-df-uEI" secondAttribute="centerY" id="snS-0Q-vrs"/>
                                <constraint firstAttribute="trailing" secondItem="L0m-wg-Lsi" secondAttribute="trailing" constant="40" id="ugC-mo-8it"/>
                            </constraints>
                        </view>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VPf-dF-RZL">
                            <rect key="frame" x="0.0" y="251" width="393" height="50"/>
                            <subviews>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BlX-1M-rRX">
                                    <rect key="frame" x="14" y="49.666666666666686" width="365" height="0.3333333333333357"/>
                                    <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="0.40000000000000002" id="XoF-3o-kdn"/>
                                    </constraints>
                                </view>
                                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入身份证号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="GOW-Rm-Eeu">
                                    <rect key="frame" x="120" y="0.0" width="233" height="49.666666666666664"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
                                </textField>
                                <stackView opaque="NO" contentMode="scaleToFill" spacing="3" translatesAutoresizingMaskIntoConstraints="NO" id="cto-uX-pJg">
                                    <rect key="frame" x="14" y="16.666666666666686" width="70.666666666666671" height="17"/>
                                    <subviews>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_item_p" translatesAutoresizingMaskIntoConstraints="NO" id="gBC-6R-nbS">
                                            <rect key="frame" x="0.0" y="0.0" width="12" height="17"/>
                                        </imageView>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="身份证号" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HvJ-L3-pii">
                                            <rect key="frame" x="14.999999999999996" y="0.0" width="55.666666666666657" 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>
                                </stackView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="trailing" secondItem="GOW-Rm-Eeu" secondAttribute="trailing" constant="40" id="Gpa-w3-pcW"/>
                                <constraint firstItem="BlX-1M-rRX" firstAttribute="leading" secondItem="VPf-dF-RZL" secondAttribute="leading" constant="14" id="L7U-4R-Kjr"/>
                                <constraint firstItem="BlX-1M-rRX" firstAttribute="top" secondItem="GOW-Rm-Eeu" secondAttribute="bottom" id="Q8M-rh-LIG"/>
                                <constraint firstItem="GOW-Rm-Eeu" firstAttribute="leading" secondItem="VPf-dF-RZL" secondAttribute="leading" constant="120" id="SzG-sM-BUL"/>
                                <constraint firstItem="cto-uX-pJg" firstAttribute="leading" secondItem="VPf-dF-RZL" secondAttribute="leading" constant="14" id="T0S-fC-AFv"/>
                                <constraint firstAttribute="bottom" secondItem="BlX-1M-rRX" secondAttribute="bottom" id="aaC-66-tN2"/>
                                <constraint firstAttribute="trailing" secondItem="BlX-1M-rRX" secondAttribute="trailing" constant="14" id="gQp-uK-jwa"/>
                                <constraint firstAttribute="height" constant="50" id="pOH-AM-suW"/>
                                <constraint firstItem="cto-uX-pJg" firstAttribute="centerY" secondItem="VPf-dF-RZL" secondAttribute="centerY" id="rGv-id-ohP"/>
                                <constraint firstItem="GOW-Rm-Eeu" firstAttribute="top" secondItem="VPf-dF-RZL" secondAttribute="top" id="uR8-ta-2NB"/>
                            </constraints>
                        </view>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xiE-VZ-cR5">
                            <rect key="frame" x="0.0" y="301" width="393" height="50"/>
                            <subviews>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Epl-ON-Wxp">
                                    <rect key="frame" x="14" y="49.666666666666686" width="365" height="0.3333333333333357"/>
                                    <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="0.40000000000000002" id="Fsp-W6-o0l"/>
                                    </constraints>
                                </view>
                                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入联系方式" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="BYw-dm-CjF" customClass="QMUITextField">
                                    <rect key="frame" x="120" y="0.0" width="233" height="49.666666666666664"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                            <integer key="value" value="11"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                </textField>
                                <stackView opaque="NO" contentMode="scaleToFill" spacing="3" translatesAutoresizingMaskIntoConstraints="NO" id="b8P-3m-rMQ">
                                    <rect key="frame" x="13.999999999999996" y="16.666666666666686" width="55.666666666666657" height="17"/>
                                    <subviews>
                                        <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_item_p" translatesAutoresizingMaskIntoConstraints="NO" id="0RW-Qf-OgE">
                                            <rect key="frame" x="0.0" y="0.0" width="0.0" height="17"/>
                                        </imageView>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="联系方式" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="noU-cz-mpb">
                                            <rect key="frame" x="0.0" y="0.0" width="55.666666666666664" 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>
                                </stackView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="b8P-3m-rMQ" firstAttribute="centerY" secondItem="xiE-VZ-cR5" secondAttribute="centerY" id="MVl-fl-ScG"/>
                                <constraint firstItem="BYw-dm-CjF" firstAttribute="top" secondItem="xiE-VZ-cR5" secondAttribute="top" id="ORY-bZ-BZ9"/>
                                <constraint firstAttribute="trailing" secondItem="BYw-dm-CjF" secondAttribute="trailing" constant="40" id="Pok-zr-xPb"/>
                                <constraint firstItem="b8P-3m-rMQ" firstAttribute="leading" secondItem="xiE-VZ-cR5" secondAttribute="leading" constant="14" id="Qeg-YD-cWI"/>
                                <constraint firstItem="Epl-ON-Wxp" firstAttribute="leading" secondItem="xiE-VZ-cR5" secondAttribute="leading" constant="14" id="Ro9-1E-UXj"/>
                                <constraint firstAttribute="trailing" secondItem="Epl-ON-Wxp" secondAttribute="trailing" constant="14" id="biK-2y-DPI"/>
                                <constraint firstAttribute="bottom" secondItem="Epl-ON-Wxp" secondAttribute="bottom" id="c5r-f2-8rb"/>
                                <constraint firstItem="BYw-dm-CjF" firstAttribute="leading" secondItem="xiE-VZ-cR5" secondAttribute="leading" constant="120" id="oah-lc-2tz"/>
                                <constraint firstAttribute="height" constant="50" id="u8j-bK-dpu"/>
                                <constraint firstItem="Epl-ON-Wxp" firstAttribute="top" secondItem="BYw-dm-CjF" secondAttribute="bottom" id="xwL-XF-d1j"/>
                            </constraints>
                        </view>
                    </subviews>
                </stackView>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="请选择您要绑定使用本张“惠民卡”的人员,如果您是第1次购买,请点击右上角”添加人员“添加使用者”" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jlC-ya-Z7x">
                    <rect key="frame" x="14" y="421" width="365" height="28.666666666666686"/>
                    <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/>
                    <color key="textColor" name="FE6E0D"/>
                    <nil key="highlightedColor"/>
                </label>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="H8r-kG-QaS">
                    <rect key="frame" x="102" y="655" width="189" height="40"/>
                    <color key="backgroundColor" name="FE6E0D"/>
                    <constraints>
                        <constraint firstAttribute="width" constant="189" id="2RY-iN-hct"/>
                        <constraint firstAttribute="height" constant="40" id="gHV-Sj-i1G"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="确认"/>
                    <connections>
                        <action selector="completeAction:" destination="-1" eventType="touchUpInside" id="3lg-kh-zLp"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="zHX-4j-dCx" secondAttribute="trailing" id="0AC-NB-Efc"/>
                <constraint firstItem="zHX-4j-dCx" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="8Zg-E4-EJS"/>
                <constraint firstItem="jlC-ya-Z7x" firstAttribute="top" secondItem="zHX-4j-dCx" secondAttribute="bottom" constant="11" id="MWY-u2-AiH"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="jlC-ya-Z7x" secondAttribute="trailing" constant="14" id="Tgv-f4-tBY"/>
                <constraint firstItem="jlC-ya-Z7x" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="14" id="XF4-kg-ZxN"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="H8r-kG-QaS" secondAttribute="bottom" constant="123" id="mLh-nv-CL6"/>
                <constraint firstItem="H8r-kG-QaS" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="nQQ-3t-54M"/>
                <constraint firstItem="zHX-4j-dCx" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="topMargin" id="xs7-5f-hel"/>
            </constraints>
            <point key="canvasLocation" x="139" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="btn_add_large_1" width="112" height="112"/>
        <image name="icon_down_arrow" width="13" height="8"/>
        <image name="icon_item_p" width="12" 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>
WanPai/Root/CardCenter/VC/CardCenterDetailVC.swift
New file
@@ -0,0 +1,89 @@
//
//  CardCenterDetailVC.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/26.
//
import UIKit
import JQTools
import WebKit
import Combine
class CardCenterDetailVC: BaseVC {
    @IBOutlet weak var btn_payment: UIButton!
    @IBOutlet weak var biew_bottom: UIView!
    @IBOutlet weak var view_banner: UIView!
    @IBOutlet weak var label_cardName: UILabel!
    @IBOutlet weak var label_price: UILabel!
    @IBOutlet weak var label_useInfo: UILabel!
    @IBOutlet weak var label_limit: UILabel!
    @IBOutlet weak var webView: WKWebView!
    @IBOutlet weak var cons_web_hei: NSLayoutConstraint!
    private var id:Int!
    private var storeId:Int!
    private var subscriptions = Set<AnyCancellable>()
    private var detailModel:HuiminCardDetailModel?
    private lazy var bannerView:CommonBannerView = {
        let v = CommonBannerView()
        return v
    }()
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "惠民卡详情"
        Services.getHuiminDetail(id: id, storeId: storeId).subscribe(onNext: {[unowned self]data in
            if let m = data.data{
                self.detailModel = m
                self.label_cardName.text = m.huiMinName
                self.label_price.attributedText = AttributedStringbuilder.build().add(string: "¥", withFont: .systemFont(ofSize: 20, weight: .medium), withColor: UIColor(hexStr: "#EE0B0B"))
                    .add(string: m.salesMoney.jq_unit(), withFont: .systemFont(ofSize: 20, weight: .medium), withColor: UIColor(hexStr: "#EE0B0B"))
                    .add(string:"/人", withFont: .systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#EE0B0B")).mutableAttributedString
                self.label_useInfo.text = m.unBuyRemark
                self.label_limit.text = m.buyRemark
                self.webView.loadHTMLString(m.introduce.jq_wrapHtml(), baseURL: nil)
                let imgs = m.banner.components(separatedBy: ",")
                var items = [CommonBannerModel]()
                for (index,img) in imgs.enumerated(){
                    items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl))
                }
                bannerView.setItems(items: items)
            }
        }).disposed(by: disposeBag)
    }
    required init(id:Int,storeId:Int){
        super.init(nibName: nil, bundle: nil)
        self.id = id
        self.storeId = storeId
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func setUI() {
        btn_payment.cornerRadius = 20
        biew_bottom.jq_addShadows(shadowColor: .black.withAlphaComponent(0.06), corner: 3, radius: 5, offset: CGSizeMake(10, -10), opacity: 1)
        view_banner.addSubview(bannerView)
        bannerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.56)
    }
    override func setRx() {
        self.webView.scrollView.publisher(for: \.contentSize).sink {[unowned self] size in
            self.cons_web_hei.constant = size.height
        }.store(in: &subscriptions)
    }
    @IBAction func buyNowAction(_ sender: UIButton) {
        guard let m = detailModel else { return }
        CardCenterSheetView.show(m)
    }
}
WanPai/Root/CardCenter/VC/CardCenterDetailVC.xib
New file
@@ -0,0 +1,252 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="23506"/>
        <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="CardCenterDetailVC" customModule="WanPai" customModuleProvider="target">
            <connections>
                <outlet property="biew_bottom" destination="UvH-yi-oet" id="Eva-x8-GL1"/>
                <outlet property="btn_payment" destination="J4B-Wp-1lb" id="bvo-go-i37"/>
                <outlet property="cons_web_hei" destination="mNq-vI-2Xl" id="OqX-Ow-YIY"/>
                <outlet property="label_cardName" destination="gem-q8-tP4" id="RGx-1X-h0S"/>
                <outlet property="label_limit" destination="aY2-I8-jwa" id="TL7-5E-isk"/>
                <outlet property="label_price" destination="kbe-fI-u7Z" id="cxJ-Sm-PFC"/>
                <outlet property="label_useInfo" destination="R3I-hK-J6L" id="xVA-dl-VoM"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
                <outlet property="view_banner" destination="svJ-l8-0wE" id="er9-8g-WBX"/>
                <outlet property="webView" destination="Kgb-Eb-ct0" id="fm8-z2-a1y"/>
            </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="j5u-yC-3lm">
                    <rect key="frame" x="0.0" y="59" width="393" height="674"/>
                    <subviews>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="neQ-Hk-azv">
                            <rect key="frame" x="0.0" y="0.0" width="393" height="556.33333333333337"/>
                            <subviews>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="svJ-l8-0wE">
                                    <rect key="frame" x="0.0" y="0.0" width="393" height="221.66666666666666"/>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstAttribute="width" secondItem="svJ-l8-0wE" secondAttribute="height" multiplier="1:0.564" id="zUA-Wf-OLz"/>
                                    </constraints>
                                </view>
                                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Tsv-eq-RRP">
                                    <rect key="frame" x="0.0" y="221.66666666666669" width="393" height="234.66666666666669"/>
                                    <subviews>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MRq-zG-DKW">
                                            <rect key="frame" x="0.0" y="0.0" width="393" height="53"/>
                                            <subviews>
                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="H5g-yH-jhe">
                                                    <rect key="frame" x="13" y="52" width="380" height="1"/>
                                                    <color key="backgroundColor" red="0.59215686274509804" green="0.59215686274509804" blue="0.59215686274509804" alpha="0.22" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="1" id="qMQ-oy-FX8"/>
                                                    </constraints>
                                                </view>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gem-q8-tP4">
                                                    <rect key="frame" x="13.999999999999998" y="0.0" width="16.333333333333329" height="52"/>
                                                    <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="¥0/人" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kbe-fI-u7Z">
                                                    <rect key="frame" x="40.333333333333343" y="15.666666666666627" width="338.66666666666663" height="20.333333333333329"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <color key="textColor" red="0.93333333333333335" green="0.043137254901960784" blue="0.043137254901960784" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="53" id="55v-Qv-XpC"/>
                                                <constraint firstAttribute="trailing" secondItem="H5g-yH-jhe" secondAttribute="trailing" id="C3r-OK-Hj0"/>
                                                <constraint firstItem="kbe-fI-u7Z" firstAttribute="leading" secondItem="gem-q8-tP4" secondAttribute="trailing" constant="10" id="C8A-P0-pbq"/>
                                                <constraint firstItem="kbe-fI-u7Z" firstAttribute="centerY" secondItem="gem-q8-tP4" secondAttribute="centerY" id="Dnj-k0-EtY"/>
                                                <constraint firstAttribute="bottom" secondItem="H5g-yH-jhe" secondAttribute="bottom" id="MkK-hd-nUm"/>
                                                <constraint firstItem="gem-q8-tP4" firstAttribute="leading" secondItem="MRq-zG-DKW" secondAttribute="leading" constant="14" id="YhF-Rl-zT9"/>
                                                <constraint firstAttribute="trailing" secondItem="kbe-fI-u7Z" secondAttribute="trailing" constant="14" id="a5K-hN-FTN"/>
                                                <constraint firstItem="kbe-fI-u7Z" firstAttribute="centerY" secondItem="gem-q8-tP4" secondAttribute="centerY" id="ear-GE-xZU"/>
                                                <constraint firstItem="gem-q8-tP4" firstAttribute="top" secondItem="MRq-zG-DKW" secondAttribute="top" id="hVL-9t-Ve6"/>
                                                <constraint firstItem="H5g-yH-jhe" firstAttribute="top" secondItem="gem-q8-tP4" secondAttribute="bottom" id="w0e-xb-vYW"/>
                                                <constraint firstItem="H5g-yH-jhe" firstAttribute="leading" secondItem="MRq-zG-DKW" secondAttribute="leading" constant="13" id="yvM-jx-xyh"/>
                                            </constraints>
                                        </view>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="l89-wo-ZXq">
                                            <rect key="frame" x="0.0" y="53.000000000000007" width="393" height="98.666666666666686"/>
                                            <subviews>
                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Dk-bv-8cZ">
                                                    <rect key="frame" x="13" y="97.666666666666629" 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="SQf-IX-8EA"/>
                                                    </constraints>
                                                </view>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="使用说明" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="exf-iq-DtT">
                                                    <rect key="frame" x="14" y="14" width="365" height="22"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="22" id="jXo-GP-OTd"/>
                                                    </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="1231231123123112312311231231123123112312311231231123123112312311231231" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="R3I-hK-J6L">
                                                    <rect key="frame" x="14" y="48" width="365" height="33.666666666666657"/>
                                                    <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="calibratedRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstItem="R3I-hK-J6L" firstAttribute="leading" secondItem="l89-wo-ZXq" secondAttribute="leading" constant="14" id="2tZ-L3-KEG"/>
                                                <constraint firstAttribute="trailing" secondItem="8Dk-bv-8cZ" secondAttribute="trailing" id="7sS-N4-THQ"/>
                                                <constraint firstAttribute="trailing" secondItem="exf-iq-DtT" secondAttribute="trailing" constant="14" id="Alj-jO-gTb"/>
                                                <constraint firstItem="8Dk-bv-8cZ" firstAttribute="leading" secondItem="l89-wo-ZXq" secondAttribute="leading" constant="13" id="B4r-L0-9Dl"/>
                                                <constraint firstAttribute="trailing" secondItem="R3I-hK-J6L" secondAttribute="trailing" constant="14" id="Jq8-jw-zmI"/>
                                                <constraint firstItem="exf-iq-DtT" firstAttribute="leading" secondItem="l89-wo-ZXq" secondAttribute="leading" constant="14" id="VYy-i4-uS0"/>
                                                <constraint firstItem="exf-iq-DtT" firstAttribute="top" secondItem="l89-wo-ZXq" secondAttribute="top" constant="14" id="W01-AY-2LT"/>
                                                <constraint firstItem="8Dk-bv-8cZ" firstAttribute="top" secondItem="R3I-hK-J6L" secondAttribute="bottom" constant="16" id="ajg-ew-Cuh"/>
                                                <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="53" id="jay-oI-x2J"/>
                                                <constraint firstItem="R3I-hK-J6L" firstAttribute="top" secondItem="exf-iq-DtT" secondAttribute="bottom" constant="12" id="sVF-6S-uzt"/>
                                                <constraint firstAttribute="bottom" secondItem="8Dk-bv-8cZ" secondAttribute="bottom" id="vc7-om-CzV"/>
                                            </constraints>
                                        </view>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HXu-4C-sU8">
                                            <rect key="frame" x="0.0" y="151.66666666666663" width="393" height="83"/>
                                            <subviews>
                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uvP-gJ-d1J">
                                                    <rect key="frame" x="13" y="82.000000000000057" 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="ecK-aa-VGv"/>
                                                    </constraints>
                                                </view>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="使用期限" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wev-ky-Z67">
                                                    <rect key="frame" x="14" y="14" width="365" height="22"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="22" id="3EH-pU-J2Q"/>
                                                    </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="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aY2-I8-jwa">
                                                    <rect key="frame" x="14" y="48" width="365" height="18"/>
                                                    <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="calibratedRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstAttribute="trailing" secondItem="uvP-gJ-d1J" secondAttribute="trailing" id="0Ps-40-kcx"/>
                                                <constraint firstItem="aY2-I8-jwa" firstAttribute="leading" secondItem="HXu-4C-sU8" secondAttribute="leading" constant="14" id="4bh-it-ELD"/>
                                                <constraint firstAttribute="bottom" secondItem="uvP-gJ-d1J" secondAttribute="bottom" id="CHI-hI-ofO"/>
                                                <constraint firstItem="aY2-I8-jwa" firstAttribute="top" secondItem="wev-ky-Z67" secondAttribute="bottom" constant="12" id="QE4-Wt-Em9"/>
                                                <constraint firstItem="uvP-gJ-d1J" firstAttribute="top" secondItem="aY2-I8-jwa" secondAttribute="bottom" constant="16" id="RQL-KA-HdW"/>
                                                <constraint firstAttribute="trailing" secondItem="wev-ky-Z67" secondAttribute="trailing" constant="14" id="VkJ-wf-EgT"/>
                                                <constraint firstItem="wev-ky-Z67" firstAttribute="leading" secondItem="HXu-4C-sU8" secondAttribute="leading" constant="14" id="WrS-WJ-uOa"/>
                                                <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="53" id="X3e-KH-RIo"/>
                                                <constraint firstAttribute="trailing" secondItem="aY2-I8-jwa" secondAttribute="trailing" constant="14" id="jFs-73-wKV"/>
                                                <constraint firstItem="uvP-gJ-d1J" firstAttribute="leading" secondItem="HXu-4C-sU8" secondAttribute="leading" constant="13" id="mRB-sg-sAp"/>
                                                <constraint firstItem="wev-ky-Z67" firstAttribute="top" secondItem="HXu-4C-sU8" secondAttribute="top" constant="14" id="xJJ-HZ-A8r"/>
                                            </constraints>
                                        </view>
                                    </subviews>
                                </stackView>
                                <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Kgb-Eb-ct0">
                                    <rect key="frame" x="0.0" y="456.33333333333337" width="393" height="100"/>
                                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="100" id="mNq-vI-2Xl"/>
                                    </constraints>
                                    <wkWebViewConfiguration key="configuration">
                                        <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
                                        <wkPreferences key="preferences"/>
                                    </wkWebViewConfiguration>
                                </wkWebView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="bottom" secondItem="Kgb-Eb-ct0" secondAttribute="bottom" id="8Br-LB-gZe"/>
                                <constraint firstItem="Kgb-Eb-ct0" firstAttribute="top" secondItem="Tsv-eq-RRP" secondAttribute="bottom" id="BPV-w2-jWQ"/>
                                <constraint firstItem="svJ-l8-0wE" firstAttribute="leading" secondItem="neQ-Hk-azv" secondAttribute="leading" id="Gfh-Am-vbk"/>
                                <constraint firstItem="Kgb-Eb-ct0" firstAttribute="leading" secondItem="neQ-Hk-azv" secondAttribute="leading" id="RsL-cl-nKF"/>
                                <constraint firstAttribute="trailing" secondItem="svJ-l8-0wE" secondAttribute="trailing" id="UY8-4v-JeS"/>
                                <constraint firstAttribute="trailing" secondItem="Tsv-eq-RRP" secondAttribute="trailing" id="VMZ-Tc-XjM"/>
                                <constraint firstAttribute="trailing" secondItem="Kgb-Eb-ct0" secondAttribute="trailing" id="bzT-g2-b4j"/>
                                <constraint firstItem="Tsv-eq-RRP" firstAttribute="top" secondItem="svJ-l8-0wE" secondAttribute="bottom" id="cw0-8H-uz1"/>
                                <constraint firstItem="Tsv-eq-RRP" firstAttribute="leading" secondItem="neQ-Hk-azv" secondAttribute="leading" id="gbo-od-pfZ"/>
                                <constraint firstItem="svJ-l8-0wE" firstAttribute="top" secondItem="neQ-Hk-azv" secondAttribute="top" id="vap-kq-lD7"/>
                            </constraints>
                        </view>
                    </subviews>
                    <constraints>
                        <constraint firstItem="neQ-Hk-azv" firstAttribute="leading" secondItem="j5u-yC-3lm" secondAttribute="leading" id="A7a-Jn-gZU"/>
                        <constraint firstAttribute="trailing" secondItem="neQ-Hk-azv" secondAttribute="trailing" id="DFM-4A-WGp"/>
                        <constraint firstItem="neQ-Hk-azv" firstAttribute="centerX" secondItem="j5u-yC-3lm" secondAttribute="centerX" id="KA5-pV-v0C"/>
                        <constraint firstAttribute="bottom" secondItem="neQ-Hk-azv" secondAttribute="bottom" id="XOJ-K4-KTM"/>
                        <constraint firstItem="neQ-Hk-azv" firstAttribute="top" secondItem="j5u-yC-3lm" secondAttribute="top" id="nUa-mi-90Y"/>
                    </constraints>
                </scrollView>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UvH-yi-oet">
                    <rect key="frame" x="0.0" y="743" width="393" height="75"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="J4B-Wp-1lb">
                            <rect key="frame" x="16" y="18" width="361" height="40"/>
                            <color key="backgroundColor" name="FE6E0D"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="40" id="GKq-jh-TSe"/>
                            </constraints>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="立即购买"/>
                            <connections>
                                <action selector="buyNowAction:" destination="-1" eventType="touchUpInside" id="RpL-MQ-uQM"/>
                            </connections>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="J4B-Wp-1lb" firstAttribute="top" secondItem="UvH-yi-oet" secondAttribute="top" constant="18" id="8PR-5K-ltq"/>
                        <constraint firstAttribute="trailing" secondItem="J4B-Wp-1lb" secondAttribute="trailing" constant="16" id="b1O-GZ-4tY"/>
                        <constraint firstItem="J4B-Wp-1lb" firstAttribute="leading" secondItem="UvH-yi-oet" secondAttribute="leading" constant="16" id="jBq-AP-odU"/>
                        <constraint firstAttribute="height" constant="75" id="kLz-kg-CZ7"/>
                    </constraints>
                </view>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="j5u-yC-3lm" secondAttribute="trailing" id="He2-uT-VpD"/>
                <constraint firstItem="UvH-yi-oet" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="JnU-j0-Hu4"/>
                <constraint firstItem="j5u-yC-3lm" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="OCo-Pd-NTM"/>
                <constraint firstItem="j5u-yC-3lm" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="R6x-AT-THf"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="UvH-yi-oet" secondAttribute="bottom" id="S2y-aO-qg5"/>
                <constraint firstItem="UvH-yi-oet" firstAttribute="trailing" secondItem="fnl-2z-Ty3" secondAttribute="trailing" id="Tec-Xf-CBm"/>
                <constraint firstItem="UvH-yi-oet" firstAttribute="top" secondItem="j5u-yC-3lm" secondAttribute="bottom" constant="10" id="zUe-kf-xyW"/>
            </constraints>
            <point key="canvasLocation" x="43.511450381679388" y="19.718309859154932"/>
        </view>
    </objects>
    <resources>
        <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>
WanPai/Root/CardCenter/VC/CardCenterVC.swift
New file
@@ -0,0 +1,114 @@
//
//  CardCenterVC.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/26.
//
import UIKit
import MJRefresh
import WebKit
import JQTools
class CardCenterVC: BaseVC {
    private var sotreId:Int?
    private var tableView:UITableView!
    private var webView:WKWebView!
    private var page:Int = 1
    private var model:HuiminCardModel?
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{
            if let deserModel = HomeStoreModel.deserialize(from: storeStr){
                self.sotreId = deserModel.storeId
                tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: {[unowned self] in
                    self.getData()
                })
                tableView.mj_header?.ignoredScrollViewContentInsetTop = 30
                tableView.mj_header?.beginRefreshing()
            }
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
            title = "惠民卡"
    }
    override func setRx() {
        NotificationCenter.default.rx.notification(UpdateCurrentStore_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[unowned self] _ in
            self.getData()
        }).disposed(by: disposeBag)
    }
    private func getData(){
        page = 1
        Services.getHuiminAgreementAndList(page: page, storeId: sotreId!).subscribe(onNext: {data in
            self.model = data.data
            if data.data?.showType == 2{
                self.webView.isHidden = true
                self.tableView.reloadData()
            }else{
                self.webView.isHidden = true
                self.webView.isHidden = false
                let htmlString = data.data?.introduce.jq_wrapHtml() ?? ""
                self.webView.loadHTMLString(htmlString, baseURL: nil)
            }
            self.tableView.mj_header?.endRefreshing()
        },onError: { _ in
            self.tableView.mj_header?.endRefreshing()
        }).disposed(by: disposeBag)
    }
    override func setUI() {
        tableView = UITableView(frame: .zero, style: .plain)
        tableView.showsVerticalScrollIndicator = false
        tableView.separatorStyle = .none
        tableView.contentInset = UIEdgeInsets(top: 31, left: 0, bottom: 0, right: 0)
        tableView.register(UINib(nibName: "CardCenterTCell", bundle: nil), forCellReuseIdentifier: "_CardCenterTCell")
        tableView.delegate = self
        tableView.dataSource = self
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
        let configuration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: configuration)
        webView.isHidden = true
        view.addSubview(webView)
        webView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
    }
}
extension CardCenterVC:UITableViewDelegate{
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let model = model!.cardList[indexPath.row]
        let vc = CardCenterDetailVC(id:model.id,storeId: sotreId!)
        push(vc: vc)
    }
}
extension CardCenterVC:UITableViewDataSource{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return model?.cardList.count ?? 0
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let model = model!.cardList[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "_CardCenterTCell") as! CardCenterTCell
        cell.setHuiminCardItemModel(model)
        return cell
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return (JQ_ScreenW - 40) * 0.4841 + 20
    }
}
WanPai/Root/CardCenter/View/CardCenterSheetView.swift
New file
@@ -0,0 +1,310 @@
//
//  CardCenterSheetView.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/26.
//
import UIKit
import JQTools
import QMUIKit
import RxSwift
import RxSwift
import RxRelay
import Combine
let Noti_hiddenCardCenter_Add = Notification.Name.init("Noti_hiddenCardCenter_Add")
let Noti_showSheetView = Notification.Name.init("Noti_showSheetView")
class CardCenterSheetView: UIView,JQNibView{
    @IBOutlet weak var cons_bottom: NSLayoutConstraint!
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var cons_table_height: NSLayoutConstraint!
    @IBOutlet weak var view_container: UIView!
    @IBOutlet weak var btn_buyment: UIButton!
    @IBOutlet weak var btn_addUser: QMUIButton!
    @IBOutlet weak var text_view: UITextView!
    @IBOutlet weak var label_price: UILabel!
    @IBOutlet weak var btn_agreement: UIButton!
    @IBOutlet weak var text_view_height: NSLayoutConstraint!
    @IBOutlet weak var label_rule: UILabel!
    let disposeBag = DisposeBag()
    private var subscriptions = Set<AnyCancellable>()
    private var model:HuiminCardDetailModel?
    private var selectStudents = [StudentProfile1Model]()
    private var students = [StudentProfile1Model]()
    override func awakeFromNib() {
        super.awakeFromNib()
        btn_addUser.imagePosition = .right
        btn_addUser.spacingBetweenImageAndTitle = 3
        cons_bottom.constant = -(JQ_ScreenW * 1.1)
        text_view.isScrollEnabled = false
        text_view.isEditable = false
        tableView.delegate = self
        tableView.dataSource = self
        tableView.separatorStyle = .none
        tableView.isScrollEnabled = false
        tableView.register(UINib(nibName: "StudentInfo_6_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_6_TCell")
        text_view.isHidden = true
        btn_agreement.isHidden = true
        label_rule.isHidden = true
        text_view.automaticallyAdjustsScrollIndicatorInsets = false
        text_view.contentInset = .init(top: -8, left: 0, bottom: 0, right: 0)
        alpha = 0
        layoutIfNeeded()
        text_view.delegate = self
        label_price.font = UIFont(name: "DIN Alternate Bold", size: 24)
        tableView.publisher(for: \.contentSize).sink {[unowned self] size in
            if size.height > 250{
                self.tableView.isScrollEnabled = true
            }else{
                self.tableView.isScrollEnabled = false
            }
            self.cons_table_height.constant = min(250,size.height)
        }.store(in: &subscriptions)
        text_view.publisher(for: \.contentSize).sink {[unowned self] size in
            self.text_view_height.constant = size.height
        }.store(in: &subscriptions)
        NotificationCenter.default.rx.notification(Noti_hiddenCardCenter_Add).take(until: self.rx.deallocated).subscribe(onNext: {[unowned self] noti in
            guard let state = noti.object as? Bool else { return }
            self.alpha = state ? 0:1
        }).disposed(by: disposeBag)
        NotificationCenter.default.rx.notification(StudentUpdate_Nofi, object: nil).subscribe(onNext: {value in
            var needShow = true
            if let v = value.object as? [String:Bool]{
                needShow = v["needShow"] ?? true
            }
            self.alpha = 1
            self.getStudentList(needShow)
        }).disposed(by: disposeBag)
        NotificationCenter.default.rx.notification(Noti_showSheetView, object: nil).subscribe(onNext: {value in
            self.alpha = 1
        }).disposed(by: disposeBag)
        Services.myHuiminRuleInfo().subscribe(onNext: {[unowned self]data in
            self.label_rule.text = data.data?.selectUserRemark.jq_filterFromHTML_1()
        }).disposed(by: disposeBag)
    }
    static func show(_ model:HuiminCardDetailModel){
        let studentChooseView = CardCenterSheetView.jq_loadNibView()
        studentChooseView.model = model
        studentChooseView.frame = sceneDelegate?.window?.frame ?? .zero
        sceneDelegate?.window?.addSubview(studentChooseView)
        studentChooseView.cons_bottom.constant = 0
        let font:UIFont = .systemFont(ofSize: 12, weight: .medium)
        let normalColor:UIColor = .black.withAlphaComponent(0.6)
        let linkColor:UIColor = UIColor(hexString: "#0078CD")!.withAlphaComponent(0.7)
        studentChooseView.label_price.text = 0.currency()
        studentChooseView.label_price.font = UIFont.init(name: "DIN Alternate Bold", size: 24)
        let attributedStringbuilder = AttributedStringbuilder.build()
        attributedStringbuilder.add(string: "我已阅读并同意", withFont: font, withColor: normalColor)
        for (index,v) in model.agreementSettings.enumerated(){
            attributedStringbuilder.addLink(string: "《\(v.agreementName)》", url: URL(string: "wanpai://page?index=\(index)")!, withFont: font, linkColor: linkColor)
        }
        studentChooseView.text_view.attributedText = attributedStringbuilder.mutableAttributedString
        UIView.animate(withDuration: 0.4) {
            studentChooseView.alpha = 1
            studentChooseView.layoutIfNeeded()
        }
        studentChooseView.getStudentList()
    }
    private func getStudentList(_ needShow:Bool = true){
        Services.startCourceStudentList().subscribe(onNext: {data in
            self.students = data.data ?? []
            if (data.data?.count ?? 0) > 0 && needShow{
                StudentChoose3View.show(defaultStu: Set(self.selectStudents)) { m in
                    self.selectStudents = m.shuffled()
                    self.tableView.reloadData()
                    self.updatePrice()
                }
            }
        }).disposed(by: self.disposeBag)
    }
    private func updatePrice(){
        let totalMoney = (model?.salesMoney ?? 0) * Double(selectStudents.count)
        label_price.text = totalMoney.currency()
        self.text_view.isHidden = self.selectStudents.count > 0 ? false:true
        self.btn_agreement.isHidden = self.selectStudents.count > 0 ? false:true
        self.label_rule.isHidden = self.selectStudents.count > 0 ? false:true
    }
    @IBAction func addPersionAction(_ sender: QMUIButton) {
        if students.count == 0{
            NotificationCenter.default.post(name: Noti_hiddenCardCenter_Add, object: true)
            let vc = CardCenterAddUserVC()
            JQ_currentNavigationController().pushViewController(vc)
        }else{
            StudentChoose3View.show(defaultStu: Set(selectStudents)) { m in
                self.selectStudents = m.shuffled()
                self.tableView.reloadData()
                self.updatePrice()
            }
        }
    }
    @IBAction func closeAction(_ sender: UIButton) {
        self.cons_bottom.constant = -(JQ_ScreenW * 1.1)
        UIView.animate(withDuration: 0.4) {
            self.alpha = 0
            self.layoutIfNeeded()
        } completion: { _ in
            self.removeFromSuperview()
        }
    }
    @IBAction func agreementAction(_ sender: UIButton) {
        sender.isSelected = !sender.isSelected
    }
    @IBAction func buyNowAction(_ sender: UIButton) {
        guard let m = model else{return}
        guard btn_agreement.isSelected else {
            let v = m.agreementSettings.map { m in
                return "《\(m.agreementName)》"
            }.joined(separator: " ")
            alertError(msg: "请先阅读协议\(v)");return
        }
        guard selectStudents.count != 0 else{
            alertError(msg: "请选择人员");return
        }
        let totalMoney = (model?.salesMoney ?? 0) * Double(selectStudents.count)
        updatePrice()
        let studentIds = selectStudents.map({"\($0.stuId)"}).joined(separator: ",")
        PaymentView.show(enumType: .huiminCard, money: (ali: totalMoney, wx: totalMoney, coin: nil, course: nil, integral: nil)) {[unowned self] type in
            Services.payHuiminCard(id: m.id, payType: type, studentIds: studentIds).subscribe(onNext: { data in
                if let m = data.data{
                    self.cons_bottom.constant = -(JQ_ScreenW * 1.1)
                    UIView.animate(withDuration: 0.4) {
                        self.alpha = 0
                        self.layoutIfNeeded()
                    } completion: { _ in
                        self.removeFromSuperview()
                        switch type {
                            case .wechat:
                                YYPaymentManager.shared.sendPaymentRequest(YYWeChatPayRequest(partnerId: m.partnerid, prepayId: m.prepayid, package: m.package, nonceStr: m.noncestr, timeStamp: m.timestamp, sign: m.sign)) { result in
                                    switch result {
                                        case .success:
                                            let vc = PaymentResultVC(result: .success, objType: .huimin)
                                            JQ_currentViewController().jq_push(vc: vc)
                                        case .cancel:
                                            let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .huimin) {[unowned self] in
                                                self.buyNowAction(self.btn_buyment)
                                            }
                                            JQ_currentViewController().jq_push(vc: vc)
                                        case .failure(_):
                                            let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .huimin){[unowned self] in
                                                self.buyNowAction(self.btn_buyment)
                                            }
                                            JQ_currentViewController().jq_push(vc: vc)
                                    }
                                }
                            case .aliPay:
                                YYPaymentManager.shared.sendPaymentRequest(YYAlipayRequest(orderString: data.data?.orderString ?? "")) { result in
                                    switch result {
                                        case .success:
                                            let vc = PaymentResultVC(result: .success, objType: .huimin)
                                            JQ_currentViewController().jq_push(vc: vc)
                                        case .cancel:
                                            let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .huimin) {[unowned self] in
                                                self.buyNowAction(self.btn_buyment)
                                            }
                                            JQ_currentViewController().jq_push(vc: vc)
                                        case .failure(_):
                                            let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .huimin){[unowned self] in
                                                self.buyNowAction(self.btn_buyment)
                                            }
                                            JQ_currentViewController().jq_push(vc: vc)
                                    }
                                }
                            default:
                                let vc = PaymentResultVC(result: .success, objType: .huimin)
                                JQ_currentViewController().jq_push(vc: vc)
                        }
                    }
                }
            }).disposed(by: self.disposeBag)
        }
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        DispatchQueue.main.asyncAfter(wallDeadline: .now()+0.1) {
            self.view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 20)
        }
    }
}
extension CardCenterSheetView:UITextViewDelegate{
    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
        // 处理链接点击事件
        guard let index = Int(URL.jq_params?["index"] ?? "") else {
            return false
        }
        self.alpha = 0
        let sub = model!.agreementSettings[index]
        let vc = CommonWebVC(type: .user, customTitle: sub.agreementName, content: sub.agreementContent, needBackBtn: true)
        JQ_currentViewController().jq_push(vc: vc)
        return false // 返回 false 表示不进一步处理链接(例如,不自动打开链接)
    }
}
extension CardCenterSheetView:UITableViewDelegate{
}
extension CardCenterSheetView:UITableViewDataSource{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return selectStudents.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentInfo_6_TCell", for: indexPath) as! StudentInfo_6_TCell
        cell.indexPath = indexPath
        cell.activityDetailPartModel = selectStudents[indexPath.row]
        cell.deleteAt = {[unowned self]index in
            self.selectStudents.remove(at: index)
            tableView.reloadData()
            self.updatePrice()
        }
        return cell
    }
}
WanPai/Root/CardCenter/View/CardCenterSheetView.xib
New file
@@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="23506"/>
        <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="CardCenterSheetView" customModule="WanPai" customModuleProvider="target">
            <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="Dmv-6M-oIS">
                    <rect key="frame" x="0.0" y="414.33333333333326" width="393" height="437.66666666666674"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="立即购买" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7ML-ec-5XF">
                            <rect key="frame" x="160.66666666666666" y="25" width="71.666666666666657" height="21"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="21" id="9ye-ZB-S9C"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uUb-ON-HeD">
                            <rect key="frame" x="353" y="24.666666666666686" width="20" height="22"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" image="btn_close_2"/>
                            <connections>
                                <action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="ylB-lM-GZG"/>
                            </connections>
                        </button>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1Ue-WJ-3bR">
                            <rect key="frame" x="0.0" y="320.66666666666669" width="393" height="75"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8Uw-le-5KY">
                                    <rect key="frame" x="199" y="17.666666666666629" width="180" height="40"/>
                                    <color key="backgroundColor" name="FE6E0D"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="40" id="PXe-Lj-sGt"/>
                                        <constraint firstAttribute="width" constant="180" id="ZCC-Vd-WLr"/>
                                    </constraints>
                                    <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="立即购买"/>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="20"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                    <connections>
                                        <action selector="buyNowAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="JTo-ke-B3X"/>
                                    </connections>
                                </button>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="合计" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uK1-uX-Auk">
                                    <rect key="frame" x="14" y="29" width="28" height="17"/>
                                    <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                    <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="2GF-2e-CsH">
                                    <rect key="frame" x="52" y="27" width="20.666666666666671" height="21"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                    <color key="textColor" name="FE6E0D"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IdW-Zc-7HK">
                                    <rect key="frame" x="0.0" y="0.0" width="393" height="1"/>
                                    <color key="backgroundColor" red="0.89411764705882346" green="0.89411764705882346" blue="0.89411764705882346" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="1" id="wwZ-uS-NOf"/>
                                    </constraints>
                                </view>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="2GF-2e-CsH" firstAttribute="centerY" secondItem="uK1-uX-Auk" secondAttribute="centerY" id="1AH-eD-aGv"/>
                                <constraint firstAttribute="height" constant="75" id="71e-AZ-RgY"/>
                                <constraint firstItem="8Uw-le-5KY" firstAttribute="centerY" secondItem="1Ue-WJ-3bR" secondAttribute="centerY" id="UCe-pY-E7h"/>
                                <constraint firstItem="uK1-uX-Auk" firstAttribute="centerY" secondItem="1Ue-WJ-3bR" secondAttribute="centerY" id="Vhc-s6-is8"/>
                                <constraint firstItem="IdW-Zc-7HK" firstAttribute="leading" secondItem="1Ue-WJ-3bR" secondAttribute="leading" id="W9T-qw-OSy"/>
                                <constraint firstItem="2GF-2e-CsH" firstAttribute="leading" secondItem="uK1-uX-Auk" secondAttribute="trailing" constant="10" id="esn-ln-4Dv"/>
                                <constraint firstItem="uK1-uX-Auk" firstAttribute="leading" secondItem="1Ue-WJ-3bR" secondAttribute="leading" constant="14" id="ga3-Ff-Nt8"/>
                                <constraint firstAttribute="trailing" secondItem="8Uw-le-5KY" secondAttribute="trailing" constant="14" id="pE3-ZN-bBv"/>
                                <constraint firstAttribute="trailing" secondItem="IdW-Zc-7HK" secondAttribute="trailing" id="xcQ-T6-S1D"/>
                                <constraint firstItem="IdW-Zc-7HK" firstAttribute="top" secondItem="1Ue-WJ-3bR" secondAttribute="top" id="ztr-GG-LHP"/>
                            </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="iMf-wL-jMK">
                            <rect key="frame" x="13.999999999999996" y="76" width="55.666666666666657" height="17"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="17" id="vno-0K-HcC"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="t1u-Um-DQ1" customClass="QMUIButton">
                            <rect key="frame" x="306" y="76" width="72" height="17"/>
                            <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_add_1">
                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.56999999999999995" colorSpace="custom" customColorSpace="sRGB"/>
                            </state>
                            <connections>
                                <action selector="addPersionAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="0ee-F8-unF"/>
                            </connections>
                        </button>
                        <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="xf9-5v-5BE">
                            <rect key="frame" x="14" y="118.00000000000006" width="365" height="80"/>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="80" id="iVi-HV-o6B"/>
                            </constraints>
                        </tableView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="请选择您要绑定使用本张“惠民卡”的人员,如果您是第1次购买,请点击右上角”添加人员“添加使用者”" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D3R-6U-qpx">
                            <rect key="frame" x="14" y="211.00000000000006" width="365" height="33.666666666666657"/>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                            <color key="textColor" name="FE6E0D"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kB3-1G-xSk">
                            <rect key="frame" x="14" y="267.66666666666669" width="22" height="22"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="22" id="2nW-js-vH8"/>
                                <constraint firstAttribute="width" constant="22" id="Pao-2s-Csu"/>
                            </constraints>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" image="btn_select_u"/>
                            <state key="selected" image="btn_select"/>
                            <connections>
                                <action selector="agreementAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="cnR-h4-hGJ"/>
                            </connections>
                        </button>
                        <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="6do-vD-Z6i">
                            <rect key="frame" x="42" y="271.66666666666669" width="337" height="35"/>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="35" id="3KD-xV-b9j"/>
                            </constraints>
                            <color key="textColor" systemColor="labelColor"/>
                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
                            <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
                        </textView>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="D3R-6U-qpx" firstAttribute="leading" secondItem="Dmv-6M-oIS" secondAttribute="leading" constant="14" id="2ju-1P-nqD"/>
                        <constraint firstAttribute="trailing" secondItem="t1u-Um-DQ1" secondAttribute="trailing" constant="15" id="7MF-gl-Q4o"/>
                        <constraint firstItem="1Ue-WJ-3bR" firstAttribute="leading" secondItem="Dmv-6M-oIS" secondAttribute="leading" id="8Em-Dm-2F5"/>
                        <constraint firstAttribute="trailing" secondItem="6do-vD-Z6i" secondAttribute="trailing" constant="14" id="LJp-gD-UQS"/>
                        <constraint firstItem="uUb-ON-HeD" firstAttribute="centerY" secondItem="7ML-ec-5XF" secondAttribute="centerY" id="N4H-rH-5fq"/>
                        <constraint firstItem="iMf-wL-jMK" firstAttribute="leading" secondItem="Dmv-6M-oIS" secondAttribute="leading" constant="14" id="Qwl-g4-VYv"/>
                        <constraint firstItem="6do-vD-Z6i" firstAttribute="top" secondItem="D3R-6U-qpx" secondAttribute="bottom" constant="27" id="UsW-bP-DUr"/>
                        <constraint firstItem="kB3-1G-xSk" firstAttribute="top" secondItem="6do-vD-Z6i" secondAttribute="top" constant="-4" id="W4H-tB-cRX"/>
                        <constraint firstItem="xf9-5v-5BE" firstAttribute="top" secondItem="iMf-wL-jMK" secondAttribute="bottom" constant="25" id="Wiu-U5-E5e"/>
                        <constraint firstAttribute="trailing" secondItem="xf9-5v-5BE" secondAttribute="trailing" constant="14" id="ZlM-RF-sA1"/>
                        <constraint firstItem="t1u-Um-DQ1" firstAttribute="centerY" secondItem="iMf-wL-jMK" secondAttribute="centerY" id="ZnK-Em-vsN"/>
                        <constraint firstItem="6do-vD-Z6i" firstAttribute="leading" secondItem="kB3-1G-xSk" secondAttribute="trailing" constant="6" id="ap8-x2-7SJ"/>
                        <constraint firstItem="D3R-6U-qpx" firstAttribute="top" secondItem="xf9-5v-5BE" secondAttribute="bottom" constant="13" id="dCv-Az-tC0"/>
                        <constraint firstItem="kB3-1G-xSk" firstAttribute="leading" secondItem="Dmv-6M-oIS" secondAttribute="leading" constant="14" id="iTW-cN-d6Q"/>
                        <constraint firstItem="iMf-wL-jMK" firstAttribute="top" secondItem="7ML-ec-5XF" secondAttribute="bottom" constant="30" id="j6A-Ho-eBK"/>
                        <constraint firstItem="xf9-5v-5BE" firstAttribute="leading" secondItem="Dmv-6M-oIS" secondAttribute="leading" constant="14" id="k7e-jC-AiQ"/>
                        <constraint firstItem="7ML-ec-5XF" firstAttribute="centerX" secondItem="Dmv-6M-oIS" secondAttribute="centerX" id="lND-vS-cjZ"/>
                        <constraint firstAttribute="trailing" secondItem="uUb-ON-HeD" secondAttribute="trailing" constant="20" id="oAU-Jw-UDh"/>
                        <constraint firstAttribute="bottomMargin" secondItem="1Ue-WJ-3bR" secondAttribute="bottom" id="poN-6s-FIl"/>
                        <constraint firstAttribute="trailing" secondItem="D3R-6U-qpx" secondAttribute="trailing" constant="14" id="tmn-Lh-8ME"/>
                        <constraint firstItem="7ML-ec-5XF" firstAttribute="top" secondItem="Dmv-6M-oIS" secondAttribute="top" constant="25" id="wH2-Xr-ENO"/>
                        <constraint firstAttribute="trailing" secondItem="1Ue-WJ-3bR" secondAttribute="trailing" id="x2M-A9-Abk"/>
                        <constraint firstItem="1Ue-WJ-3bR" firstAttribute="top" secondItem="6do-vD-Z6i" secondAttribute="bottom" constant="14" id="xGO-kZ-eUd"/>
                    </constraints>
                </view>
            </subviews>
            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstAttribute="bottom" secondItem="Dmv-6M-oIS" secondAttribute="bottom" id="Fxh-4P-J6S"/>
                <constraint firstAttribute="trailing" secondItem="Dmv-6M-oIS" secondAttribute="trailing" id="P7p-sp-rQH"/>
                <constraint firstItem="Dmv-6M-oIS" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="rsj-k1-fRh"/>
            </constraints>
            <connections>
                <outlet property="btn_addUser" destination="t1u-Um-DQ1" id="s4z-Qy-eSE"/>
                <outlet property="btn_agreement" destination="kB3-1G-xSk" id="BeF-6D-b2C"/>
                <outlet property="btn_buyment" destination="8Uw-le-5KY" id="5th-Af-0vn"/>
                <outlet property="cons_bottom" destination="Fxh-4P-J6S" id="tL1-cE-rzk"/>
                <outlet property="cons_table_height" destination="iVi-HV-o6B" id="wRr-JR-xIi"/>
                <outlet property="label_price" destination="2GF-2e-CsH" id="ssf-5c-ZY4"/>
                <outlet property="label_rule" destination="D3R-6U-qpx" id="qJH-wV-706"/>
                <outlet property="tableView" destination="xf9-5v-5BE" id="2O6-DY-WIQ"/>
                <outlet property="text_view" destination="6do-vD-Z6i" id="Upf-Ni-H2g"/>
                <outlet property="text_view_height" destination="3KD-xV-b9j" id="6gl-JL-Ff5"/>
                <outlet property="view_container" destination="Dmv-6M-oIS" id="bca-kH-Mbv"/>
            </connections>
            <point key="canvasLocation" x="136.64122137404578" y="19.718309859154932"/>
        </view>
    </objects>
    <resources>
        <image name="btn_add_1" width="16" height="16"/>
        <image name="btn_close_2" width="20" height="20"/>
        <image name="btn_select" width="20" height="20"/>
        <image name="btn_select_u" width="20" height="20"/>
        <namedColor name="FE6E0D">
            <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </namedColor>
        <systemColor name="labelColor">
            <color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/Course/VC/AddStudentVC.swift
@@ -169,7 +169,7 @@
                                guard tf_height.text != "0" else {alertError(msg: "请输入正确的身高");return}
                                guard tf_weight.text != "0" else {alertError(msg: "请输入正确的体重");return}
                                if !tf_phone.isEmpty || identityPhone{
        if !view_phone.isHidden{
                                                guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的手机号");return}
                                }
WanPai/Root/Course/VC/CourseVC.swift
@@ -66,28 +66,7 @@
                }
                override func setRx() {
                                //        NotificationCenter.default.rx.notification(StudentUpdate_Nofi).take(until: self.rx.deallocated).subscribe(onNext: { [weak self] data in
                                //            guard let weakSelf = self else { return }
                                //            Services.startCourseHome().subscribe(onNext: {[weak self] data in
                                //                if let model = data.data{
                                //                    if model.isThere == 1{
                                //                        UserDefaults.standard.setValue(model.stuId, forKey: "currentStuId")
                                //                        UserDefaults.standard.synchronize()
                                //                        let courseInfoVC = CourseInfoVC()
                                //                        courseInfoVC.startClouseHomeModel = model
                                //                        let clouseNav = BaseNav(rootViewController: courseInfoVC)
                                //                        clouseNav.tabBarItem = UITabBarItem(title: "玩湃运动营", image: UIImage(named: "tabbar_course"), selectedImage: UIImage(named: "tabbar_course_s")!.withRenderingMode(.alwaysOriginal))
                                //                        self?.tabBarController?.viewControllers![1] = clouseNav
                                //                    }else{
                                //                        let courseVC = CourseVC()
                                //                        courseVC.startClouseHomeModel = model
                                //                        let clouseNav = BaseNav(rootViewController: courseVC)
                                //                        clouseNav.tabBarItem = UITabBarItem(title: "玩湃运动营", image: UIImage(named: "tabbar_course"), selectedImage: UIImage(named: "tabbar_course_s")!.withRenderingMode(.alwaysOriginal))
                                //                        self?.tabBarController?.viewControllers![1] = clouseNav
                                //                    }
                                //                }
                                //            }).disposed(by: weakSelf.disposeBag)
                                //        }).disposed(by: disposeBag)
                }
                @IBAction func addStudentAction(_ sender: QMUIButton) {
WanPai/Root/Home/CCell/HomeCCell.xib
@@ -1,9 +1,9 @@
<?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="23504" 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="23506"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
WanPai/Root/Home/Model/HomeModel.swift
@@ -28,8 +28,9 @@
                var type:HomeItemType = .worldcup
                var isOpen:Int = 0
                var sort:Int = 0
    var displayType:Int = 0 //1:横屏 2:竖屏
                var backgroundImage:String = ""
                var cellHeight:Double = 270
    var imageSize:CGSize = .zero
                var id = 0
}
@@ -45,6 +46,8 @@
                var model = ""
                var sort = 0
                var cellHeight:Double = 270
    var displayType:Int = 0 //1:横屏 2:竖屏
    var imageSize:CGSize = .zero
}
struct NormalSimpleModel:HandyJSON{
@@ -52,3 +55,12 @@
                var name = ""
}
extension CGSize{
    var radio:Double{
        get{
            return self.width / self.height
        }
    }
}
WanPai/Root/Home/VC/HomeVC.swift
@@ -22,9 +22,16 @@
                private var layout:FlowLayout!
                @IBOutlet weak var label_store: UILabel!
                private var items = Array<Any>()
    private var items_1 = [InnerItemModel]()
                private var storeModel:HomeStoreModel?
                private var storeId:Int?
                private var currentLocal:CLLocation?
    struct InnerItemModel{
        var contents = [Any]()
        var displayType = 2 // 1:横屏 2:竖屏
    }
                override func viewDidAppear(_ animated: Bool) {
                                super.viewDidAppear(animated)
@@ -67,7 +74,6 @@
                                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
@@ -125,7 +131,6 @@
                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
@@ -134,23 +139,27 @@
                                                                                                SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage), options: .useNSURLCache) { _, _,_ in
                                                                                                } completed: { image, data, error, status in
                            m.imageSize = image?.size ?? .zero
                                                                                                                guard !m.backgroundImage.isEmpty else {
                                                                                                                                m.cellHeight = 100
                                if image?.size.width ?? 0 > image?.size.height ?? 0{
                                    m.displayType = 1
                                }else{
                                    m.displayType = 2
                                }
                                                                                                                                group.leave()
                                                                                                                                return
                                                                                                                }
                                                                                                                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)
                        m.imageSize = img.size
                        if img.size.width > img.size.height{
                            m.displayType = 1
                        }else{
                            m.displayType = 2
                        }
                                                                                                group.leave()
                                                                                }
                                                                }
@@ -162,25 +171,34 @@
                                                                                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 = 100
                                                                                                                }
                            if let img = image{
                                m.imageSize = img.size
                                if img.size.width > img.size.height{
                                    m.displayType = 1
                                }else{
                                    m.displayType = 2
                                }
                            }
                                                                                                                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)
                        m.imageSize = img.size
                        if img.size.width > img.size.height{
                            m.displayType = 1
                        }else{
                            m.displayType = 2
                        }
                                                                                                group.leave()
                                                                                }
                                                                }
                                                }
                                }
                                group.notify(queue: .main) {
                                group.notify(queue: .main) {[unowned self] in
            self.items_1.removeAll()
                                                self.items = self.items.sorted { v1, v2 in
                                                                var sort1 = 0
@@ -204,7 +222,7 @@
                                                                return sort1 < sort2
                                                }
                                                let v = self.items.compactMap { any in
            _ = self.items.compactMap { any in
                                                                if let m = any as? HomeStoreTopBannerModel{
                                                                                return "\(m.sort)"
                                                                }
@@ -213,6 +231,33 @@
                                                                }
                                                                return ""
                                                }
            var displayItems_row = [Any]() //竖
            for v in self.items{
                var displayT:Int = 0
                if let m =  v as? HomeStoreTopBannerModel{
                    displayT = m.displayType
                }
                if let m =  v as? HomeStoreConfigModel{
                    displayT = m.displayType
                }
                if displayT == 1{ //横
                    if !displayItems_row.isEmpty{ //添加竖,清除竖
                        self.items_1.append(InnerItemModel(contents: displayItems_row, displayType: 2))
                        displayItems_row.removeAll()
                    }
                    self.items_1.append(InnerItemModel(contents: [v], displayType: displayT))
                }else {
                    displayItems_row.append(v)
                }
            }
            self.items_1.append(InnerItemModel(contents: displayItems_row, displayType: 2))
                                                self.layout.collectionView?.reloadData()
                                                self.collectionView.reloadData()
@@ -287,8 +332,16 @@
extension HomeVC:UICollectionViewDelegate,UICollectionViewDelegateWaterFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, colum section: Int) -> Int {
                                return 2
        if items_1[section].displayType == 1{
            return 1
        }else{
            return 2
        }
                }
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return items_1.count
    }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacing section: Int) -> CGFloat {
                                return 10
@@ -298,17 +351,29 @@
                                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, itemWidth: CGFloat, caculateHeight indexPath: IndexPath) -> CGFloat {
                                if let m = item as? HomeStoreTopBannerModel{
                                                return m.cellHeight
                                }
                                return 200
                }
        let v = items_1[indexPath.section]
        let item = v.contents[indexPath.row]
        if let m = item as? HomeStoreConfigModel{
            if m.displayType == 2{
                return (JQ_ScreenW - 78) / 2 / m.imageSize.aspectRatio
            }
            return (JQ_ScreenW - 78) / m.imageSize.aspectRatio
        }
        if let m = item as? HomeStoreTopBannerModel{
            if m.displayType == 2{
                return (JQ_ScreenW - 78) / 2 / m.imageSize.aspectRatio
            }
            return (JQ_ScreenW - 78) / m.imageSize.aspectRatio
        }
        return 0
    }
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
@@ -362,6 +427,9 @@
                                                                                }else{
                                                                                                alertError(msg: "当前门店获取失败")
                                                                                }
                case .huimin:
                    let vc = CardCenterVC()
                    push(vc: vc)
                                                                case .nothing:
                                                                                break
                                                }
@@ -377,8 +445,9 @@
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]
        let item_1 = items_1[indexPath.section]
        let item = item_1.contents[indexPath.row]
                                if let m = item as? HomeStoreConfigModel{
                                                cell.img.sd_setImage(with: URL(string: m.backgroundImage), placeholderImage: nil, options: .lowPriority)
@@ -387,12 +456,14 @@
                                if let m = item as? HomeStoreTopBannerModel{
                                                cell.img.sd_setImage(with: URL(string: m.backgroundImage), placeholderImage: nil, options: .lowPriority)
                                }
                                cell.img.cornerRadius = 10
                                cell.cornerRadius = 10
        cell.layer.masksToBounds = true
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return items.count
        return items_1[section].contents.count
                }
}
WanPai/Root/Login/VC/LoginVC.swift
@@ -158,9 +158,7 @@
                                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
@@ -207,19 +205,20 @@
                @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
                                }
        //用户协议、隐私协议:点击勾选即可,不再强制阅读。
//                                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
                }
WanPai/Root/Login/VC/LoginVC.xib
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
        <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"/>
@@ -41,10 +41,10 @@
                    <rect key="frame" x="122.66666666666669" y="79" width="148" height="72"/>
                </imageView>
                <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cAB-q2-f9Z">
                    <rect key="frame" x="113.33333333333333" y="183" width="166.66666666666669" height="25"/>
                    <rect key="frame" x="115.66666666666669" y="183" width="162" height="25"/>
                    <subviews>
                        <button opaque="NO" tag="10" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fEr-ZJ-pMj">
                            <rect key="frame" x="0.0" y="0.0" width="74" height="25"/>
                            <rect key="frame" x="0.0" y="0.0" width="72" height="25"/>
                            <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="密码登录">
@@ -58,13 +58,13 @@
                            </connections>
                        </button>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="|" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QH3-h0-THD">
                            <rect key="frame" x="74.000000000000014" y="0.0" width="18.666666666666671" height="25"/>
                            <rect key="frame" x="71.999999999999986" y="0.0" width="18" height="25"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                            <color key="textColor" name="FE6E0D"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bgw-Aw-FZm">
                            <rect key="frame" x="92.666666666666686" y="0.0" width="74" height="25"/>
                            <rect key="frame" x="89.999999999999986" y="0.0" width="72.000000000000014" height="25"/>
                            <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="短信登录">
@@ -83,10 +83,10 @@
                    </constraints>
                </stackView>
                <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ej3-Zy-UxP">
                    <rect key="frame" x="140.33333333333334" y="376" width="112.33333333333334" height="25"/>
                    <rect key="frame" x="142.66666666666666" y="376" width="108" height="25"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hI1-WH-dqa">
                            <rect key="frame" x="0.0" y="0.0" width="50" height="25"/>
                            <rect key="frame" x="0.0" y="0.0" width="48" height="25"/>
                            <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="修改密码">
@@ -100,13 +100,13 @@
                            </connections>
                        </button>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="|" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pxy-q7-vhk">
                            <rect key="frame" x="50" y="0.0" width="12.333333333333336" height="25"/>
                            <rect key="frame" x="48" y="0.0" width="12" height="25"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                            <color key="textColor" name="FE6E0D"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="anK-cQ-sSd">
                            <rect key="frame" x="62.333333333333314" y="0.0" width="50" height="25"/>
                            <rect key="frame" x="60" y="0.0" width="48" height="25"/>
                            <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="忘记密码">
@@ -190,7 +190,7 @@
                            </connections>
                        </button>
                        <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Peu-H2-2Bj">
                            <rect key="frame" x="231" y="11.666666666666686" width="62" height="27"/>
                            <rect key="frame" x="233" y="11.666666666666686" width="60" height="27"/>
                            <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="获取验证码">
@@ -285,10 +285,10 @@
                    <rect key="frame" x="0.0" y="716" width="393" height="102"/>
                    <subviews>
                        <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ikk-sm-4Sm">
                            <rect key="frame" x="146.66666666666666" y="42" width="100" height="50"/>
                            <rect key="frame" x="147.66666666666666" y="42" width="98" height="50"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AA4-J4-8iR" customClass="QMUIButton">
                                    <rect key="frame" x="0.0" y="0.0" width="100" height="50"/>
                                    <rect key="frame" x="0.0" y="0.0" width="98" height="50"/>
                                    <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="微信登录" image="btn_wechat">
@@ -301,7 +301,7 @@
                            </subviews>
                        </stackView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="其他登录方式" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cqp-2p-rC6">
                            <rect key="frame" x="159.66666666666666" y="10" width="73.666666666666657" height="17"/>
                            <rect key="frame" x="160.66666666666666" y="10" width="71.666666666666657" height="17"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="17" id="DBH-wO-NS0"/>
                            </constraints>
WanPai/Root/Other/TCell/StudentInfo_2_1_TCell.swift
@@ -26,6 +26,15 @@
                                }
                }
    var studentProfile1Model:StudentProfile1Model!{
        didSet{
            label_name.text = studentProfile1Model.stuName
            label_idCard.text = studentProfile1Model.idCard
            label_age.text = "\(studentProfile1Model.stuAge)岁"
            label_phone.text = studentProfile1Model.stuPhone
        }
    }
                var isChoose:Bool!{
                                didSet{
                                                img_radio.isHidden = !isChoose
WanPai/Root/Other/TCell/StudentInfo_2_2_TCell.swift
New file
@@ -0,0 +1,48 @@
//
//  StudentInfo_2_2_TCell.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/4/10.
//
import UIKit
class StudentInfo_2_2_TCell: UITableViewCell {
    @IBOutlet weak var img_radio: UIImageView!
    @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!
    var indexPath:IndexPath?
    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 studentProfile1Model:StudentProfile1Model!{
        didSet{
            label_name.text = studentProfile1Model.stuName
            label_idCard.text = studentProfile1Model.idCard
            label_age.text = "\(studentProfile1Model.stuAge)岁"
            label_phone.text = studentProfile1Model.stuPhone
        }
    }
    var isChoose:Bool!{
        didSet{
            img_radio.isHidden = !isChoose
        }
    }
    override func awakeFromNib() {
        super.awakeFromNib()
        selectionStyle = .none
    }
}
WanPai/Root/Other/TCell/StudentInfo_2_2_TCell.xib
New file
@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="23506"/>
        <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" rowHeight="175" id="KGk-i7-Jjw" customClass="StudentInfo_2_2_TCell" customModule="WanPai" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="452" height="175"/>
            <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="452" height="175"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iMY-N1-d3T">
                        <rect key="frame" x="7" y="7" width="438" 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="9JI-Yn-uXK">
                                <rect key="frame" x="10" y="13" width="35" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="20" id="iox-WP-vsd"/>
                                </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="bk4-LT-DaF">
                                <rect key="frame" x="45" 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="24Q-hh-Z6a">
                                <rect key="frame" x="114" y="13" width="72" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="20" id="21Z-ZI-Vee"/>
                                    <constraint firstAttribute="width" constant="72" id="ybQ-yH-Qbl"/>
                                </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="fah-xK-FSz">
                                <rect key="frame" x="186" y="14.666666666666668" width="215" 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="uh7-sA-5LR">
                                <rect key="frame" x="10" y="44" width="35" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="20" id="4dQ-cQ-Ovh"/>
                                </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="Ezm-4z-UG1">
                                <rect key="frame" x="45" 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="R2n-gm-ODg">
                                <rect key="frame" x="114.00000000000001" y="44" width="62.666666666666671" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="20" id="FzH-Fx-WnE"/>
                                </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="20L-Gl-uQa">
                                <rect key="frame" x="176.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="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="btn_select_u" translatesAutoresizingMaskIntoConstraints="NO" id="gO4-5n-OA7">
                                <rect key="frame" x="411" y="13" width="20" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="20" id="WSd-HN-a8P"/>
                                    <constraint firstAttribute="width" constant="20" id="hTM-Qh-1F7"/>
                                </constraints>
                            </imageView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="0.90588235289999997" blue="0.80000000000000004" alpha="0.080000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="9JI-Yn-uXK" firstAttribute="top" secondItem="iMY-N1-d3T" secondAttribute="top" constant="13" id="1Jg-R9-FNO"/>
                            <constraint firstAttribute="height" constant="76" id="3Z5-u0-ohD"/>
                            <constraint firstItem="bk4-LT-DaF" firstAttribute="leading" secondItem="9JI-Yn-uXK" secondAttribute="trailing" id="49a-8U-uXt"/>
                            <constraint firstItem="Ezm-4z-UG1" firstAttribute="centerY" secondItem="uh7-sA-5LR" secondAttribute="centerY" id="6Gu-0b-IID"/>
                            <constraint firstItem="R2n-gm-ODg" firstAttribute="leading" secondItem="24Q-hh-Z6a" secondAttribute="leading" id="6M0-rO-OBj"/>
                            <constraint firstItem="fah-xK-FSz" firstAttribute="centerY" secondItem="24Q-hh-Z6a" secondAttribute="centerY" id="EFP-ue-ciH"/>
                            <constraint firstItem="gO4-5n-OA7" firstAttribute="centerY" secondItem="9JI-Yn-uXK" secondAttribute="centerY" id="Eal-s5-jTS"/>
                            <constraint firstItem="fah-xK-FSz" firstAttribute="leading" secondItem="24Q-hh-Z6a" secondAttribute="trailing" id="HBB-XX-5qq"/>
                            <constraint firstItem="24Q-hh-Z6a" firstAttribute="centerY" secondItem="9JI-Yn-uXK" secondAttribute="centerY" id="LWl-jS-mfM"/>
                            <constraint firstItem="R2n-gm-ODg" firstAttribute="centerY" secondItem="uh7-sA-5LR" secondAttribute="centerY" id="Lgm-VP-iiX"/>
                            <constraint firstAttribute="trailing" secondItem="gO4-5n-OA7" secondAttribute="trailing" constant="7" id="T8S-IO-KE1"/>
                            <constraint firstItem="24Q-hh-Z6a" firstAttribute="leading" secondItem="iMY-N1-d3T" secondAttribute="leading" constant="114" id="WNi-sA-42n"/>
                            <constraint firstItem="uh7-sA-5LR" firstAttribute="leading" secondItem="iMY-N1-d3T" secondAttribute="leading" constant="10" id="aE4-C6-3xw"/>
                            <constraint firstItem="bk4-LT-DaF" firstAttribute="centerY" secondItem="9JI-Yn-uXK" secondAttribute="centerY" id="dNu-rj-xgl"/>
                            <constraint firstItem="20L-Gl-uQa" firstAttribute="leading" secondItem="R2n-gm-ODg" secondAttribute="trailing" id="j1t-u4-CZM"/>
                            <constraint firstItem="uh7-sA-5LR" firstAttribute="top" secondItem="9JI-Yn-uXK" secondAttribute="bottom" constant="11" id="lQR-QW-h2I"/>
                            <constraint firstItem="gO4-5n-OA7" firstAttribute="leading" secondItem="fah-xK-FSz" secondAttribute="trailing" constant="10" id="qWX-Tl-SC3"/>
                            <constraint firstItem="9JI-Yn-uXK" firstAttribute="leading" secondItem="iMY-N1-d3T" secondAttribute="leading" constant="10" id="t5N-vf-Lni"/>
                            <constraint firstItem="Ezm-4z-UG1" firstAttribute="leading" secondItem="uh7-sA-5LR" secondAttribute="trailing" id="uhr-e8-pWE"/>
                            <constraint firstItem="20L-Gl-uQa" firstAttribute="centerY" secondItem="R2n-gm-ODg" secondAttribute="centerY" id="zLV-NZ-H23"/>
                        </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="iMY-N1-d3T" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="7" id="T50-dv-wtU"/>
                    <constraint firstAttribute="bottom" secondItem="iMY-N1-d3T" secondAttribute="bottom" constant="7" id="dYj-8u-Y7f"/>
                    <constraint firstAttribute="trailing" secondItem="iMY-N1-d3T" secondAttribute="trailing" constant="7" id="oJe-Ca-far"/>
                    <constraint firstItem="iMY-N1-d3T" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="7" id="slJ-Fk-Ozq"/>
                </constraints>
            </tableViewCellContentView>
            <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
            <connections>
                <outlet property="img_radio" destination="gO4-5n-OA7" id="ieY-Ta-GzO"/>
                <outlet property="label_age" destination="Ezm-4z-UG1" id="bRj-q0-E37"/>
                <outlet property="label_idCard" destination="fah-xK-FSz" id="2Ky-Ty-WFI"/>
                <outlet property="label_name" destination="bk4-LT-DaF" id="Rm7-MU-lQ8"/>
                <outlet property="label_phone" destination="20L-Gl-uQa" id="bF1-6q-Shp"/>
                <outlet property="view_container" destination="iMY-N1-d3T" id="xly-Va-DNH"/>
            </connections>
            <point key="canvasLocation" x="172.51908396946564" y="66.549295774647888"/>
        </tableViewCell>
    </objects>
    <resources>
        <image name="btn_select_u" width="20" height="20"/>
    </resources>
</document>
WanPai/Root/Other/VC/PaymentResultVC.swift
@@ -24,6 +24,7 @@
                                case games //游戏
                                case exchange //替换
                                case recharge //充值
        case huimin //惠民
                }
@@ -241,6 +242,26 @@
                                                                                                label_content.text = "支付成功"
                                                                                case .none:break
                                                                }
            case .huimin:
                btn_backHome.isHidden = true
                collectionView.isHidden =  true
                switch result {
                    case .fail(let str,let code):
                        btn_again.setTitle("再次支付", for: .normal)
                        btn_back.setTitle("返回", for: .normal)
                        label_content.text = str
                    case .success:
                        NotificationCenter.default.post(name: UpdateCurrentStore_Noti, object: nil)
                        btn_again.isHidden = false
                        btn_again.setTitle("查看惠民卡", for: .normal)
                        btn_back.setTitleColor(Def_ThemeColor, for: .normal)
                        btn_back.backgroundColor = .white
                        btn_back.setTitle("返回首页", for: .normal)
                        btn_back.jq_borderColor = Def_ThemeColor
                        btn_back.jq_borderWidth = 1
                        label_content.text = "购买成功"
                    case .none:break
                }
                                                case .exchange:
                                                                switch result {
@@ -277,6 +298,9 @@
                                                case "查看排名":
                                                                let vc  = WorldCupVC()
                                                                jumpAndRemoveSelfVC(vc)
            case "查看惠民卡":
                let vc = MyCardListVC()
                jumpAndRemoveSelfVC(vc)
                                                case "查看预约":
                                                                let vc = YardBookingListVC()
                                                                jumpAndRemoveSelfVC(vc)
@@ -295,7 +319,7 @@
                                                                                jumpAndRemoveSelfVC(vc)
                                                                }
                                                case "再次支付":
                                                                if objType == .courseApply || objType == .worldCup{
                if objType == .courseApply || objType == .worldCup || objType == .huimin{
                                                                                navigationController?.popViewController(animated: true, {[weak self] in
                                                                                                self?.againClouse?()
                                                                                })
@@ -348,6 +372,16 @@
                @IBAction func backAction(_ sender: UIButton) {
                                if sender.titleLabel?.text == "返回首页"{
            if objType == .huimin{
                for v in navigationController?.viewControllers ?? []{
                    if v is CardCenterVC{
                        navigationController?.popToViewController(v, animated: true);break
                    }
                }
                return
            }
                                                navigationController?.qmui_popToRootViewController(animated: true, completion: {
                                                                JQ_currentViewController().tabBarController?.selectedIndex = 0
                                                })
WanPai/Root/Other/View/StudentChoose3View.swift
New file
@@ -0,0 +1,157 @@
//
//  StudentChoose3View.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/27.
//
import UIKit
import JQTools
import QMUIKit
import RxSwift
import RxCocoa
import HandyJSON
class StudentChoose3View: UIView,JQNibView{
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var btn_add: QMUIButton!
    @IBOutlet weak var view_container: UIView!
    @IBOutlet weak var cons_bottom: NSLayoutConstraint!
    @IBOutlet weak var cons_tableHei: NSLayoutConstraint!
    private var clickClouse:((Set<StudentProfile1Model>)->Void)!
    private var needAddClouse:(()->Void)!
    private var disposeBag = DisposeBag()
    private var selectStudents = Set<StudentProfile1Model>()
    private var viewModel = StudentExchangeViewModel()
    override func awakeFromNib() {
        super.awakeFromNib()
        cons_bottom.constant = -(JQ_ScreenW * 1.1)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.separatorStyle = .none
        tableView.showsVerticalScrollIndicator = false
        tableView.showsHorizontalScrollIndicator = false
        btn_add.spacingBetweenImageAndTitle = 4
        btn_add.imagePosition = .right
        alpha = 0
        layoutIfNeeded()
        setRx()
        NotificationCenter.default.rx.notification(Noti_hiddenCardCenter_Add).take(until: self.rx.deallocated).subscribe(onNext: {[unowned self] noti in
            guard let state = noti.object as? Bool else { return }
            self.alpha = state ? 0:1
            self.viewModel.beginRefresh()
        }).disposed(by: disposeBag)
    }
    static func show(defaultStu:Set<StudentProfile1Model>? = nil,clickClouse:@escaping (Set<StudentProfile1Model>)->Void){
        let studentChooseView = StudentChoose3View.jq_loadNibView()
        if defaultStu != nil{
            studentChooseView.selectStudents = defaultStu!
        }
        studentChooseView.tableView.register(UINib(nibName: "StudentInfo_2_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_2_TCell")
        studentChooseView.frame = sceneDelegate?.window?.frame ?? .zero
        studentChooseView.clickClouse = clickClouse
        sceneDelegate?.window?.addSubview(studentChooseView)
        studentChooseView.cons_bottom.constant = 0
        studentChooseView.viewModel.configure(studentChooseView.tableView,needMore: false)
        studentChooseView.viewModel.beginRefresh()
        UIView.animate(withDuration: 0.4) {
            studentChooseView.alpha = 1
            studentChooseView.layoutIfNeeded()
            studentChooseView.tableView.reloadData()
        }
    }
    private func setRx(){
        viewModel.dataSource.subscribe(onNext: {[weak self] data in
            let hei = min(360,Double(data.count) * 90.0)
            self?.cons_tableHei.constant = hei
            UIView.animate(withDuration: 0.4) {
                self?.layoutIfNeeded()
            }
        }).disposed(by: disposeBag)
        NotificationCenter.default.rx.notification(StudentUpdate_Nofi, object: nil).subscribe(onNext: {_ in
            self.viewModel.beginRefresh()
        }).disposed(by: disposeBag)
    }
    @IBAction func closeAction(_ sender: UIButton) {
        closeAction()
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        DispatchQueue.main.asyncAfter(wallDeadline: .now()+0.1) {
            self.view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 20)
        }
    }
    private func closeAction(){
        self.cons_bottom.constant = -(JQ_ScreenW * 1.1)
        UIView.animate(withDuration: 0.4) {
            self.alpha = 0
            self.layoutIfNeeded()
        } completion: { _ in
            self.removeFromSuperview()
        }
    }
    @IBAction func addPersionAction(_ sender: Any) {
        NotificationCenter.default.post(name: Noti_hiddenCardCenter_Add, object: true)
        let vc = CardCenterAddUserVC()
        JQ_currentNavigationController().pushViewController(vc)
    }
    @IBAction func completeAction(_ sender: UIButton) {
        guard !selectStudents.isEmpty else {
            alert(msg: "请选择");return
        }
        clickClouse!(selectStudents)
        closeAction()
    }
}
extension StudentChoose3View:UITableViewDelegate{
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let item = viewModel.dataSource.value[indexPath.row]
        if selectStudents.contains(item){
            selectStudents.remove(item)
        }else{
            selectStudents.insert(item)
        }
        tableView.reloadData()
    }
}
extension StudentChoose3View:UITableViewDataSource{
    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: "_StudentInfo_2_2_TCell") as! StudentInfo_2_2_TCell
        cell.indexPath = indexPath
        cell.studentProfile1Model = viewModel.dataSource.value[indexPath.row]
        cell.img_radio.isHidden = false
        let isSelect = selectStudents.contains(viewModel.dataSource.value[indexPath.row])
        cell.img_radio.image = UIImage(named: isSelect ? "btn_select" : "btn_select_u")
        if isSelect{
            cell.view_container.borderColor = UIColor(hexString: "#FD7902")?.withAlphaComponent(0.28)
            cell.img_radio.isHidden = false
        }else{
            cell.view_container.borderColor = UIColor(hexString: "#ADADAD")?.withAlphaComponent(0.28)
            cell.img_radio.isHidden = true
        }
        return cell
    }
}
WanPai/Root/Other/View/StudentChoose3View.xib
New file
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="23506"/>
        <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"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="StudentChoose3View" customModule="WanPai" customModuleProvider="target">
            <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="9yz-Qc-Cau">
                    <rect key="frame" x="0.0" y="515" width="393" height="337"/>
                    <subviews>
                        <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="RVR-I2-WIW">
                            <rect key="frame" x="0.0" y="55" width="393" height="166"/>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="166" id="avm-S6-ZNq"/>
                            </constraints>
                        </tableView>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Kok-Iq-wbY">
                            <rect key="frame" x="100" y="237" width="193" height="40"/>
                            <color key="backgroundColor" name="FE6E0D"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="40" id="Npf-BG-cbb"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="确认">
                                <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                            </state>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="20"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="HjH-mE-ZuH"/>
                            </connections>
                        </button>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DSm-33-mVo" customClass="QMUIButton">
                            <rect key="frame" x="306" y="23" width="72" height="25"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="25" id="B2b-1b-rhb"/>
                            </constraints>
                            <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_add_1">
                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.56999999999999995" colorSpace="custom" customColorSpace="sRGB"/>
                            </state>
                            <connections>
                                <action selector="addPersionAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="T3h-5J-DpR"/>
                            </connections>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="trailing" secondItem="Kok-Iq-wbY" secondAttribute="trailing" constant="100" id="2t6-u5-lt8"/>
                        <constraint firstItem="Kok-Iq-wbY" firstAttribute="leading" secondItem="9yz-Qc-Cau" secondAttribute="leading" constant="100" id="42A-F9-mL2"/>
                        <constraint firstAttribute="trailing" secondItem="RVR-I2-WIW" secondAttribute="trailing" id="4l4-n1-iIi"/>
                        <constraint firstAttribute="bottomMargin" secondItem="Kok-Iq-wbY" secondAttribute="bottom" constant="18" id="ICh-yU-E5x"/>
                        <constraint firstItem="RVR-I2-WIW" firstAttribute="leading" secondItem="9yz-Qc-Cau" secondAttribute="leading" id="WY0-F8-PsD"/>
                        <constraint firstItem="DSm-33-mVo" firstAttribute="top" secondItem="9yz-Qc-Cau" secondAttribute="top" constant="23" id="dsL-wg-Yk0"/>
                        <constraint firstItem="RVR-I2-WIW" firstAttribute="top" secondItem="DSm-33-mVo" secondAttribute="bottom" constant="7" id="hZS-Ui-rG0"/>
                        <constraint firstAttribute="trailing" secondItem="DSm-33-mVo" secondAttribute="trailing" constant="15" id="jbx-3W-n73"/>
                        <constraint firstItem="Kok-Iq-wbY" firstAttribute="top" secondItem="RVR-I2-WIW" secondAttribute="bottom" constant="16" id="l4f-q6-6ip"/>
                    </constraints>
                </view>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uKH-36-7Ze">
                    <rect key="frame" x="0.0" y="59" width="393" height="456"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <connections>
                        <action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="cwa-3Q-Pyu"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="9yz-Qc-Cau" secondAttribute="trailing" id="Hl3-TY-Za3"/>
                <constraint firstAttribute="bottom" secondItem="9yz-Qc-Cau" secondAttribute="bottom" id="Sxv-J1-E4B"/>
                <constraint firstItem="uKH-36-7Ze" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" id="TuZ-wR-mdw"/>
                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="uKH-36-7Ze" secondAttribute="trailing" id="bdP-OP-KUJ"/>
                <constraint firstItem="9yz-Qc-Cau" firstAttribute="top" secondItem="uKH-36-7Ze" secondAttribute="bottom" id="gdn-da-dpM"/>
                <constraint firstItem="9yz-Qc-Cau" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="qoT-0I-skc"/>
                <constraint firstItem="uKH-36-7Ze" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="rdG-6M-CUG"/>
            </constraints>
            <connections>
                <outlet property="btn_add" destination="DSm-33-mVo" id="jTr-Zg-DSH"/>
                <outlet property="cons_bottom" destination="Sxv-J1-E4B" id="FZP-9d-3Lu"/>
                <outlet property="cons_tableHei" destination="avm-S6-ZNq" id="ha2-cb-a8z"/>
                <outlet property="tableView" destination="RVR-I2-WIW" id="EXr-9d-rA2"/>
                <outlet property="view_container" destination="9yz-Qc-Cau" id="fsV-0r-d2e"/>
            </connections>
            <point key="canvasLocation" x="139" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="btn_add_1" width="16" height="16"/>
        <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>
WanPai/Root/Search/CCell/SearchBannerCCell.swift
@@ -6,13 +6,15 @@
//
import UIKit
import JQTools
class SearchBannerCCell: UICollectionViewCell {
    @IBOutlet weak var img_cover: UIImageView!
    @IBOutlet weak var label_distance: UILabel!
    @IBOutlet weak var label_title: UILabel!
    @IBOutlet weak var label_address: UILabel!
    @IBOutlet weak var view_container: UIView!
    var startClouseExploreItemModel:StartClouseExploreModel!{
        didSet{
            img_cover.sd_setImage(with: URL(string: startClouseExploreItemModel.storeImg))
@@ -24,7 +26,14 @@
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        img_cover.jq_addCorners(corner: [.topLeft,.topRight], radius: 10)
        view_container.jq_addShadows(shadowColor: .black.withAlphaComponent(0.1), corner: 10, radius: 5, offset: CGSize(width: 0, height: 5), opacity: 1)
        view_container.layer.masksToBounds = false
    }
}
WanPai/Root/Search/CCell/SearchBannerCCell.xib
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
        <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"/>
@@ -12,84 +12,100 @@
        <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="_SearchBannerCCell" id="gTV-IL-0wX" customClass="SearchBannerCCell" customModule="WanPai" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="382" height="187"/>
            <rect key="frame" x="0.0" y="0.0" width="382" height="320"/>
            <autoresizingMask key="autoresizingMask"/>
            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                <rect key="frame" x="0.0" y="0.0" width="382" height="187"/>
                <rect key="frame" x="0.0" y="0.0" width="382" height="320"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="pTu-5i-L13">
                        <rect key="frame" x="0.0" y="0.0" width="382" height="187"/>
                        <color key="backgroundColor" systemColor="systemGray6Color"/>
                    </imageView>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rfe-En-Xee">
                        <rect key="frame" x="0.0" y="122" width="382" height="65"/>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="thJ-IX-chT">
                        <rect key="frame" x="5" y="5" width="372" height="310"/>
                        <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="7Ad-qv-y5J">
                                <rect key="frame" x="10" y="6" width="362" height="18"/>
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="pTu-5i-L13">
                                <rect key="frame" x="0.0" y="0.0" width="372" height="220"/>
                                <color key="backgroundColor" systemColor="systemGray6Color"/>
                            </imageView>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rfe-En-Xee">
                                <rect key="frame" x="0.0" y="220" width="372" height="90"/>
                                <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="7Ad-qv-y5J">
                                        <rect key="frame" x="10" y="6" width="352" height="18"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="18" id="0SY-Gz-SGL"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9qr-cP-39L">
                                        <rect key="frame" x="10" y="24" width="352" height="18"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="18" id="u6Y-3Q-yTC"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="neg-i1-S7H">
                                        <rect key="frame" x="10" y="44" width="352" height="18"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="18" id="fP5-Ou-fL0"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" pointSize="10"/>
                                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                </subviews>
                                <constraints>
                                    <constraint firstAttribute="height" constant="18" id="0SY-Gz-SGL"/>
                                    <constraint firstItem="neg-i1-S7H" firstAttribute="top" secondItem="9qr-cP-39L" secondAttribute="bottom" constant="2" id="41b-A1-o3H"/>
                                    <constraint firstItem="7Ad-qv-y5J" firstAttribute="leading" secondItem="Rfe-En-Xee" secondAttribute="leading" constant="10" id="6BZ-vk-orz"/>
                                    <constraint firstAttribute="height" constant="90" id="7TH-uK-bAy"/>
                                    <constraint firstItem="7Ad-qv-y5J" firstAttribute="top" secondItem="Rfe-En-Xee" secondAttribute="top" constant="6" id="N1b-m0-E3f"/>
                                    <constraint firstItem="neg-i1-S7H" firstAttribute="leading" secondItem="Rfe-En-Xee" secondAttribute="leading" constant="10" id="TJQ-yf-Jth"/>
                                    <constraint firstItem="9qr-cP-39L" firstAttribute="top" secondItem="7Ad-qv-y5J" secondAttribute="bottom" id="Y4p-px-8RG"/>
                                    <constraint firstAttribute="trailing" secondItem="neg-i1-S7H" secondAttribute="trailing" constant="10" id="ZbX-ch-zpZ"/>
                                    <constraint firstAttribute="trailing" secondItem="7Ad-qv-y5J" secondAttribute="trailing" constant="10" id="fdv-4U-3AR"/>
                                    <constraint firstItem="9qr-cP-39L" firstAttribute="leading" secondItem="Rfe-En-Xee" secondAttribute="leading" constant="10" id="h41-qb-zN9"/>
                                    <constraint firstAttribute="trailing" secondItem="9qr-cP-39L" secondAttribute="trailing" constant="10" id="qAf-XV-tjp"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" pointSize="13"/>
                                <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="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9qr-cP-39L">
                                <rect key="frame" x="10" y="24" width="362" height="18"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="18" id="u6Y-3Q-yTC"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" pointSize="13"/>
                                <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="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="neg-i1-S7H">
                                <rect key="frame" x="10" y="44" width="362" height="18"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="18" id="fP5-Ou-fL0"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" pointSize="11"/>
                                <color key="textColor" red="1" green="1" blue="1" alpha="0.78000000000000003" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            </view>
                        </subviews>
                        <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.41999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstItem="neg-i1-S7H" firstAttribute="top" secondItem="9qr-cP-39L" secondAttribute="bottom" constant="2" id="41b-A1-o3H"/>
                            <constraint firstItem="7Ad-qv-y5J" firstAttribute="leading" secondItem="Rfe-En-Xee" secondAttribute="leading" constant="10" id="6BZ-vk-orz"/>
                            <constraint firstAttribute="height" constant="65" id="7TH-uK-bAy"/>
                            <constraint firstItem="7Ad-qv-y5J" firstAttribute="top" secondItem="Rfe-En-Xee" secondAttribute="top" constant="6" id="N1b-m0-E3f"/>
                            <constraint firstItem="neg-i1-S7H" firstAttribute="leading" secondItem="Rfe-En-Xee" secondAttribute="leading" constant="10" id="TJQ-yf-Jth"/>
                            <constraint firstItem="9qr-cP-39L" firstAttribute="top" secondItem="7Ad-qv-y5J" secondAttribute="bottom" id="Y4p-px-8RG"/>
                            <constraint firstAttribute="trailing" secondItem="neg-i1-S7H" secondAttribute="trailing" constant="10" id="ZbX-ch-zpZ"/>
                            <constraint firstAttribute="trailing" secondItem="7Ad-qv-y5J" secondAttribute="trailing" constant="10" id="fdv-4U-3AR"/>
                            <constraint firstItem="9qr-cP-39L" firstAttribute="leading" secondItem="Rfe-En-Xee" secondAttribute="leading" constant="10" id="h41-qb-zN9"/>
                            <constraint firstAttribute="trailing" secondItem="9qr-cP-39L" secondAttribute="trailing" constant="10" id="qAf-XV-tjp"/>
                            <constraint firstAttribute="bottom" secondItem="Rfe-En-Xee" secondAttribute="bottom" id="3JP-kY-tuw"/>
                            <constraint firstAttribute="trailing" secondItem="Rfe-En-Xee" secondAttribute="trailing" id="HbQ-5h-QeL"/>
                            <constraint firstItem="Rfe-En-Xee" firstAttribute="top" secondItem="pTu-5i-L13" secondAttribute="bottom" id="Q15-Cp-2NB"/>
                            <constraint firstItem="pTu-5i-L13" firstAttribute="top" secondItem="thJ-IX-chT" secondAttribute="top" id="am4-b2-Iig"/>
                            <constraint firstAttribute="trailing" secondItem="pTu-5i-L13" secondAttribute="trailing" id="cuK-XL-GLL"/>
                            <constraint firstItem="Rfe-En-Xee" firstAttribute="leading" secondItem="thJ-IX-chT" secondAttribute="leading" id="dZF-Eo-Jra"/>
                            <constraint firstItem="pTu-5i-L13" firstAttribute="leading" secondItem="thJ-IX-chT" secondAttribute="leading" id="sqK-vd-Q5B"/>
                        </constraints>
                    </view>
                </subviews>
            </view>
            <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
            <constraints>
                <constraint firstItem="pTu-5i-L13" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="0ZL-Hc-JnK"/>
                <constraint firstAttribute="trailing" secondItem="Rfe-En-Xee" secondAttribute="trailing" id="8dM-sr-xM4"/>
                <constraint firstAttribute="bottom" secondItem="pTu-5i-L13" secondAttribute="bottom" id="INa-nT-hdk"/>
                <constraint firstItem="Rfe-En-Xee" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="Whl-GY-69a"/>
                <constraint firstItem="pTu-5i-L13" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="Zy7-OI-m3p"/>
                <constraint firstAttribute="trailing" secondItem="pTu-5i-L13" secondAttribute="trailing" id="gbV-7j-Ilv"/>
                <constraint firstAttribute="bottom" secondItem="Rfe-En-Xee" secondAttribute="bottom" id="z1u-HX-mA9"/>
                <constraint firstItem="thJ-IX-chT" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="5" id="0Fn-kk-MDN"/>
                <constraint firstAttribute="trailing" secondItem="thJ-IX-chT" secondAttribute="trailing" constant="5" id="87p-7b-Nmg"/>
                <constraint firstAttribute="bottom" secondItem="thJ-IX-chT" secondAttribute="bottom" constant="5" id="Jac-BX-gdA"/>
                <constraint firstItem="thJ-IX-chT" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="5" id="faG-NX-NIM"/>
            </constraints>
            <size key="customSize" width="382" height="187"/>
            <size key="customSize" width="382" height="320"/>
            <connections>
                <outlet property="img_cover" destination="pTu-5i-L13" id="RBl-ek-ybz"/>
                <outlet property="label_address" destination="neg-i1-S7H" id="1vD-Gd-e0N"/>
                <outlet property="label_distance" destination="7Ad-qv-y5J" id="DYi-sG-VUW"/>
                <outlet property="label_title" destination="9qr-cP-39L" id="rdg-3J-NFv"/>
                <outlet property="view_container" destination="thJ-IX-chT" id="iYY-QF-ouM"/>
            </connections>
            <point key="canvasLocation" x="316.03053435114504" y="126.40845070422536"/>
            <point key="canvasLocation" x="316.03053435114504" y="173.2394366197183"/>
        </collectionViewCell>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
        <systemColor name="systemGray6Color">
            <color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </systemColor>
WanPai/Root/Search/TCell/MyCardTCell.swift
New file
@@ -0,0 +1,94 @@
//
//  MyCardTCell.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/28.
//
import UIKit
import JQTools
import RxRelay
import RxSwift
class MyCardTCell: UITableViewCell {
    @IBOutlet weak var view_container: UIView!
    @IBOutlet weak var btn_refund: UIButton!
    @IBOutlet weak var img: UIImageView!
    @IBOutlet weak var label_title: UILabel!
    @IBOutlet weak var label_subTitle: UILabel!
    private var model:HuiminCardMyItemModel?
    private var disposeBag = DisposeBag()
    override func awakeFromNib() {
        super.awakeFromNib()
        selectionStyle = .none
        btn_refund.borderWidth = 1
        btn_refund.jq_borderColor = UIColor(hexString: "#C8C8C8")
        btn_refund.cornerRadius = 2
        view_container.jq_addShadows(shadowColor: .black.withAlphaComponent(0.1), corner: 10, radius: 5, offset: CGSize(width: 0, height: 10), opacity: 1)
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        img.jq_addCorners(corner: [.topRight,.topLeft], radius: 10, width: JQ_ScreenW - 40, height: 220)
    }
    @IBAction func refundAction(_ sender: UIButton) {
        guard let m = model else { return  }
        guard m.isRefund == 1 else {return}
        guard m.isExpire == 0 else {return}
        guard m.status == 2 else{return}
        if m.isRefund == 2{
            alert(msg: "正在退款流程中");return
        }
        let attributedStringbuilder = AttributedStringbuilder.build()
            .add(string: "退款金额:\(m.salesMoney.currency())\n\n", withFont: .systemFont(ofSize: 16, weight: .medium), withColor: UIColor(hexStr: "#FE7D03"))
            .add(string: "确认退款吗?确认后支付金额将原路返回!", withFont: .systemFont(ofSize: 16, weight: .medium), withColor: .black.withAlphaComponent(0.8)).mutableAttributedString
        CommonAlertView.show(title: "提示", attribute: attributedStringbuilder, isSingle: false) {[unowned self] state in
            if state{
                Services.myHuiminRefund(id: m.id).subscribe(onNext: {data in
                    alertSuccess(msg: "已发起退款申请")
                    DispatchQueue.main.asyncAfter(wallDeadline: .now()+1.0) {
                        NotificationCenter.default.post(name: Noti_MyCard_Refresh, object: nil)
                    }
                }).disposed(by: self.disposeBag)
            }
        }
    }
    func setModel(_ model:HuiminCardMyItemModel){
        self.model = model
        img.sd_setImage(with: URL(string: model.cover))
        if model.isExpire == 0{
            label_subTitle.text = "有效期至:" + model.endTime
        }else{
            label_subTitle.text = "已过期"
        }
        label_title.text = model.studentList.map({$0.name}).joined(separator: ",")
        if model.isRefund == 2{
            btn_refund.setTitle("退款中", for: .normal)
            view_container.alpha = 1
        }else{
            btn_refund.setTitle("退款", for: .normal)
            view_container.alpha = 1
        }
        if model.status == 3{
            btn_refund.setTitle("已退款", for: .normal)
        }
        if model.status == 3 || model.isExpire == 1{
            view_container.alpha = 0.5
        }
    }
}
WanPai/Root/Search/TCell/MyCardTCell.xib
New file
@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="23506"/>
        <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" rowHeight="275" id="KGk-i7-Jjw" customClass="MyCardTCell" customModule="WanPai" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="320" height="275"/>
            <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="320" height="275"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xRS-EW-0ze">
                        <rect key="frame" x="20" y="0.0" width="280" height="255"/>
                        <subviews>
                            <view contentMode="scaleAspectFill" translatesAutoresizingMaskIntoConstraints="NO" id="nf4-Ou-Ude">
                                <rect key="frame" x="0.0" y="0.0" width="280" height="200"/>
                                <subviews>
                                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_card_mask" translatesAutoresizingMaskIntoConstraints="NO" id="GpB-g5-DS4">
                                        <rect key="frame" x="0.0" y="0.0" width="280" height="200"/>
                                    </imageView>
                                </subviews>
                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                <constraints>
                                    <constraint firstItem="GpB-g5-DS4" firstAttribute="leading" secondItem="nf4-Ou-Ude" secondAttribute="leading" id="DKA-xF-uvr"/>
                                    <constraint firstAttribute="bottom" secondItem="GpB-g5-DS4" secondAttribute="bottom" id="UKr-Hp-mpb"/>
                                    <constraint firstAttribute="trailing" secondItem="GpB-g5-DS4" secondAttribute="trailing" id="Y9x-OJ-U8x"/>
                                    <constraint firstAttribute="height" constant="200" id="vMj-JC-qaG"/>
                                    <constraint firstItem="GpB-g5-DS4" firstAttribute="top" secondItem="nf4-Ou-Ude" secondAttribute="top" id="vfi-Bb-rfu"/>
                                </constraints>
                            </view>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jhO-J2-YDG">
                                <rect key="frame" x="180" y="219" width="86" height="31"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="31" id="F4l-gV-mMp"/>
                                    <constraint firstAttribute="width" constant="86" id="iFH-3G-iJc"/>
                                </constraints>
                                <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="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                                </state>
                                <connections>
                                    <action selector="refundAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="N31-03-eW6"/>
                                </connections>
                            </button>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zUg-yp-Y13">
                                <rect key="frame" x="14" y="214" width="160" height="19.333333333333343"/>
                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
                                <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="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oOa-ct-EVe">
                                <rect key="frame" x="14" y="235.33333333333334" width="156" height="17"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="17" id="nSz-8n-8Gv"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.62" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="oOa-ct-EVe" firstAttribute="top" secondItem="zUg-yp-Y13" secondAttribute="bottom" constant="2" id="43O-Ph-nvu"/>
                            <constraint firstAttribute="trailing" secondItem="jhO-J2-YDG" secondAttribute="trailing" constant="14" id="8Dn-fM-3Pk"/>
                            <constraint firstItem="zUg-yp-Y13" firstAttribute="top" secondItem="nf4-Ou-Ude" secondAttribute="bottom" constant="14" id="9Fn-Uq-Nfo"/>
                            <constraint firstItem="zUg-yp-Y13" firstAttribute="leading" secondItem="xRS-EW-0ze" secondAttribute="leading" constant="14" id="9sU-SB-Tdf"/>
                            <constraint firstItem="nf4-Ou-Ude" firstAttribute="leading" secondItem="xRS-EW-0ze" secondAttribute="leading" id="HHa-5d-5et"/>
                            <constraint firstItem="oOa-ct-EVe" firstAttribute="leading" secondItem="zUg-yp-Y13" secondAttribute="leading" id="Ja9-az-DZr"/>
                            <constraint firstItem="nf4-Ou-Ude" firstAttribute="top" secondItem="xRS-EW-0ze" secondAttribute="top" id="MZF-1v-h69"/>
                            <constraint firstItem="jhO-J2-YDG" firstAttribute="top" secondItem="nf4-Ou-Ude" secondAttribute="bottom" constant="19" id="Mq5-Fy-6W0"/>
                            <constraint firstAttribute="trailing" secondItem="nf4-Ou-Ude" secondAttribute="trailing" id="dVg-fS-sM7"/>
                            <constraint firstItem="jhO-J2-YDG" firstAttribute="leading" secondItem="oOa-ct-EVe" secondAttribute="trailing" constant="10" id="feh-3a-EpC"/>
                            <constraint firstItem="jhO-J2-YDG" firstAttribute="leading" secondItem="zUg-yp-Y13" secondAttribute="trailing" constant="6" id="sMO-qK-kIq"/>
                        </constraints>
                    </view>
                </subviews>
                <constraints>
                    <constraint firstItem="xRS-EW-0ze" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="20" id="BUg-Lw-Z6q"/>
                    <constraint firstItem="xRS-EW-0ze" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="ExS-ty-oIf"/>
                    <constraint firstAttribute="trailing" secondItem="xRS-EW-0ze" secondAttribute="trailing" constant="20" id="eZq-xS-rJA"/>
                    <constraint firstAttribute="bottom" secondItem="xRS-EW-0ze" secondAttribute="bottom" constant="20" id="n5W-PO-zOr"/>
                </constraints>
            </tableViewCellContentView>
            <connections>
                <outlet property="btn_refund" destination="jhO-J2-YDG" id="i1Q-o0-j0R"/>
                <outlet property="img" destination="GpB-g5-DS4" id="WDc-Rb-08i"/>
                <outlet property="label_subTitle" destination="oOa-ct-EVe" id="zec-ke-0xQ"/>
                <outlet property="label_title" destination="zUg-yp-Y13" id="AWF-35-mcb"/>
                <outlet property="view_container" destination="xRS-EW-0ze" id="LKd-wp-xIx"/>
            </connections>
            <point key="canvasLocation" x="138.93129770992365" y="101.05633802816902"/>
        </tableViewCell>
    </objects>
    <resources>
        <image name="icon_card_mask" width="350" height="140"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/Search/TCell/StudentInfo_6_TCell.swift
New file
@@ -0,0 +1,40 @@
//
//  StudentInfo_5_TCell.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/27.
//
import UIKit
class StudentInfo_6_TCell: UITableViewCell {
    var activityDetailPartModel:StudentProfile1Model?{
        didSet{
            if let model = activityDetailPartModel{
                label_name.text = model.stuName
                label_age.text = "\(model.stuAge)岁"
                label_idCard.text = model.idCard
                label_phone.text = model.stuPhone
            }
        }
    }
    @IBOutlet weak var label_name: UILabel!
    @IBOutlet weak var label_age: UILabel!
    @IBOutlet weak var label_idCard: UILabel!
    @IBOutlet weak var label_phone: UILabel!
    var indexPath:IndexPath!
    var deleteAt:((Int)->Void)?
    override func awakeFromNib() {
        super.awakeFromNib()
        selectionStyle = .none
    }
    @IBAction func deleteAction(_ sender: UIButton) {
        deleteAt?(indexPath.row)
    }
}
WanPai/Root/Search/TCell/StudentInfo_6_TCell.xib
New file
@@ -0,0 +1,149 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="23506"/>
        <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" rowHeight="99" id="KGk-i7-Jjw" customClass="StudentInfo_6_TCell" customModule="WanPai" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="335" height="99"/>
            <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="335" height="99"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mhn-bL-c9i">
                        <rect key="frame" x="0.0" y="7" width="335" 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="k3U-VF-Ek5">
                                <rect key="frame" x="10" y="13" width="35" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="20" id="EPv-7B-TV2"/>
                                </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="TQX-sL-JEf">
                                <rect key="frame" x="45" 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="MSZ-pv-bOP">
                                <rect key="frame" x="114" y="13" width="72" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="20" id="4WG-hx-b46"/>
                                    <constraint firstAttribute="width" constant="72" id="4is-ST-CXs"/>
                                </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="sM5-6t-fh6">
                                <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="4Cc-fb-yer">
                                <rect key="frame" x="10" y="44" width="35" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="20" id="8GV-z0-s6m"/>
                                </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="iHh-hx-4e0">
                                <rect key="frame" x="45" 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="AT3-xC-UbC">
                                <rect key="frame" x="114.00000000000001" y="44" width="62.666666666666671" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="20" id="sgD-hW-okN"/>
                                </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="AHW-Bs-DOD">
                                <rect key="frame" x="176.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>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hJS-GP-gXV">
                                <rect key="frame" x="302" y="46" width="20" height="22"/>
                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                <state key="normal" image="btn_delete_2"/>
                                <connections>
                                    <action selector="deleteAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="pCf-qi-abS"/>
                                </connections>
                            </button>
                        </subviews>
                        <viewLayoutGuide key="safeArea" id="3Ji-CP-IpC"/>
                        <color key="backgroundColor" red="1" green="0.90588235289999997" blue="0.80000000000000004" alpha="0.080000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="iHh-hx-4e0" firstAttribute="leading" secondItem="4Cc-fb-yer" secondAttribute="trailing" id="75Y-e2-Qng"/>
                            <constraint firstItem="sM5-6t-fh6" firstAttribute="centerY" secondItem="MSZ-pv-bOP" secondAttribute="centerY" id="7Jl-i8-BHU"/>
                            <constraint firstItem="TQX-sL-JEf" firstAttribute="centerY" secondItem="k3U-VF-Ek5" secondAttribute="centerY" id="AWT-BT-heY"/>
                            <constraint firstItem="AHW-Bs-DOD" firstAttribute="centerY" secondItem="AT3-xC-UbC" secondAttribute="centerY" id="ICm-7H-Tjg"/>
                            <constraint firstItem="k3U-VF-Ek5" firstAttribute="top" secondItem="mhn-bL-c9i" secondAttribute="top" constant="13" id="L48-Ci-L0b"/>
                            <constraint firstItem="4Cc-fb-yer" firstAttribute="leading" secondItem="mhn-bL-c9i" secondAttribute="leading" constant="10" id="L8o-Qp-kdr"/>
                            <constraint firstItem="MSZ-pv-bOP" firstAttribute="leading" secondItem="mhn-bL-c9i" secondAttribute="leading" constant="114" id="NCP-OF-g7R"/>
                            <constraint firstItem="AT3-xC-UbC" firstAttribute="leading" secondItem="MSZ-pv-bOP" secondAttribute="leading" id="Nxo-kt-bpF"/>
                            <constraint firstAttribute="height" constant="76" id="OhT-1v-z9N"/>
                            <constraint firstItem="MSZ-pv-bOP" firstAttribute="centerY" secondItem="k3U-VF-Ek5" secondAttribute="centerY" id="SEM-cr-Jgo"/>
                            <constraint firstItem="AHW-Bs-DOD" firstAttribute="leading" secondItem="AT3-xC-UbC" secondAttribute="trailing" id="bU5-TC-eY6"/>
                            <constraint firstItem="sM5-6t-fh6" firstAttribute="leading" secondItem="MSZ-pv-bOP" secondAttribute="trailing" id="f25-5Y-iKf"/>
                            <constraint firstItem="TQX-sL-JEf" firstAttribute="leading" secondItem="k3U-VF-Ek5" secondAttribute="trailing" id="h1h-JB-ovl"/>
                            <constraint firstItem="iHh-hx-4e0" firstAttribute="centerY" secondItem="4Cc-fb-yer" secondAttribute="centerY" id="h7F-xa-2aC"/>
                            <constraint firstItem="k3U-VF-Ek5" firstAttribute="leading" secondItem="mhn-bL-c9i" secondAttribute="leading" constant="10" id="kUs-uX-XuE"/>
                            <constraint firstItem="3Ji-CP-IpC" firstAttribute="bottom" secondItem="hJS-GP-gXV" secondAttribute="bottom" constant="8" id="kZ0-Zi-wpC"/>
                            <constraint firstItem="AT3-xC-UbC" firstAttribute="centerY" secondItem="4Cc-fb-yer" secondAttribute="centerY" id="oGo-fa-rGU"/>
                            <constraint firstItem="4Cc-fb-yer" firstAttribute="top" secondItem="k3U-VF-Ek5" secondAttribute="bottom" constant="11" id="wWS-81-CMW"/>
                            <constraint firstItem="3Ji-CP-IpC" firstAttribute="trailing" secondItem="hJS-GP-gXV" secondAttribute="trailing" constant="13" id="x0W-FI-ZpL"/>
                        </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="mhn-bL-c9i" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="7" id="Air-1L-RrE"/>
                    <constraint firstItem="mhn-bL-c9i" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="OJJ-SG-wSH"/>
                    <constraint firstAttribute="trailing" secondItem="mhn-bL-c9i" secondAttribute="trailing" id="WYw-KE-OUs"/>
                    <constraint firstAttribute="bottom" secondItem="mhn-bL-c9i" secondAttribute="bottom" constant="7" id="wMk-MJ-A7b"/>
                </constraints>
            </tableViewCellContentView>
            <connections>
                <outlet property="label_age" destination="iHh-hx-4e0" id="Vq5-zm-OU8"/>
                <outlet property="label_idCard" destination="sM5-6t-fh6" id="VqS-C8-eCj"/>
                <outlet property="label_name" destination="TQX-sL-JEf" id="Rxg-gq-oly"/>
                <outlet property="label_phone" destination="AHW-Bs-DOD" id="BYc-fK-iTZ"/>
            </connections>
            <point key="canvasLocation" x="150.38167938931298" y="39.08450704225352"/>
        </tableViewCell>
    </objects>
    <resources>
        <image name="btn_delete_2" width="20" height="20"/>
    </resources>
</document>
WanPai/Root/Search/VC/MyCardItemVC.swift
New file
@@ -0,0 +1,61 @@
//
//  MyCardItemVC.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/28.
//
import UIKit
import WebKit
import JQTools
import Combine
class MyCardItemVC: BaseVC {
    @IBOutlet weak var label_time: UILabel!
    @IBOutlet weak var imgCode: UIImageView!
    @IBOutlet weak var webView: WKWebView!
    @IBOutlet weak var cons_web_hei: NSLayoutConstraint!
    @IBOutlet weak var view_bg_grand: UIView!
    @IBOutlet weak var view_container: UIView!
    private var subscriptions = Set<AnyCancellable>()
    private var id:Int!
    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.myHuiminCardDetail(id: id).subscribe(onNext: {data in
            if let m = data.data{
                self.label_time.attributedText = AttributedStringbuilder.build().add(string: "该卡有效期至 ", withFont: .systemFont(ofSize: 16, weight: .medium), withColor: .black)
                    .add(string: m.endTime, withFont: .systemFont(ofSize: 16), withColor: UIColor(hexString: "#ff7300")!).mutableAttributedString
                self.imgCode.image = UIImage.jq_GenerateQRCode(with: m.huiminCard?.qrCode ?? "", width: 250)
                self.webView.loadHTMLString(m.introduce.jq_wrapHtml(), baseURL: nil)
            }
        }).disposed(by: disposeBag)
    }
    override func setUI() {
        view.backgroundColor = UIColor(hexStr: "#F5F5F5")
        view_container.jq_cornerRadius = 10
        let colors = [UIColor(hexStr: "#FD7202").cgColor,
                      UIColor.white.cgColor,]
        view_bg_grand.jq_gradientColor(colorArr: colors, cornerRadius: 0, startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 1), bounds: CGRect(x: 0, y: 0, width: JQ_ScreenW, height: 400), locations: nil, clear: false)
    }
    override func setRx() {
        webView.publisher(for: \.scrollView.contentSize).sink {[unowned self] size in
            self.cons_web_hei.constant = size.height
        }.store(in: &subscriptions)
    }
}
WanPai/Root/Search/VC/MyCardItemVC.xib
New file
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="23506"/>
        <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="MyCardItemVC" customModule="WanPai" customModuleProvider="target">
            <connections>
                <outlet property="cons_web_hei" destination="MNE-uE-3VM" id="Q7H-jh-Lmv"/>
                <outlet property="imgCode" destination="oxM-V6-RBZ" id="aBd-Lj-ob4"/>
                <outlet property="label_time" destination="kZR-m1-pa5" id="nVr-pY-xR6"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
                <outlet property="view_bg_grand" destination="6b1-tx-BuI" id="Yt5-XV-lDr"/>
                <outlet property="view_container" destination="p5w-FE-4ga" id="cYO-wd-q2E"/>
                <outlet property="webView" destination="rz3-cG-W2c" id="F2u-PJ-O4G"/>
            </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="6b1-tx-BuI">
                    <rect key="frame" x="0.0" y="59" width="393" height="400"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="400" id="FYs-oc-V1o"/>
                    </constraints>
                </view>
                <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bvf-YV-Ozx">
                    <rect key="frame" x="0.0" y="59" width="393" height="759"/>
                    <subviews>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5Md-qP-As0">
                            <rect key="frame" x="0.0" y="0.0" width="393" height="465"/>
                            <subviews>
                                <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rz3-cG-W2c">
                                    <rect key="frame" x="0.0" y="365" width="393" height="100"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="100" id="MNE-uE-3VM"/>
                                    </constraints>
                                    <wkWebViewConfiguration key="configuration">
                                        <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
                                        <wkPreferences key="preferences"/>
                                    </wkWebViewConfiguration>
                                </wkWebView>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="p5w-FE-4ga">
                                    <rect key="frame" x="15" y="20" width="363" height="345"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="您的玩湃惠民卡入场二维码" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lgX-3Z-YWn">
                                            <rect key="frame" x="74.333333333333329" y="20" width="214.33333333333337" height="21.666666666666671"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="calibratedRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="oxM-V6-RBZ">
                                            <rect key="frame" x="81.666666666666686" y="61.666666666666657" width="200" height="199.99999999999997"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="200" id="T4E-zx-rdu"/>
                                                <constraint firstAttribute="width" constant="200" id="fwC-Hx-uzO"/>
                                            </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="kZR-m1-pa5">
                                            <rect key="frame" x="175" y="281.66666666666669" width="13" 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>
                                    </subviews>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstItem="kZR-m1-pa5" firstAttribute="top" secondItem="oxM-V6-RBZ" secondAttribute="bottom" constant="20" id="CU7-Sr-fHt"/>
                                        <constraint firstItem="oxM-V6-RBZ" firstAttribute="centerX" secondItem="p5w-FE-4ga" secondAttribute="centerX" id="J0X-rk-fWA"/>
                                        <constraint firstItem="kZR-m1-pa5" firstAttribute="centerX" secondItem="p5w-FE-4ga" secondAttribute="centerX" id="MPg-jJ-Jii"/>
                                        <constraint firstAttribute="width" secondItem="p5w-FE-4ga" secondAttribute="height" multiplier="1:0.95" id="RXn-EL-vpD"/>
                                        <constraint firstItem="oxM-V6-RBZ" firstAttribute="top" secondItem="lgX-3Z-YWn" secondAttribute="bottom" constant="20" id="lf1-cD-09i"/>
                                        <constraint firstItem="lgX-3Z-YWn" firstAttribute="centerX" secondItem="p5w-FE-4ga" secondAttribute="centerX" id="mwq-Im-LMk"/>
                                        <constraint firstItem="lgX-3Z-YWn" firstAttribute="top" secondItem="p5w-FE-4ga" secondAttribute="top" constant="20" id="tIk-Kd-ufU"/>
                                    </constraints>
                                </view>
                            </subviews>
                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                            <constraints>
                                <constraint firstItem="rz3-cG-W2c" firstAttribute="top" secondItem="p5w-FE-4ga" secondAttribute="bottom" id="8iP-tT-E4x"/>
                                <constraint firstAttribute="trailing" secondItem="p5w-FE-4ga" secondAttribute="trailing" constant="15" id="9kB-1Q-a3p"/>
                                <constraint firstItem="p5w-FE-4ga" firstAttribute="leading" secondItem="5Md-qP-As0" secondAttribute="leading" constant="15" id="Nxf-hY-2kR"/>
                                <constraint firstAttribute="bottom" secondItem="rz3-cG-W2c" secondAttribute="bottom" id="YLK-J2-yHO"/>
                                <constraint firstAttribute="trailing" secondItem="rz3-cG-W2c" secondAttribute="trailing" id="oEo-H5-rO0"/>
                                <constraint firstItem="rz3-cG-W2c" firstAttribute="leading" secondItem="5Md-qP-As0" secondAttribute="leading" id="xAk-DE-2wk"/>
                                <constraint firstItem="p5w-FE-4ga" firstAttribute="top" secondItem="5Md-qP-As0" secondAttribute="top" constant="20" id="zza-TZ-RBd"/>
                            </constraints>
                        </view>
                    </subviews>
                    <constraints>
                        <constraint firstAttribute="bottom" secondItem="5Md-qP-As0" secondAttribute="bottom" id="3lk-ch-a1l"/>
                        <constraint firstItem="5Md-qP-As0" firstAttribute="centerX" secondItem="bvf-YV-Ozx" secondAttribute="centerX" id="Es4-py-MLB"/>
                        <constraint firstItem="5Md-qP-As0" firstAttribute="top" secondItem="bvf-YV-Ozx" secondAttribute="top" id="NE0-3x-3TY"/>
                        <constraint firstItem="5Md-qP-As0" firstAttribute="leading" secondItem="bvf-YV-Ozx" secondAttribute="leading" id="clI-9q-tVj"/>
                        <constraint firstAttribute="trailing" secondItem="5Md-qP-As0" secondAttribute="trailing" id="lFx-f6-w6L"/>
                    </constraints>
                </scrollView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" red="0.96078431372549022" green="0.96078431372549022" blue="0.96078431372549022" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="bvf-YV-Ozx" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="1Wp-0w-XCx"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="6b1-tx-BuI" secondAttribute="trailing" id="Q4A-7Z-CcN"/>
                <constraint firstItem="6b1-tx-BuI" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="dI2-pt-Bv8"/>
                <constraint firstItem="bvf-YV-Ozx" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="eGH-Kn-cqZ"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="bvf-YV-Ozx" secondAttribute="trailing" id="k25-y4-DLj"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="bvf-YV-Ozx" secondAttribute="bottom" id="r7M-cm-wTA"/>
                <constraint firstItem="6b1-tx-BuI" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="topMargin" id="sEi-DQ-Rjb"/>
            </constraints>
            <point key="canvasLocation" x="138.1679389312977" y="20.422535211267608"/>
        </view>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
WanPai/Root/Search/VC/MyCardListVC.swift
New file
@@ -0,0 +1,106 @@
//
//  MyCardListVC.swift
//  WanPai
//
//  Created by 无故事王国 on 2025/3/28.
//
import UIKit
import RxSwift
import RxCocoa
import SnapKit
import MJRefresh
class MyCardViewModel:RefreshModel<HuiminCardMyItemModel>{
    override func api() -> (Observable<BaseResponse<[HuiminCardMyItemModel]>>)? {
        return Services.getMyHuiminCard(page: page)
    }
}
let Noti_MyCard_Refresh = Notification.Name.init("Noti_MyCard_Refresh")
class MyCardListVC: BaseVC {
    private let viewModel = MyCardViewModel()
    private var tableView:UITableView!
    private var sotreId:Int?
    private var model:HuiminCardModel?
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "我的惠民卡"
        viewModel.dataSource.subscribe(onNext: {[unowned self] data in
            if data.count == 1,let model = data.first,model.isExpire == 0,model.status == 2{
                let vc = MyCardItemVC(id: model.id)
                self.push(vc: vc)
            }
            self.tableView.reloadData()
        }).disposed(by: disposeBag)
    }
    override func setUI() {
        tableView = UITableView(frame: .zero, style: .plain)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.dataSource = self
        tableView.separatorStyle = .none
        tableView.contentInset = UIEdgeInsets(top: 30, left: 0, bottom: 0, right: 0)
        tableView.register(UINib(nibName: "MyCardTCell", bundle: nil), forCellReuseIdentifier: "_MyCardTCell")
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
        viewModel.configure(tableView)
        tableView.mj_header?.ignoredScrollViewContentInsetTop = 30
        viewModel.beginRefresh()
    }
    override func setRx() {
        NotificationCenter.default.rx.notification(Noti_MyCard_Refresh).take(until: self.rx.deallocated).subscribe(onNext: {[unowned self] _ in
            self.viewModel.beginRefresh()
        }).disposed(by: disposeBag)
    }
}
extension MyCardListVC:UITableViewDelegate{
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let m = viewModel.dataSource.value[indexPath.row]
        guard m.isExpire == 0 else{
            alert(msg: "该卡已过期");return
        }
        if m.status == 3{
            alert(msg: "该卡已退款");return
        }
        if m.isRefund == 2{
            alert(msg: "该卡正在退款中");return
        }
        let vc = MyCardItemVC(id: m.id)
        push(vc: vc)
    }
}
extension MyCardListVC:UITableViewDataSource{
    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: "_MyCardTCell", for: indexPath) as! MyCardTCell
        cell.setModel(model)
        return cell
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 290
    }
}
WanPai/Root/Search/VC/SearchVC.swift
@@ -19,13 +19,17 @@
                @IBOutlet weak var label_wpCoin: UILabel!
                @IBOutlet weak var label_coin: UILabel!
                @IBOutlet weak var btn_becomeVIP: UIButton!
                var benefitHomeModel:BenefitHomeModel?
    @IBOutlet weak var view_top: UIView!
    @IBOutlet weak var coinCollectionView: UICollectionView!
    @IBOutlet weak var btn_coupon: UIButton!
    @IBOutlet weak var btn_shopping: UIButton!
    var benefitHomeModel:BenefitHomeModel?
                private var models = [StartClouseExploreModel]()
//                private var items = ["我的二维码","我的订场","社区世界杯","已报名活动","我的运动营","人员管理","我的券包","兑换记录","消费记录","积分明细","我的玩湃币"]
                private var items = ["我的二维码","我的订场","社区世界杯","已报名活动","我的运动营","人员管理","我的券包","兑换记录","消费记录","积分明细"]
                private var items = ["我的二维码","我的订场","社区世界杯","已报名活动","我的运动营","人员管理","我的券包","兑换记录","消费记录","积分明细","玩湃惠民卡"]
//                private var itemsImg = ["me_code","me_yard","me_wordCup","me_activity","me_camp","me_peoples","me_coupons","me_withdrawRec","me_consume","me_coin","me_payCoin","me_judge"]
                private var itemsImg = ["me_code","me_yard","me_wordCup","me_activity","me_camp","me_peoples","me_coupons","me_withdrawRec","me_consume","me_coin"]
                private var itemsImg = ["me_code","me_yard","me_wordCup","me_activity","me_camp","me_peoples","me_coupons","me_withdrawRec","me_consume","me_coin","me_card"]
                override func viewDidDisappear(_ animated: Bool) {
                                super.viewDidDisappear(animated)
@@ -48,16 +52,22 @@
                override func viewDidAppear(_ animated: Bool) {
                                super.viewDidAppear(animated)
                                getData()
//        navigationController?.isNavigationBarHidden = true
                }
                override func setUI() {
                                banner_collectionView.delegate = self
                                banner_collectionView.dataSource = self
                                banner_collectionView.register(UINib(nibName: "SearchBannerCCell", bundle: nil), forCellWithReuseIdentifier: "_SearchBannerCCell")
        banner_collectionView.contentInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
                                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)
        coinCollectionView.delegate  = self
        coinCollectionView.dataSource = self
        coinCollectionView.register(UINib(nibName: "WelfareCoinCCell", bundle: nil), forCellWithReuseIdentifier: "_WelfareCoinCCell")
                                //临时隐藏会员功能按钮
@@ -66,11 +76,15 @@
                            img_vipMedal.isHidden = true
                            btn_becomeVIP.isEnabled = false
                                //临时隐藏会员功能按钮
         let rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "btn_s_setting"), style: .plain, target: self, action: #selector(settingAction))
        rightBarButtonItem.tintColor = .white
        navigationItem.rightBarButtonItem = rightBarButtonItem
                }
                override func viewDidLayoutSubviews() {
                                super.viewDidLayoutSubviews()
        view_top.jq_addShadows(shadowColor: .black.withAlphaComponent(0.1), corner: 10, radius: 5, offset: CGSize(width: 10, height: 0), opacity: 1)
                }
                private func getData(){
@@ -101,6 +115,14 @@
                                                                //临时隐藏会员功能按钮
                if let coupon = model.image?.myConpons{
                    self?.btn_coupon.sd_setImage(with: URL(string: coupon), for: .normal, placeholderImage: nil,context: nil)
                }
                if let onlineShop = model.image?.onlineShop{
                    self?.btn_shopping.sd_setImage(with: URL(string: onlineShop), for: .normal, placeholderImage: nil,context: nil)
                }
                                                                if model.referee == 1{
                                                                                if !weakSelf.items.contains(where: {$0 == "裁判入口"}){
                                                                                                self?.items.append("裁判入口")
@@ -114,13 +136,44 @@
                                                                                                self?.func_collectionView.reloadData()
                                                                                }
                                                                }
                self?.coinCollectionView.reloadData()
                                                }
                                }) { error in
                                }.disposed(by: disposeBag)
//        Services.benefitHome().subscribe(onNext: {[weak self] data in
//            if let model = data.data{
//                self?.benefitHomeModel = model
//
//            }
//        }) { error in
//
//        }.disposed(by: disposeBag)
                }
    @IBAction func shoppingAction(_ sender: UIButton) {
        CommonAlertView.show(title: "提示", content: "即将打开京东,是否继续?") { status in
            if status{
                if UIApplication.shared.canOpenURL(URL(string: "openApp.jdMobile://")!){
                    let url = "openApp.jdMobile://virtual?params={\"category\":\"jump\",\"des\":\"jshopMain\",\"shopId\":\"15995015\",\"sourceType\":\"APP\",\"sourceValue\":\"1000\",\"landPageId\":\"iOS\"}"
                    UIApplication.shared.open(URL(string: url)!)
                }else{
                    let url = "https://shop.m.jd.com/shop/home?shopId=15995015"
                    UIApplication.shared.open(URL(string: url)!)
                }
            }
        }
    }
    @IBAction func couponsAction(_ sender: UIButton) {
        let vc = WelfareCouponsListVC()
        push(vc: vc)
    }
                @IBAction func becomeVIPAction(_ sender: Any) {
                                let vc = JoinMemberIntroduceVC()
                                push(vc: vc)
@@ -211,6 +264,9 @@
                                                                case "我的玩湃币":
                                                                let vc = RechargeRecordVC(coin: benefitHomeModel?.wpCoin ?? 0,subtype: .coin)
                                                                push(vc: vc)
                case "玩湃惠民卡":
                let vc = MyCardListVC()
                self.push(vc: vc)
                                                                case "裁判入口":
                                                                let vc = JudgeListVC()
                                                                push(vc: vc)
@@ -234,6 +290,11 @@
                                if collectionView == func_collectionView{
                                                return items.count
                                }
        if collectionView == coinCollectionView{
            return benefitHomeModel?.commodities.count ?? 0
        }
                                return models.count
                }
@@ -245,6 +306,27 @@
                                                cell.img_avar.image = UIImage(named: itemsImg[indexPath.row])
                                                return cell
                                }
        if collectionView == coinCollectionView{
            let model = benefitHomeModel!.commodities[indexPath.row]
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_WelfareCoinCCell", for: indexPath) as! WelfareCoinCCell
            cell.label_name.text = model.commodityName
            switch model.redemptionMethod {
                case 1: //积分
                    cell.label_price.text = "\(model.integral)积分"
                case 2: //现金+积分
                    cell.label_price.text = "\(model.integral)积分+\(model.commodityPrice.currency())"
                case 3://现金
                    cell.label_price.text = "\(model.commodityPrice.currency())"
                default:
                    cell.label_price.text = ""
            }
            cell.img_cover.sd_setImage(with: URL(string: model.commodityImg), placeholderImage: nil)
            return cell
        }
                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_SearchBannerCCell", for: indexPath) as! SearchBannerCCell
                                let model = models[indexPath.row]
@@ -260,21 +342,30 @@
                                if collectionView == func_collectionView{
                                                return 0
                                }
                                return 0
        if collectionView == coinCollectionView{
            return 0
        }
                                return 14
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                if collectionView == func_collectionView{
                                                return 0
                                }
                                return 0
        if collectionView == coinCollectionView{
            return 0
        }
                                return 14
                }
                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)
        if collectionView == coinCollectionView{
            return CGSize(width: 144.0, height: 178)
        }
        return CGSize(width: JQ_ScreenW * 0.743, height: JQ_ScreenW * 0.743 * 0.931)
                }
}
WanPai/Root/Search/VC/SearchVC.xib
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="22684"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
        <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"/>
@@ -14,15 +14,19 @@
            <connections>
                <outlet property="banner_collectionView" destination="GVG-mQ-5A4" id="keS-lx-iWt"/>
                <outlet property="btn_becomeVIP" destination="ISP-Cr-8RW" id="vl4-vq-GSF"/>
                <outlet property="btn_coupon" destination="YIA-v8-8qM" id="Lya-S8-ToX"/>
                <outlet property="btn_shopping" destination="pZP-oL-WAW" id="JFV-qa-2Dz"/>
                <outlet property="coinCollectionView" destination="PRF-Eg-Ph3" id="lgH-Hn-CSn"/>
                <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_coin" destination="HrO-l2-AhP" id="7oc-UI-ple"/>
                <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="label_wpCoin" destination="k1z-ax-UOa" id="voK-lp-gqr"/>
                <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_top" destination="1Yu-z5-de2" id="cMQ-Lz-ueU"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
@@ -30,176 +34,189 @@
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bg_home_3" translatesAutoresizingMaskIntoConstraints="NO" id="IhV-tR-DU2">
                    <rect key="frame" x="0.0" y="0.0" width="393" height="206"/>
                </imageView>
                <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Jbe-CY-MmI">
                    <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="1160.3333333333333"/>
                            <rect key="frame" x="0.0" y="0.0" width="393" height="2056"/>
                            <subviews>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1Yu-z5-de2">
                                    <rect key="frame" x="0.0" y="0.0" width="393" height="300"/>
                                    <rect key="frame" x="20" y="0.0" width="353" height="219"/>
                                    <subviews>
                                        <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"/>
                                            <rect key="frame" x="20" y="26" width="80" height="80"/>
                                            <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"/>
                                                <constraint firstAttribute="width" constant="80" id="0g6-gD-Ksh"/>
                                                <constraint firstAttribute="height" constant="80" 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"/>
                                                    <real key="value" value="40"/>
                                                </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"/>
                                            <rect key="frame" x="114" y="34" width="19.333333333333343" height="26.333333333333329"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="22"/>
                                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <color key="textColor" red="0.29019607843137252" green="0.29019607843137252" blue="0.29019607843137252" 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="qIB-bn-Xg1">
                                            <rect key="frame" x="138.66666666666666" y="94.333333333333343" width="14" height="18"/>
                                            <rect key="frame" x="133.66666666666666" y="71.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"/>
                                            <color key="textColor" red="0.18823529411764706" green="0.32941176470588235" blue="0.38823529411764707" 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"/>
                                            <rect key="frame" x="114" y="72" width="15.666666666666657" height="17"/>
                                            <constraints>
                                                <constraint firstAttribute="width" constant="21" id="912-zr-umq"/>
                                                <constraint firstAttribute="height" constant="23" id="D5U-Mo-93F"/>
                                                <constraint firstAttribute="width" constant="15.550000000000001" id="912-zr-umq"/>
                                                <constraint firstAttribute="height" constant="17" 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_setting_find"/>
                                            <connections>
                                                <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 hidden="YES" opaque="NO" contentMode="scaleToFill" enabled="NO" 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="232" y="192" width="119" height="46.333333333333343"/>
                                            <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">
                                                <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>
                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ISP-Cr-8RW">
                                            <rect key="frame" x="138.66666666666666" y="86.333333333333343" width="48.333333333333343" height="34"/>
                                            <rect key="frame" x="114.00000000000001" y="68" width="33.666666666666671" height="25"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="25" id="y5G-jM-Ryx"/>
                                            </constraints>
                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                            <connections>
                                                <action selector="becomeVIPAction:" destination="-1" eventType="touchUpInside" id="HMh-UX-cau"/>
                                            </connections>
                                        </button>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kNs-Qt-WI7">
                                            <rect key="frame" x="0.0" y="126" width="353" height="1"/>
                                            <color key="backgroundColor" red="0.96078431372549022" green="0.96078431372549022" blue="0.96078431372549022" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="1" id="lRd-sv-rWF"/>
                                            </constraints>
                                        </view>
                                        <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="31b-5d-IyP">
                                            <rect key="frame" x="0.0" y="147" width="353" height="50"/>
                                            <subviews>
                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="f0d-9Z-W1o">
                                                    <rect key="frame" x="0.0" y="0.0" width="176.66666666666666" height="50"/>
                                                    <subviews>
                                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YKL-1Q-Eme">
                                                            <rect key="frame" x="57.333333333333329" y="0.0" width="62" height="16"/>
                                                            <subviews>
                                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_coin_tiny" translatesAutoresizingMaskIntoConstraints="NO" id="RHv-Mp-pv9">
                                                                    <rect key="frame" x="0.0" y="1" width="14" height="14"/>
                                                                    <constraints>
                                                                        <constraint firstAttribute="width" constant="14" id="SUr-kg-YIv"/>
                                                                        <constraint firstAttribute="height" constant="14" id="ToT-LS-ftx"/>
                                                                    </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="J1T-OB-0D3">
                                                                    <rect key="frame" x="20" y="0.0" width="42" height="16"/>
                                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                                                    <color key="textColor" red="0.18823529411764706" green="0.32941176470588235" blue="0.38823529411764707" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                                    <nil key="highlightedColor"/>
                                                                </label>
                                                            </subviews>
                                                            <constraints>
                                                                <constraint firstAttribute="trailing" secondItem="J1T-OB-0D3" secondAttribute="trailing" id="AVx-RS-dao"/>
                                                                <constraint firstItem="J1T-OB-0D3" firstAttribute="leading" secondItem="RHv-Mp-pv9" secondAttribute="trailing" constant="6" id="IBe-0y-pTC"/>
                                                                <constraint firstAttribute="bottom" secondItem="J1T-OB-0D3" secondAttribute="bottom" id="Qo2-tl-fmz"/>
                                                                <constraint firstAttribute="height" constant="16" id="SFC-ze-TkA"/>
                                                                <constraint firstItem="RHv-Mp-pv9" firstAttribute="leading" secondItem="YKL-1Q-Eme" secondAttribute="leading" id="eIc-Gd-XVa"/>
                                                                <constraint firstItem="RHv-Mp-pv9" firstAttribute="centerY" secondItem="YKL-1Q-Eme" secondAttribute="centerY" id="gTn-Jb-RHh"/>
                                                                <constraint firstItem="J1T-OB-0D3" firstAttribute="top" secondItem="YKL-1Q-Eme" secondAttribute="top" id="mas-hh-mvh"/>
                                                            </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="k1z-ax-UOa">
                                                            <rect key="frame" x="81.333333333333329" y="20" width="14" height="24"/>
                                                            <fontDescription key="fontDescription" type="system" weight="heavy" pointSize="20"/>
                                                            <nil key="textColor"/>
                                                            <nil key="highlightedColor"/>
                                                        </label>
                                                    </subviews>
                                                    <constraints>
                                                        <constraint firstItem="k1z-ax-UOa" firstAttribute="top" secondItem="YKL-1Q-Eme" secondAttribute="bottom" constant="4" id="4Oc-Xg-H5t"/>
                                                        <constraint firstItem="YKL-1Q-Eme" firstAttribute="top" secondItem="f0d-9Z-W1o" secondAttribute="top" id="IL3-Yf-ze6"/>
                                                        <constraint firstItem="YKL-1Q-Eme" firstAttribute="centerX" secondItem="f0d-9Z-W1o" secondAttribute="centerX" id="hPd-MM-krn"/>
                                                        <constraint firstItem="k1z-ax-UOa" firstAttribute="centerX" secondItem="YKL-1Q-Eme" secondAttribute="centerX" id="p9f-5x-Lml"/>
                                                    </constraints>
                                                </view>
                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JWj-Qj-Anm">
                                                    <rect key="frame" x="176.66666666666663" y="0.0" width="176.33333333333337" height="50"/>
                                                    <subviews>
                                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Uk-rS-9NJ">
                                                            <rect key="frame" x="64.000000000000028" y="0.0" width="48" height="16"/>
                                                            <subviews>
                                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_score" translatesAutoresizingMaskIntoConstraints="NO" id="Omc-lY-fMA">
                                                                    <rect key="frame" x="0.0" y="1" width="14" height="14"/>
                                                                    <constraints>
                                                                        <constraint firstAttribute="width" constant="14" id="ZcD-B7-D6C"/>
                                                                        <constraint firstAttribute="height" constant="14" id="vKy-r4-qhk"/>
                                                                    </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="oc3-bi-CqP">
                                                                    <rect key="frame" x="20" y="0.0" width="28" height="16"/>
                                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                                                    <color key="textColor" red="0.18823529410000001" green="0.3294117647" blue="0.38823529410000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                                    <nil key="highlightedColor"/>
                                                                </label>
                                                            </subviews>
                                                            <constraints>
                                                                <constraint firstAttribute="trailing" secondItem="oc3-bi-CqP" secondAttribute="trailing" id="AJN-Yd-DIB"/>
                                                                <constraint firstItem="Omc-lY-fMA" firstAttribute="leading" secondItem="8Uk-rS-9NJ" secondAttribute="leading" id="EZJ-PL-FVE"/>
                                                                <constraint firstAttribute="height" constant="16" id="K9n-kT-dJ4"/>
                                                                <constraint firstItem="oc3-bi-CqP" firstAttribute="top" secondItem="8Uk-rS-9NJ" secondAttribute="top" id="Mh4-vh-uMY"/>
                                                                <constraint firstAttribute="bottom" secondItem="oc3-bi-CqP" secondAttribute="bottom" id="pVd-Lq-PzJ"/>
                                                                <constraint firstItem="Omc-lY-fMA" firstAttribute="centerY" secondItem="8Uk-rS-9NJ" secondAttribute="centerY" id="utP-Lm-Ppl"/>
                                                                <constraint firstItem="oc3-bi-CqP" firstAttribute="leading" secondItem="Omc-lY-fMA" secondAttribute="trailing" constant="6" id="zt8-4G-S74"/>
                                                            </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="HrO-l2-AhP">
                                                            <rect key="frame" x="81.000000000000028" y="20" width="14" height="24"/>
                                                            <fontDescription key="fontDescription" type="system" weight="heavy" pointSize="20"/>
                                                            <nil key="textColor"/>
                                                            <nil key="highlightedColor"/>
                                                        </label>
                                                    </subviews>
                                                    <constraints>
                                                        <constraint firstItem="8Uk-rS-9NJ" firstAttribute="top" secondItem="JWj-Qj-Anm" secondAttribute="top" id="Alk-4L-bgM"/>
                                                        <constraint firstItem="HrO-l2-AhP" firstAttribute="centerX" secondItem="8Uk-rS-9NJ" secondAttribute="centerX" id="CxG-Hf-LIF"/>
                                                        <constraint firstItem="HrO-l2-AhP" firstAttribute="top" secondItem="8Uk-rS-9NJ" secondAttribute="bottom" constant="4" id="GTx-Ua-8az"/>
                                                        <constraint firstItem="8Uk-rS-9NJ" firstAttribute="centerX" secondItem="JWj-Qj-Anm" secondAttribute="centerX" id="rK1-Za-UUO"/>
                                                    </constraints>
                                                </view>
                                            </subviews>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="50" id="HT1-tc-9eT"/>
                                            </constraints>
                                        </stackView>
                                    </subviews>
                                    <color key="backgroundColor" red="0.10588235294117647" green="0.22745098039215686" blue="0.52941176470588236" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                    <constraints>
                                        <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="kNs-Qt-WI7" firstAttribute="top" secondItem="IFx-3f-1QD" secondAttribute="bottom" constant="20" id="1ui-Ns-1hv"/>
                                        <constraint firstItem="Iaq-eP-lJ7" firstAttribute="top" secondItem="IFx-3f-1QD" secondAttribute="top" constant="8" id="8T1-8Q-gib"/>
                                        <constraint firstAttribute="trailing" secondItem="31b-5d-IyP" secondAttribute="trailing" id="8z3-xm-SaI"/>
                                        <constraint firstItem="ISP-Cr-8RW" firstAttribute="leading" secondItem="reN-LL-PRO" secondAttribute="leading" id="9JE-Nn-JSZ"/>
                                        <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="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="reN-LL-PRO" firstAttribute="leading" secondItem="qIB-bn-Xg1" secondAttribute="trailing" constant="13.5" id="RG9-2c-y1p"/>
                                        <constraint firstItem="IFx-3f-1QD" firstAttribute="top" secondItem="1Yu-z5-de2" secondAttribute="top" constant="26" id="E6N-4k-GPZ"/>
                                        <constraint firstAttribute="width" secondItem="1Yu-z5-de2" secondAttribute="height" multiplier="1:0.62" id="Kr8-62-LYF"/>
                                        <constraint firstItem="reN-LL-PRO" firstAttribute="centerY" secondItem="ISP-Cr-8RW" secondAttribute="centerY" id="Moz-Mc-Fig"/>
                                        <constraint firstItem="qIB-bn-Xg1" firstAttribute="top" secondItem="Iaq-eP-lJ7" secondAttribute="bottom" constant="11" id="S1p-gw-G8F"/>
                                        <constraint firstItem="hBG-jc-I1P" firstAttribute="centerX" secondItem="ywf-si-kai" secondAttribute="centerX" id="SKj-6E-fFA"/>
                                        <constraint firstItem="ISP-Cr-8RW" firstAttribute="leading" secondItem="qIB-bn-Xg1" secondAttribute="leading" id="UMN-jk-7va"/>
                                        <constraint firstItem="ISP-Cr-8RW" firstAttribute="centerY" secondItem="qIB-bn-Xg1" secondAttribute="centerY" id="XaT-uF-Irt"/>
                                        <constraint firstItem="DTA-Zx-9lB" firstAttribute="leading" secondItem="TBO-dZ-vzH" secondAttribute="leading" id="Y4w-cg-kMC"/>
                                        <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="DTA-Zx-9lB" firstAttribute="trailing" secondItem="TBO-dZ-vzH" secondAttribute="trailing" id="eiR-Ml-1h8"/>
                                        <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 firstItem="DTA-Zx-9lB" firstAttribute="top" secondItem="TBO-dZ-vzH" secondAttribute="top" id="omr-1g-o8d"/>
                                        <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="DTA-Zx-9lB" firstAttribute="bottom" secondItem="TBO-dZ-vzH" secondAttribute="bottom" id="uRS-D4-DDz"/>
                                        <constraint firstItem="qIB-bn-Xg1" firstAttribute="leading" secondItem="reN-LL-PRO" secondAttribute="trailing" constant="4" id="SZL-Nh-HlX"/>
                                        <constraint firstItem="qIB-bn-Xg1" firstAttribute="trailing" secondItem="ISP-Cr-8RW" secondAttribute="trailing" id="WTy-Kv-oLB"/>
                                        <constraint firstAttribute="trailing" secondItem="kNs-Qt-WI7" secondAttribute="trailing" id="Y8t-8u-j3r"/>
                                        <constraint firstItem="31b-5d-IyP" firstAttribute="leading" secondItem="1Yu-z5-de2" secondAttribute="leading" id="bOD-aX-1rq"/>
                                        <constraint firstItem="kNs-Qt-WI7" firstAttribute="leading" secondItem="1Yu-z5-de2" secondAttribute="leading" id="fHo-mZ-IHP"/>
                                        <constraint firstItem="IFx-3f-1QD" firstAttribute="leading" secondItem="1Yu-z5-de2" secondAttribute="leading" constant="20" id="hAd-UM-xF3"/>
                                        <constraint firstItem="31b-5d-IyP" firstAttribute="top" secondItem="kNs-Qt-WI7" secondAttribute="bottom" constant="20" id="iZJ-wv-SUC"/>
                                        <constraint firstItem="reN-LL-PRO" firstAttribute="leading" secondItem="Iaq-eP-lJ7" secondAttribute="leading" id="uUU-CP-izG"/>
                                        <constraint firstItem="Iaq-eP-lJ7" firstAttribute="leading" secondItem="IFx-3f-1QD" secondAttribute="trailing" constant="14" id="x9S-au-83K"/>
                                        <constraint firstItem="reN-LL-PRO" firstAttribute="trailing" secondItem="ISP-Cr-8RW" secondAttribute="trailing" id="zk3-fl-xGo"/>
                                    </constraints>
                                </view>
                                <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="W2A-PE-Zq8">
                                    <rect key="frame" x="26" y="943.33333333333348" width="341" height="162"/>
                                    <rect key="frame" x="26" y="1839" width="341" height="162"/>
                                    <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"/>
@@ -208,7 +225,7 @@
                                                    <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="71.999999999999886" width="109.33333333333331" height="22"/>
                                                    <rect key="frame" x="13.999999999999993" y="72" width="109.33333333333331" height="22"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="22" id="HM2-qC-zym"/>
                                                    </constraints>
@@ -217,7 +234,7 @@
                                                    <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="98.999999999999886" width="65.333333333333329" height="22"/>
                                                    <rect key="frame" x="14.999999999999996" y="99" width="63.666666666666657" height="22"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="22" id="duk-64-lzR"/>
                                                    </constraints>
@@ -252,7 +269,7 @@
                                                    <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="69.999999999999886" width="79.666666666666671" height="22"/>
                                                    <rect key="frame" x="14" y="70" width="79.666666666666671" height="22"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="22" id="xax-sJ-ZYz"/>
                                                    </constraints>
@@ -261,7 +278,7 @@
                                                    <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="96.999999999999886" width="65.333333333333329" height="22"/>
                                                    <rect key="frame" x="14.999999999999996" y="97" width="63.666666666666657" height="22"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="22" id="Z4Q-9e-vKA"/>
                                                    </constraints>
@@ -298,9 +315,9 @@
                                    </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="650" width="393" height="255.33333333333337"/>
                                    <rect key="frame" x="0.0" y="649" width="393" height="294.66666666666674"/>
                                    <constraints>
                                        <constraint firstAttribute="width" secondItem="GVG-mQ-5A4" secondAttribute="height" multiplier="1:0.65" id="X5h-hG-CdI"/>
                                        <constraint firstAttribute="width" secondItem="GVG-mQ-5A4" secondAttribute="height" multiplier="1:0.75" 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"/>
@@ -310,10 +327,10 @@
                                    </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"/>
                                    <rect key="frame" x="0.0" y="249" width="393" height="400"/>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="350" id="jCJ-Yw-mTl"/>
                                        <constraint firstAttribute="height" constant="400" id="jCJ-Yw-mTl"/>
                                    </constraints>
                                    <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="5aa-zU-PhM">
                                        <size key="itemSize" width="128" height="128"/>
@@ -322,24 +339,130 @@
                                        <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                                    </collectionViewFlowLayout>
                                </collectionView>
                                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="rz1-cT-P3k">
                                    <rect key="frame" x="0.0" y="953.66666666666652" width="393" height="875.33333333333348"/>
                                    <subviews>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="n2e-EW-nR7">
                                            <rect key="frame" x="0.0" y="0.0" width="393" height="226.33333333333334"/>
                                            <subviews>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="积分兑换" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qkx-BY-Rhw">
                                                    <rect key="frame" x="19.999999999999996" y="30.000000000000114" width="63.666666666666657" height="19.333333333333329"/>
                                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                                    <color key="textColor" red="0.28235294117647058" green="0.28235294117647058" blue="0.28235294117647058" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="PRF-Eg-Ph3">
                                                    <rect key="frame" x="0.0" y="58.333333333333371" width="393" height="168"/>
                                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="168" id="zXq-pu-qvv"/>
                                                    </constraints>
                                                    <collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="YEu-Yn-kw4">
                                                        <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>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstAttribute="trailing" secondItem="PRF-Eg-Ph3" secondAttribute="trailing" id="1Yr-8G-Fmf"/>
                                                <constraint firstItem="qkx-BY-Rhw" firstAttribute="leading" secondItem="n2e-EW-nR7" secondAttribute="leading" constant="20" id="8LT-gB-YXK"/>
                                                <constraint firstAttribute="bottom" secondItem="PRF-Eg-Ph3" secondAttribute="bottom" id="JVS-IJ-all"/>
                                                <constraint firstItem="PRF-Eg-Ph3" firstAttribute="top" secondItem="qkx-BY-Rhw" secondAttribute="bottom" constant="9" id="P1O-Wd-Jsx"/>
                                                <constraint firstItem="qkx-BY-Rhw" firstAttribute="top" secondItem="n2e-EW-nR7" secondAttribute="top" constant="30" id="aqJ-KU-gnh"/>
                                                <constraint firstItem="PRF-Eg-Ph3" firstAttribute="leading" secondItem="n2e-EW-nR7" secondAttribute="leading" id="k7O-aJ-pxF"/>
                                            </constraints>
                                        </view>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="F9N-p2-J7G">
                                            <rect key="frame" x="0.0" y="226.33333333333337" width="393" height="324.33333333333326"/>
                                            <subviews>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="我的券包" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Klc-Pw-u1s">
                                                    <rect key="frame" x="29.999999999999996" y="0.0" width="63.666666666666657" height="22"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="22" id="Gma-xz-MnY"/>
                                                    </constraints>
                                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <button opaque="NO" contentMode="scaleAspectFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YIA-v8-8qM">
                                                    <rect key="frame" x="0.0" y="41" width="393" height="283"/>
                                                    <constraints>
                                                        <constraint firstAttribute="width" secondItem="YIA-v8-8qM" secondAttribute="height" multiplier="1:0.72" id="Wlo-tQ-YVu"/>
                                                    </constraints>
                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                                    <connections>
                                                        <action selector="couponsAction:" destination="-1" eventType="touchUpInside" id="XHj-NQ-XUi"/>
                                                    </connections>
                                                </button>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstAttribute="width" secondItem="F9N-p2-J7G" secondAttribute="height" multiplier="1:0.8256" id="34C-8h-a7D"/>
                                                <constraint firstItem="Klc-Pw-u1s" firstAttribute="leading" secondItem="F9N-p2-J7G" secondAttribute="leading" constant="30" id="adw-9r-Z18"/>
                                                <constraint firstItem="YIA-v8-8qM" firstAttribute="leading" secondItem="F9N-p2-J7G" secondAttribute="leading" id="ckH-D3-wyO"/>
                                                <constraint firstItem="Klc-Pw-u1s" firstAttribute="top" secondItem="F9N-p2-J7G" secondAttribute="top" id="ktE-dc-z1W"/>
                                                <constraint firstItem="YIA-v8-8qM" firstAttribute="top" secondItem="Klc-Pw-u1s" secondAttribute="bottom" constant="19" id="nwb-ty-VmJ"/>
                                                <constraint firstAttribute="trailing" secondItem="YIA-v8-8qM" secondAttribute="trailing" id="xoN-jV-WLt"/>
                                            </constraints>
                                        </view>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="feS-ul-9mi">
                                            <rect key="frame" x="0.0" y="550.66666666666663" width="393" height="324.66666666666663"/>
                                            <subviews>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="线上商城" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="I9I-ZH-d0l">
                                                    <rect key="frame" x="29.999999999999996" y="0.0" width="63.666666666666657" height="22"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="22" id="n1p-Xk-zUA"/>
                                                    </constraints>
                                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <button opaque="NO" contentMode="scaleAspectFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pZP-oL-WAW">
                                                    <rect key="frame" x="0.0" y="41" width="393" height="283"/>
                                                    <constraints>
                                                        <constraint firstAttribute="width" secondItem="pZP-oL-WAW" secondAttribute="height" multiplier="1:0.72" id="eLx-Vf-w6o"/>
                                                    </constraints>
                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                                    <connections>
                                                        <action selector="shoppingAction:" destination="-1" eventType="touchUpInside" id="8Tg-DL-7yJ"/>
                                                    </connections>
                                                </button>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstItem="I9I-ZH-d0l" firstAttribute="top" secondItem="feS-ul-9mi" secondAttribute="top" id="0Vc-27-Os9"/>
                                                <constraint firstAttribute="width" secondItem="feS-ul-9mi" secondAttribute="height" multiplier="1:0.8256" id="77r-8M-Tb8"/>
                                                <constraint firstItem="pZP-oL-WAW" firstAttribute="top" secondItem="I9I-ZH-d0l" secondAttribute="bottom" constant="19" id="BFf-IT-WIJ"/>
                                                <constraint firstItem="pZP-oL-WAW" firstAttribute="leading" secondItem="feS-ul-9mi" secondAttribute="leading" id="Lyg-MM-Lz8"/>
                                                <constraint firstAttribute="trailing" secondItem="pZP-oL-WAW" secondAttribute="trailing" id="OJk-Or-41n"/>
                                                <constraint firstItem="I9I-ZH-d0l" firstAttribute="leading" secondItem="feS-ul-9mi" secondAttribute="leading" constant="30" id="kLA-0n-DdZ"/>
                                            </constraints>
                                        </view>
                                    </subviews>
                                </stackView>
                            </subviews>
                            <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="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="1Yu-z5-de2" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" id="JqE-HY-pRY"/>
                                <constraint firstAttribute="trailing" secondItem="rz1-cT-P3k" secondAttribute="trailing" id="CCN-MG-wau"/>
                                <constraint firstItem="rz1-cT-P3k" firstAttribute="top" secondItem="GVG-mQ-5A4" secondAttribute="bottom" constant="10" id="Go5-1b-7fi"/>
                                <constraint firstItem="1Yu-z5-de2" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" constant="20" id="JqE-HY-pRY"/>
                                <constraint firstAttribute="bottom" secondItem="W2A-PE-Zq8" secondAttribute="bottom" constant="55" id="K5D-B5-JBH"/>
                                <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 firstAttribute="trailing" secondItem="1Yu-z5-de2" secondAttribute="trailing" id="QDA-wd-kB5"/>
                                <constraint firstAttribute="trailing" secondItem="1Yu-z5-de2" secondAttribute="trailing" constant="20" 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="pyk-ne-JeM" firstAttribute="top" secondItem="1Yu-z5-de2" secondAttribute="bottom" id="YmX-dT-TjT"/>
                                <constraint firstItem="pyk-ne-JeM" firstAttribute="top" secondItem="1Yu-z5-de2" secondAttribute="bottom" constant="30" id="YmX-dT-TjT"/>
                                <constraint firstItem="rz1-cT-P3k" firstAttribute="leading" secondItem="w1y-Zq-96N" secondAttribute="leading" id="ZfQ-Op-BCb"/>
                                <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"/>
                                <constraint firstItem="W2A-PE-Zq8" firstAttribute="top" secondItem="rz1-cT-P3k" secondAttribute="bottom" constant="10" id="vIT-hT-usV"/>
                            </constraints>
                        </view>
                    </subviews>
@@ -356,22 +479,24 @@
            <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="topMargin" id="Fcm-pV-uQH"/>
                <constraint firstAttribute="trailing" secondItem="IhV-tR-DU2" secondAttribute="trailing" id="H9H-t3-QIO"/>
                <constraint firstItem="IhV-tR-DU2" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="Jfa-lr-ZoN"/>
                <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"/>
                <constraint firstItem="IhV-tR-DU2" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="xDA-aM-lnr"/>
            </constraints>
            <point key="canvasLocation" x="70.992366412213741" y="20.422535211267608"/>
        </view>
    </objects>
    <resources>
        <image name="btn_setting_find" width="37" height="37"/>
        <image name="bg_home_3" width="390" height="206"/>
        <image name="icon_aboutUs" width="48" height="36"/>
        <image name="icon_coin_tiny" width="14" height="14"/>
        <image name="icon_customer" width="45" height="38"/>
        <image name="icon_score" width="16" height="16"/>
        <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"/>
WanPai/ViewModel/RefreshModel.swift
@@ -64,6 +64,7 @@
                func beginRefresh(){
                                guard handle != nil else {return}
        page = 1
                                api()?.subscribe(onNext: { data in
                                                if let datas = data.data{
                                                                self.dataSource.accept(datas)