Bladeren bron

points相关页面添加完成

iOS-Abel 2 jaren geleden
bovenliggende
commit
6dc65af35e
26 gewijzigde bestanden met toevoegingen van 1203 en 33 verwijderingen
  1. 74 2
      Asteria.xcodeproj/project.pbxproj
  2. 2 0
      Asteria/ASUI/ColorDefine.h
  3. 2 0
      Asteria/ASUI/SimpleBase/ASBaseViewController.h
  4. 31 0
      Asteria/ASUI/SimpleBase/ASBaseViewController.m
  5. 6 20
      Asteria/Fuction/Home/ASProductListViewController.m
  6. 16 0
      Asteria/Fuction/UserCenter/Points/ASPointDetailViewController.h
  7. 255 0
      Asteria/Fuction/UserCenter/Points/ASPointDetailViewController.m
  8. 81 9
      Asteria/Fuction/UserCenter/Points/ASPointsHomeViewController.m
  9. 23 0
      Asteria/Fuction/UserCenter/Points/model/ASPointDetailModel.h
  10. 21 0
      Asteria/Fuction/UserCenter/Points/model/ASPointDetailModel.m
  11. 19 0
      Asteria/Fuction/UserCenter/Points/view/ASPointDetailCell.h
  12. 171 0
      Asteria/Fuction/UserCenter/Points/view/ASPointDetailCell.m
  13. 19 0
      Asteria/Fuction/UserCenter/Points/view/ASPointDetailTableView.h
  14. 50 0
      Asteria/Fuction/UserCenter/Points/view/ASPointDetailTableView.m
  15. 18 0
      Asteria/Fuction/UserCenter/Points/view/ASPointEranCell.h
  16. 141 0
      Asteria/Fuction/UserCenter/Points/view/ASPointEranCell.m
  17. 5 0
      Asteria/Fuction/UserCenter/Points/ASPointHeadView.h
  18. 69 1
      Asteria/Fuction/UserCenter/Points/ASPointHeadView.m
  19. 25 1
      Asteria/Fuction/UserCenter/UserCenterHome/ASUserCenterViewController.m
  20. 19 0
      Asteria/Fuction/WebView/ASWebViewController.h
  21. 77 0
      Asteria/Fuction/WebView/ASWebViewController.m
  22. 19 0
      Asteria/Fuction/WebView/Target_WebView.h
  23. 21 0
      Asteria/Fuction/WebView/Target_WebView.m
  24. 1 0
      Asteria/PreFixHeader.h
  25. 20 0
      Asteria/Product/CTMediatoaTargets/CTMediator+ASWebView.h
  26. 18 0
      Asteria/Product/CTMediatoaTargets/CTMediator+ASWebView.m

+ 74 - 2
Asteria.xcodeproj/project.pbxproj

@@ -116,6 +116,14 @@
 		81C3B44429F6612800D79294 /* ASBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C3B44329F6612800D79294 /* ASBaseViewController.m */; };
 		81C3B44A29F6661500D79294 /* ASBaseNavController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C3B44929F6661500D79294 /* ASBaseNavController.m */; };
 		81C3B45529F66C1700D79294 /* UIView+PublicInit.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C3B45429F66C1700D79294 /* UIView+PublicInit.m */; };
+		81DFA5592A4681E900DA708B /* ASPointEranCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DFA5582A4681E900DA708B /* ASPointEranCell.m */; };
+		81DFA55D2A46C46D00DA708B /* ASWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DFA55C2A46C46D00DA708B /* ASWebViewController.m */; };
+		81DFA5602A46CC8E00DA708B /* CTMediator+ASWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DFA55F2A46CC8E00DA708B /* CTMediator+ASWebView.m */; };
+		81DFA5632A46CD6000DA708B /* Target_WebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DFA5622A46CD6000DA708B /* Target_WebView.m */; };
+		81DFA5672A46D60900DA708B /* ASPointDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DFA5662A46D60900DA708B /* ASPointDetailViewController.m */; };
+		81DFA56A2A46D82200DA708B /* ASPointDetailTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DFA5692A46D82200DA708B /* ASPointDetailTableView.m */; };
+		81DFA56D2A46D86500DA708B /* ASPointDetailModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DFA56C2A46D86500DA708B /* ASPointDetailModel.m */; };
+		81DFA5712A46D95400DA708B /* ASPointDetailCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DFA5702A46D95400DA708B /* ASPointDetailCell.m */; };
 		81E257EE2A120756004EEF71 /* ASUserCenterTopView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81E257ED2A120756004EEF71 /* ASUserCenterTopView.m */; };
 		81E257F32A120975004EEF71 /* ASUserBaseInfoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81E257F22A120975004EEF71 /* ASUserBaseInfoView.m */; };
 		81E257F62A12259B004EEF71 /* UserCenter.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 81E257F52A12259B004EEF71 /* UserCenter.xcassets */; };
@@ -428,6 +436,22 @@
 		81C3B45029F669C900D79294 /* ColorDefine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ColorDefine.h; sourceTree = "<group>"; };
 		81C3B45329F66C1700D79294 /* UIView+PublicInit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+PublicInit.h"; sourceTree = "<group>"; };
 		81C3B45429F66C1700D79294 /* UIView+PublicInit.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+PublicInit.m"; sourceTree = "<group>"; };
+		81DFA5572A4681E900DA708B /* ASPointEranCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASPointEranCell.h; sourceTree = "<group>"; };
+		81DFA5582A4681E900DA708B /* ASPointEranCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASPointEranCell.m; sourceTree = "<group>"; };
+		81DFA55B2A46C46D00DA708B /* ASWebViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASWebViewController.h; sourceTree = "<group>"; };
+		81DFA55C2A46C46D00DA708B /* ASWebViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASWebViewController.m; sourceTree = "<group>"; };
+		81DFA55E2A46CC8E00DA708B /* CTMediator+ASWebView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CTMediator+ASWebView.h"; sourceTree = "<group>"; };
+		81DFA55F2A46CC8E00DA708B /* CTMediator+ASWebView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CTMediator+ASWebView.m"; sourceTree = "<group>"; };
+		81DFA5612A46CD6000DA708B /* Target_WebView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Target_WebView.h; sourceTree = "<group>"; };
+		81DFA5622A46CD6000DA708B /* Target_WebView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Target_WebView.m; sourceTree = "<group>"; };
+		81DFA5652A46D60900DA708B /* ASPointDetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASPointDetailViewController.h; sourceTree = "<group>"; };
+		81DFA5662A46D60900DA708B /* ASPointDetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASPointDetailViewController.m; sourceTree = "<group>"; };
+		81DFA5682A46D82200DA708B /* ASPointDetailTableView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASPointDetailTableView.h; sourceTree = "<group>"; };
+		81DFA5692A46D82200DA708B /* ASPointDetailTableView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASPointDetailTableView.m; sourceTree = "<group>"; };
+		81DFA56B2A46D86500DA708B /* ASPointDetailModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASPointDetailModel.h; sourceTree = "<group>"; };
+		81DFA56C2A46D86500DA708B /* ASPointDetailModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASPointDetailModel.m; sourceTree = "<group>"; };
+		81DFA56F2A46D95400DA708B /* ASPointDetailCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASPointDetailCell.h; sourceTree = "<group>"; };
+		81DFA5702A46D95400DA708B /* ASPointDetailCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASPointDetailCell.m; sourceTree = "<group>"; };
 		81E257EC2A120756004EEF71 /* ASUserCenterTopView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASUserCenterTopView.h; sourceTree = "<group>"; };
 		81E257ED2A120756004EEF71 /* ASUserCenterTopView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASUserCenterTopView.m; sourceTree = "<group>"; };
 		81E257F12A120975004EEF71 /* ASUserBaseInfoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASUserBaseInfoView.h; sourceTree = "<group>"; };
@@ -628,8 +652,10 @@
 			children = (
 				811F42442A40533C00DA68F1 /* ASPointsHomeViewController.h */,
 				811F42452A40533C00DA68F1 /* ASPointsHomeViewController.m */,
-				811F42472A40536C00DA68F1 /* ASPointHeadView.h */,
-				811F42482A40536C00DA68F1 /* ASPointHeadView.m */,
+				81DFA5652A46D60900DA708B /* ASPointDetailViewController.h */,
+				81DFA5662A46D60900DA708B /* ASPointDetailViewController.m */,
+				81DFA56E2A46D8F600DA708B /* model */,
+				81DFA5642A46D5DF00DA708B /* view */,
 			);
 			path = Points;
 			sourceTree = "<group>";
@@ -1099,6 +1125,41 @@
 			path = UserCenter;
 			sourceTree = "<group>";
 		};
+		81DFA55A2A46C44800DA708B /* WebView */ = {
+			isa = PBXGroup;
+			children = (
+				81DFA55B2A46C46D00DA708B /* ASWebViewController.h */,
+				81DFA55C2A46C46D00DA708B /* ASWebViewController.m */,
+				81DFA5612A46CD6000DA708B /* Target_WebView.h */,
+				81DFA5622A46CD6000DA708B /* Target_WebView.m */,
+			);
+			path = WebView;
+			sourceTree = "<group>";
+		};
+		81DFA5642A46D5DF00DA708B /* view */ = {
+			isa = PBXGroup;
+			children = (
+				811F42472A40536C00DA68F1 /* ASPointHeadView.h */,
+				811F42482A40536C00DA68F1 /* ASPointHeadView.m */,
+				81DFA5572A4681E900DA708B /* ASPointEranCell.h */,
+				81DFA5582A4681E900DA708B /* ASPointEranCell.m */,
+				81DFA5682A46D82200DA708B /* ASPointDetailTableView.h */,
+				81DFA5692A46D82200DA708B /* ASPointDetailTableView.m */,
+				81DFA56F2A46D95400DA708B /* ASPointDetailCell.h */,
+				81DFA5702A46D95400DA708B /* ASPointDetailCell.m */,
+			);
+			path = view;
+			sourceTree = "<group>";
+		};
+		81DFA56E2A46D8F600DA708B /* model */ = {
+			isa = PBXGroup;
+			children = (
+				81DFA56B2A46D86500DA708B /* ASPointDetailModel.h */,
+				81DFA56C2A46D86500DA708B /* ASPointDetailModel.m */,
+			);
+			path = model;
+			sourceTree = "<group>";
+		};
 		81E257EF2A12093A004EEF71 /* CustomView */ = {
 			isa = PBXGroup;
 			children = (
@@ -1265,6 +1326,8 @@
 				816020092A2DD59E00E4A8F1 /* CTMediator+Home.m */,
 				8160200B2A2DD5C000E4A8F1 /* CTMediator+UserCenter.h */,
 				8160200C2A2DD5C000E4A8F1 /* CTMediator+UserCenter.m */,
+				81DFA55E2A46CC8E00DA708B /* CTMediator+ASWebView.h */,
+				81DFA55F2A46CC8E00DA708B /* CTMediator+ASWebView.m */,
 				81717D262A3C55CC00648139 /* CTMediator+Categorys.h */,
 				81717D272A3C55CC00648139 /* CTMediator+Categorys.m */,
 			);
@@ -1467,6 +1530,7 @@
 		9AD364CC2A05EBE800452C7A /* Fuction */ = {
 			isa = PBXGroup;
 			children = (
+				81DFA55A2A46C44800DA708B /* WebView */,
 				81717CAC2A3C453900648139 /* Category */,
 				81601FE32A2D938B00E4A8F1 /* Home */,
 				9A5C64522A11E58F00CBB185 /* Login */,
@@ -1771,6 +1835,7 @@
 				9AD345FA2A08D60F005CA070 /* ZFLandscapeWindow.m in Sources */,
 				81E257EE2A120756004EEF71 /* ASUserCenterTopView.m in Sources */,
 				81C326622A36B33B002EF442 /* ASHomeActiveView.m in Sources */,
+				81DFA56A2A46D82200DA708B /* ASPointDetailTableView.m in Sources */,
 				9AD346042A08D60F005CA070 /* ZFKVOController.m in Sources */,
 				81717CA12A3C0A3500648139 /* KWProductMenuFilterItemHeaderView.m in Sources */,
 				81C326662A36B794002EF442 /* VerScrollTextView.m in Sources */,
@@ -1814,6 +1879,7 @@
 				9AD345AC2A08D59A005CA070 /* WKM_goodsBanner.m in Sources */,
 				81EC476F2A33F82C00516573 /* ASHomeImgCell.m in Sources */,
 				81717D3A2A3D322700648139 /* KWHisAndHotWordsView.m in Sources */,
+				81DFA5592A4681E900DA708B /* ASPointEranCell.m in Sources */,
 				81354BE72A28786C0082C93A /* ASProductBaseModel.m in Sources */,
 				9A8DD8C52A0B8F1700573324 /* As_GoodsSizeC.m in Sources */,
 				8134C1BD2A1372D5006EB0EC /* ASUserCenterTableHeadView.m in Sources */,
@@ -1831,7 +1897,9 @@
 				81717C942A3BE4E000648139 /* ASProductListSortFilterCell.m in Sources */,
 				9AD346082A08D60F005CA070 /* ZFIJKPlayerManager.m in Sources */,
 				9AD3459E2A08D545005CA070 /* GoodsDetailSrcView.m in Sources */,
+				81DFA56D2A46D86500DA708B /* ASPointDetailModel.m in Sources */,
 				9AD346022A08D60F005CA070 /* ZFPlayerView.m in Sources */,
+				81DFA55D2A46C46D00DA708B /* ASWebViewController.m in Sources */,
 				81BEA6832A2D7CF3009D36C4 /* UITableView+ASBase.m in Sources */,
 				81717C992A3BF1DD00648139 /* ASHomeAlertWindow.m in Sources */,
 				81C3B44429F6612800D79294 /* ASBaseViewController.m in Sources */,
@@ -1843,10 +1911,12 @@
 				9AD6A5442A1218E8001DE3D9 /* PassWordSecureBtnV.m in Sources */,
 				811F42462A40533C00DA68F1 /* ASPointsHomeViewController.m in Sources */,
 				81717D392A3D322700648139 /* KWCustomLayout.m in Sources */,
+				81DFA5602A46CC8E00DA708B /* CTMediator+ASWebView.m in Sources */,
 				81C3B44A29F6661500D79294 /* ASBaseNavController.m in Sources */,
 				9AD3460C2A08D60F005CA070 /* ZFVolumeBrightnessView.m in Sources */,
 				9AD346072A08D60F005CA070 /* UIViewController+ZFPlayerRotation.m in Sources */,
 				8160200D2A2DD5C000E4A8F1 /* CTMediator+UserCenter.m in Sources */,
+				81DFA5712A46D95400DA708B /* ASPointDetailCell.m in Sources */,
 				9ACBEC2B2A14CCA300A8F97A /* ThirdPartService.m in Sources */,
 				81C3265F2A36B284002EF442 /* ASProductListViewController.m in Sources */,
 				9AD346142A08D60F005CA070 /* ZFSpeedLoadingView.m in Sources */,
@@ -1861,6 +1931,7 @@
 				9AD3461D2A08D6F0005CA070 /* GoodsInformationM.m in Sources */,
 				9A1247972A1B0A2800126226 /* AS_ForgotC.m in Sources */,
 				81EC476C2A33131100516573 /* ASHomeNewInSubCollectCell.m in Sources */,
+				81DFA5632A46CD6000DA708B /* Target_WebView.m in Sources */,
 				81354BF52A287BED0082C93A /* KWMineHomeOrderSubView.m in Sources */,
 				9AD345A82A08D571005CA070 /* TYCyclePagerView.m in Sources */,
 				9AD346202A08E30E005CA070 /* SelectVCollectionViewCell.m in Sources */,
@@ -1882,6 +1953,7 @@
 				9AD3460E2A08D60F005CA070 /* ZFNetworkSpeedMonitor.m in Sources */,
 				9AD346052A08D60F005CA070 /* ZFLandscapeViewController.m in Sources */,
 				81717D222A3C4AE000648139 /* KWSearchMainTypeCell.m in Sources */,
+				81DFA5672A46D60900DA708B /* ASPointDetailViewController.m in Sources */,
 				81601FF62A2DC78300E4A8F1 /* WMZBannerFlowLayout.m in Sources */,
 				814F5CF52A11B37E003847A9 /* ASUserAvaterView.m in Sources */,
 				81354C0B2A289C350082C93A /* KWTimeEndView.m in Sources */,

+ 2 - 0
Asteria/ASUI/ColorDefine.h

@@ -8,6 +8,8 @@
 #ifndef ColorDefine_h
 #define ColorDefine_h
 
+#define _F0FFFA ([UIColor colorWithHexString:@"#F0FFFA"])
+
 #define _FFF5F0 ([UIColor colorWithHexString:@"#FFF5F0"])
 #define _FFD1B9 ([UIColor colorWithHexString:@"#FFD1B9"])
 

+ 2 - 0
Asteria/ASUI/SimpleBase/ASBaseViewController.h

@@ -23,6 +23,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)ucHomeStyle:(btnClickBlock)tapSearch;
 
+- (void)setNavRightSearch:(btnClickBlock)nav_searchAction;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 31 - 0
Asteria/ASUI/SimpleBase/ASBaseViewController.m

@@ -18,6 +18,9 @@
 
 @property (nonatomic, strong) UIButton *backBt;
 
+@property (nonatomic, strong) UIButton *searchNavBt;
+@property (nonatomic, copy) btnClickBlock nav_searchBlock;
+
 
 
 @end
@@ -50,6 +53,17 @@
     
 }
 
+- (void)setNavRightSearch:(btnClickBlock)nav_searchAction {
+    self.nav_searchBlock = nav_searchAction;
+    [self.customNavBar addSubview:self.searchNavBt];
+    
+    [self.searchNavBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.width.height.equalTo(@44);
+        make.trailing.equalTo(self.customNavBar).offset(-10);
+        make.centerY.equalTo(self.customNavBar);
+    }];
+}
+
 - (void)ucHomeStyle:(btnClickBlock)tapSearch {
     self.tapSearchBlock = tapSearch;
     [self.customNavBar addSubview:self.leftImgV];
@@ -205,4 +219,21 @@
     [self.navigationController popViewControllerAnimated:true];
 }
 
+- (UIButton *)searchNavBt {
+    if (!_searchNavBt) {
+        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [bt setImage:[UIImage imageNamed:@"nav_search"] forState:UIControlStateNormal];
+        [bt addTarget:self action:@selector(search_navAction) forControlEvents:UIControlEventTouchUpInside];
+        _searchNavBt = bt;
+    }
+    return _searchNavBt;
+}
+
+// MARK: - actions
+- (void)search_navAction {
+    if (self.nav_searchBlock) {
+        self.nav_searchBlock();
+    }
+}
+
 @end

+ 6 - 20
Asteria/Fuction/Home/ASProductListViewController.m

@@ -29,7 +29,7 @@
 @property (nonatomic, strong) UICollectionView *collectV;
 
 
-@property (nonatomic, strong) UIButton *searchNavBt;
+
 
 // sort 相关
 @property (nonatomic,strong, nullable) ASProductSortFilterView *sortTypeV;
@@ -64,14 +64,12 @@
 // MARK: sub mas
 - (void)loadSubVs {
     
+    [self setNavRightSearch:^{
+       // TODO: - to Search VC
+    }];
+    
     [self.view addSubview:self.collectV];
-    [self.customNavBar addSubview:self.searchNavBt];
     
-    [self.searchNavBt mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.width.height.equalTo(@44);
-        make.trailing.equalTo(self.customNavBar).offset(-10);
-        make.centerY.equalTo(self.customNavBar);
-    }];
     
     [self.collectV mas_makeConstraints:^(MASConstraintMaker *make) {
         make.top.equalTo(self.customNavBar.mas_bottom);
@@ -242,10 +240,7 @@
     return UIEdgeInsetsMake(10, 10, 10, 10);
 }
 
-// MARK: - actions
-- (void)search_navAction {
-    // TODO: to searchVC
-}
+
 
 
 
@@ -280,15 +275,6 @@
 
 
 
-- (UIButton *)searchNavBt {
-    if (!_searchNavBt) {
-        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
-        [bt setImage:[UIImage imageNamed:@"nav_search"] forState:UIControlStateNormal];
-        [bt addTarget:self action:@selector(search_navAction) forControlEvents:UIControlEventTouchUpInside];
-        _searchNavBt = bt;
-    }
-    return _searchNavBt;
-}
 
 - (KWProductMenuFilterView *)menuFilterV {
     if (!_menuFilterV) {

+ 16 - 0
Asteria/Fuction/UserCenter/Points/ASPointDetailViewController.h

@@ -0,0 +1,16 @@
+//
+//  ASPointDetailViewController.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "ASBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASPointDetailViewController : ASBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 255 - 0
Asteria/Fuction/UserCenter/Points/ASPointDetailViewController.m

@@ -0,0 +1,255 @@
+//
+//  ASPointDetailViewController.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "ASPointDetailViewController.h"
+#import "ASPointDetailTableView.h"
+
+@interface ASPointDetailViewController () <UIScrollViewDelegate>
+
+@property (nonatomic, strong) UIView *topBgV;
+@property (nonatomic, strong) UIView *bottomBgV;
+
+@property (nonatomic, strong) UIButton *allBt;
+@property (nonatomic, strong) UIButton *usedBt;
+
+@property (nonatomic, strong) UIScrollView *scrollV;
+
+@property (nonatomic, strong) ASPointDetailTableView *allTableV;
+@property (nonatomic, strong) ASPointDetailTableView *usedTableV;
+
+
+@end
+
+@implementation ASPointDetailViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self loadSubVs];
+    [self configSubVs];
+    
+    [self loadData];
+}
+
+- (void)loadData {
+    NSMutableArray *allArr = [NSMutableArray array];
+    NSMutableArray *usedArr = [NSMutableArray array];
+    for (int i=0;i<(arc4random()%100+3);i++) {
+        [allArr addObject:[ASPointDetailModel demoData]];
+    }
+    for (int i=0;i<(arc4random()%200+5);i++) {
+        [usedArr addObject:[ASPointDetailModel demoData]];
+    }
+    self.allTableV.dataArr = allArr;
+    self.usedTableV.dataArr = usedArr;
+    [self.allTableV reloadData];
+    [self.usedTableV reloadData];
+}
+
+// MARK: - loadSubVs
+- (void)configSubVs {
+    self.view.backgroundColor = _E0FFF5;
+    self.customNavBar.backgroundColor = _F0FFFA;
+    self.titleStr = @"Points Details";
+    [self setNavRightSearch:^{
+        
+    }];
+}
+
+- (void)loadSubVs {
+    [self.view addSubview:self.topBgV];
+    [self.view addSubview:self.bottomBgV];
+    
+    [self.topBgV addSubview:self.allBt];
+    [self.topBgV addSubview:self.usedBt];
+    
+    [self.bottomBgV addSubview:self.scrollV];
+    [self.scrollV addSubview:self.allTableV];
+    [self.scrollV addSubview:self.usedTableV];
+    
+    
+    [self.topBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.customNavBar.mas_bottom);
+        make.leading.trailing.equalTo(self.view);
+        make.height.equalTo(@60);
+    }];
+    
+    [self.allBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(self.topBgV);
+        make.height.equalTo(@40);
+        make.leading.equalTo(self.topBgV).offset(10);
+    }];
+    [self.usedBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(self.allBt);
+        make.height.equalTo(@40);
+        make.leading.equalTo(self.allBt.mas_trailing).offset(10);
+        make.trailing.equalTo(self.topBgV).offset(-10);
+        make.width.equalTo(self.allBt);
+    }];
+    
+    [self.bottomBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.topBgV.mas_bottom);
+        make.leading.trailing.bottom.equalTo(self.view);
+    }];
+    
+    [self.scrollV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bottomBgV).offset(10);
+        make.leading.trailing.bottom.equalTo(self.bottomBgV);
+    }];
+    
+    [self.allTableV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.leading.bottom.equalTo(self.scrollV);
+        make.width.equalTo(self.bottomBgV);
+        make.height.equalTo(self.bottomBgV).offset(-10);
+    }];
+    
+    [self.usedTableV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.leading.equalTo(self.allTableV.mas_trailing);
+        make.top.trailing.bottom.equalTo(self.scrollV);
+        make.width.equalTo(self.bottomBgV);
+        make.height.equalTo(self.bottomBgV).offset(-10);
+    }];
+    
+    
+}
+
+
+// MARK: - bt Actions
+
+- (void)topBtAction:(UIButton *)bt {
+    if (bt == self.usedBt) {
+        self.allBt.selected = false;
+        self.usedBt.selected = true;
+        [self.scrollV setContentOffset:CGPointMake(KScreenWidth, 0) animated:true];
+    } else {
+        self.allBt.selected = false;
+        self.usedBt.selected = true;
+        [self.scrollV setContentOffset:CGPointMake(0, 0) animated:true];
+    }
+    [self setBtStatus:self.allBt];
+    [self setBtStatus:self.usedBt];
+}
+
+- (void)setBtStatus:(UIButton *)bt {
+    bt.backgroundColor = bt.isSelected ? _113632 : Col_FFF;
+    bt.titleLabel.font = [UIFont fontWithName:bt.isSelected ? Rob_Bold : Rob_Regular size:16];
+    
+}
+
+// MARK: - subvs
+- (UIView *)topBgV {
+    if (!_topBgV) {
+        UIView *v = [UIView baseV];
+        v.backgroundColor = _E0FFF5;
+        _topBgV = v;
+    }
+    return _topBgV;
+}
+
+- (UIView *)bottomBgV{
+    if (!_bottomBgV) {
+        UIView *v = [UIView baseV];
+        v.frame = CGRectMake(0, 0, KScreenWidth, KScreenHeight);
+        v.backgroundColor = Col_FFF;
+        // 左上和右上为圆角
+
+        UIBezierPath *cornerRadiusPath = [UIBezierPath      bezierPathWithRoundedRect:v.bounds byRoundingCorners:UIRectCornerTopRight | UIRectCornerTopLeft cornerRadii:CGSizeMake(16, 16)];
+        
+        CAShapeLayer *cornerRadiusLayer = [ [CAShapeLayer alloc ] init];
+        cornerRadiusLayer.frame = v.bounds;
+        
+        cornerRadiusLayer.path = cornerRadiusPath.CGPath;
+        
+        v.layer.mask = cornerRadiusLayer;
+        
+        _bottomBgV = v;
+    }
+    return _bottomBgV;
+}
+
+- (UIButton *)allBt {
+    if (!_allBt) {
+        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [bt addTarget:self action:@selector(topBtAction:) forControlEvents:UIControlEventTouchUpInside];
+        bt.selected = true;
+        bt.backgroundColor = _113632;
+        bt.titleLabel.font = [UIFont fontWithName:Rob_Bold size:16];
+        [bt setTitleColor:Col_000 forState:UIControlStateNormal];
+        bt.layer.cornerRadius = 4;
+        bt.layer.masksToBounds = true;
+        [bt setTitleColor:Col_FFF forState:UIControlStateSelected];
+        [bt setTitle:@"ALL" forState:UIControlStateNormal];
+        _allBt = bt;
+    }
+    return _allBt;
+}
+
+- (UIButton *)usedBt {
+    if (!_usedBt) {
+        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [bt addTarget:self action:@selector(topBtAction:) forControlEvents:UIControlEventTouchUpInside];
+        bt.backgroundColor = Col_FFF;
+        bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:16];
+        [bt setTitleColor:Col_000 forState:UIControlStateNormal];
+        bt.layer.cornerRadius = 4;
+        bt.layer.masksToBounds = true;
+        [bt setTitleColor:Col_FFF forState:UIControlStateSelected];
+        [bt setTitle:@"USED" forState:UIControlStateNormal];
+        _usedBt = bt;
+    }
+    return _usedBt;
+}
+
+
+- (UIScrollView *)scrollV {
+    if (!_scrollV) {
+        UIScrollView *v = [[UIScrollView alloc] init];
+        v.showsVerticalScrollIndicator = false;
+        v.showsHorizontalScrollIndicator = false;
+        v.delegate = self;
+        v.pagingEnabled = true;
+        v.backgroundColor = UIColor.clearColor;
+        v.alwaysBounceHorizontal = true;
+        _scrollV = v;
+    }
+    return _scrollV;
+}
+
+- (ASPointDetailTableView *)allTableV {
+    if (!_allTableV) {
+        ASPointDetailTableView *v = [[ASPointDetailTableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+        _allTableV = v;
+    }
+    return _allTableV;
+}
+
+- (ASPointDetailTableView *)usedTableV {
+    if (!_usedTableV) {
+        ASPointDetailTableView *v = [[ASPointDetailTableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+        _usedTableV = v;
+    }
+    return _usedTableV;
+}
+
+
+// MARK: - scrollview delegate
+- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
+    NSInteger index = (NSInteger)(scrollView.contentOffset.x/KScreenWidth);
+    self.allBt.selected = index == 0;
+    self.usedBt.selected = index == 1;
+    [self setBtStatus:self.allBt];
+    [self setBtStatus:self.usedBt];
+}
+
+- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
+    NSInteger index = (NSInteger)(scrollView.contentOffset.x/KScreenWidth);
+    self.allBt.selected = index == 0;
+    self.usedBt.selected = index == 1;
+    [self setBtStatus:self.allBt];
+    [self setBtStatus:self.usedBt];
+}
+
+@end

+ 81 - 9
Asteria/Fuction/UserCenter/Points/ASPointsHomeViewController.m

@@ -6,8 +6,15 @@
 //
 
 #import "ASPointsHomeViewController.h"
+#import "ASPointHeadView.h"
+#import "ASPointEranCell.h"
+#import "ASPointDetailViewController.h"
 
-@interface ASPointsHomeViewController ()
+@interface ASPointsHomeViewController ()<UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, strong) ASPointHeadView *headV;
+
+@property (nonatomic, strong) UITableView *tableV;
 
 @end
 
@@ -15,17 +22,82 @@
 
 - (void)viewDidLoad {
     [super viewDidLoad];
-    // Do any additional setup after loading the view.
+    [self loadSubVs];
+    [self configSubV];
+    
+}
+
+- (void)configSubV {
+    [self setTitleStr:@"Points"];
+    [self setNavRightSearch:^{
+       // TODO: - to Search VC
+    }];
+    
+    [self.headV setData:@"321241"];
+    __weak typeof(self) weakSelf = self;
+    [self.headV setRuleCallBack:^{
+        UIViewController *vc = [CTMediator.sharedInstance getWebViewVc:@{
+            @"title":@"Points Rules",
+            @"url":@"https://baidu.com"
+        }];
+        [weakSelf.navigationController pushViewController:vc animated:true];
+        
+    }];
+    [self.headV setDetailCallBack:^{
+        ASPointDetailViewController *vc = [ASPointDetailViewController new];
+        [weakSelf.navigationController pushViewController:vc animated:true];
+    }];
+    
+    
+    self.customNavBar.backgroundColor = _F0FFFA;
 }
 
-/*
-#pragma mark - Navigation
 
-// In a storyboard-based application, you will often want to do a little preparation before navigation
-- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
-    // Get the new view controller using [segue destinationViewController].
-    // Pass the selected object to the new view controller.
+- (void)loadSubVs {
+    [self.view addSubview:self.tableV];
+    [self.tableV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.customNavBar.mas_bottom);
+        make.leading.trailing.bottom.equalTo(self.view);
+    }];
+}
+
+// MARK: - subVs
+
+- (ASPointHeadView *)headV {
+    if (!_headV) {
+        ASPointHeadView *v = [[ASPointHeadView alloc] initWithFrame:CGRectZero];
+        _headV = v;
+    }
+    return _headV;
+}
+
+- (UITableView *)tableV {
+    if (!_tableV) {
+        UITableView *v = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+        [v registerClass:[ASPointEranCell class] forCellReuseIdentifier:@"ASPointEranCell"];
+        v.delegate  = self;
+        v.dataSource = self;
+        v.separatorStyle = UITableViewCellSeparatorStyleNone;
+        v.backgroundColor = Col_FFF;
+        v.showsVerticalScrollIndicator = false;
+        v.tableHeaderView = self.headV;
+        _tableV = v;
+    }
+    return _tableV;
+}
+
+
+// MARK: - UITableViewDelegate,UITableViewDataSource
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 10;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    ASPointEranCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ASPointEranCell" forIndexPath:indexPath];
+    [cell setData:@"Browsing hD Lace Wig Page ≥ 15 Seconds" des:@"1 Points Per $1 " status:indexPath.row%2 == 1];
+    
+    return cell;
 }
-*/
 
 @end

+ 23 - 0
Asteria/Fuction/UserCenter/Points/model/ASPointDetailModel.h

@@ -0,0 +1,23 @@
+//
+//  ASPointDetailModel.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASPointDetailModel : NSObject
+
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) NSString *time;
+@property (nonatomic, copy) NSString *point;
+@property (nonatomic, copy) NSString *elsePoint;
+
++ (ASPointDetailModel *)demoData;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 21 - 0
Asteria/Fuction/UserCenter/Points/model/ASPointDetailModel.m

@@ -0,0 +1,21 @@
+//
+//  ASPointDetailModel.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "ASPointDetailModel.h"
+
+@implementation ASPointDetailModel
+
++ (ASPointDetailModel *)demoData {
+    ASPointDetailModel *m = [ASPointDetailModel new];
+    m.title = @"DAILY FRIST LOGIN";
+    m.time = @"Sep 6, 2022 5:18 pm";
+    m.point = @"+10";
+    m.elsePoint = @"5600";
+    return m;
+}
+
+@end

+ 19 - 0
Asteria/Fuction/UserCenter/Points/view/ASPointDetailCell.h

@@ -0,0 +1,19 @@
+//
+//  ASPointDetailCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASPointDetailModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASPointDetailCell : UITableViewCell
+
+- (void)setData:(ASPointDetailModel *)model;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 171 - 0
Asteria/Fuction/UserCenter/Points/view/ASPointDetailCell.m

@@ -0,0 +1,171 @@
+//
+//  ASPointDetailCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "ASPointDetailCell.h"
+
+@interface ASPointDetailCell ()
+
+@property (nonatomic, strong) UIView *bgV;
+@property (nonatomic, strong) UIView *lineV;
+@property (nonatomic, strong) UILabel *titleLb;
+@property (nonatomic, strong) UILabel *pointsLb;
+@property (nonatomic, strong) UILabel *elsePointsLb;
+@property (nonatomic, strong) UILabel *dateLb;
+
+@end
+
+@implementation ASPointDetailCell
+
+- (void)setData:(ASPointDetailModel *)model {
+    self.titleLb.text = model.title;
+    
+    self.dateLb.text = model.time;
+    self.pointsLb.text = [NSString stringWithFormat:@"%@ Points",model.point];
+    self.elsePointsLb.text = [NSString stringWithFormat:@"My points:%@",model.elsePoint];
+}
+
+
+-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        [self confgSubV];
+    }
+    return self;
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (void)confgSubV {
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+    self.contentView.backgroundColor = [UIColor whiteColor];
+    
+    [self.contentView addSubview:self.bgV];
+    [self.bgV addSubview:self.titleLb];
+    [self.bgV addSubview:self.pointsLb];
+    [self.bgV addSubview:self.elsePointsLb];
+    [self.bgV addSubview:self.dateLb];
+    
+    [self.bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self.contentView);
+        make.height.equalTo(@80);
+    }];
+    
+    [self.bgV addSubview:self.lineV];
+    [self.lineV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@1);
+        make.leading.equalTo(self.bgV).offset(10);
+        make.trailing.equalTo(self.bgV).offset(-10);
+        make.bottom.equalTo(self.bgV);
+    }];
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.bgV).offset(10);
+        make.top.equalTo(self.bgV).offset(20);
+        make.height.greaterThanOrEqualTo(@17);
+    }];
+    [self.dateLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.bgV).offset(10);
+        make.height.equalTo(@14);
+        make.bottom.equalTo(self.bgV).offset(-20);
+    }];
+    [self.pointsLb setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
+    [self.pointsLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.bgV.mas_right).offset(-10);
+        make.left.equalTo(self.titleLb.mas_right).offset(30);
+        make.top.equalTo(self.titleLb);
+        make.height.equalTo(@14);
+        make.width.greaterThanOrEqualTo(@60);
+    }];
+    
+    [self.elsePointsLb setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
+    [self.elsePointsLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.bgV.mas_right).offset(-10);
+        make.left.equalTo(self.dateLb.mas_right).offset(30);
+        make.centerY.equalTo(self.dateLb);
+        make.height.equalTo(@14);
+    }];
+    
+}
+
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel *lb = [UILabel new];
+        lb.textColor = [[UIColor colorWithHexString:@"#000000"] colorWithAlphaComponent:1];
+        
+        lb.font = [UIFont fontWithName:Rob_Regular size:14];
+        lb.numberOfLines = 0;
+        _titleLb = lb;
+    }
+    return _titleLb;
+}
+- (UILabel *)pointsLb {
+    if (!_pointsLb) {
+        UILabel *lb = [UILabel new];
+        lb.textColor = [[UIColor colorWithHexString:@"#000000"] colorWithAlphaComponent:1];
+        lb.textAlignment = NSTextAlignmentRight;
+        lb.font = [UIFont fontWithName:Rob_Regular size:12];
+        lb.numberOfLines = 1;
+        [lb setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
+        _pointsLb = lb;
+    }
+    return _pointsLb;
+}
+
+- (UILabel *)elsePointsLb {
+    if (!_elsePointsLb) {
+        UILabel *lb = [UILabel new];
+        lb.textColor = [[UIColor colorWithHexString:@"#000000"] colorWithAlphaComponent:0.6];
+        lb.textAlignment = NSTextAlignmentRight;
+        lb.font = [UIFont fontWithName:Rob_Regular size:12];
+        lb.numberOfLines = 1;
+        _elsePointsLb = lb;
+    }
+    return _elsePointsLb;
+}
+
+- (UILabel *)dateLb {
+    if (!_dateLb) {
+        UILabel *lb = [UILabel new];
+        lb.textColor = [[UIColor colorWithHexString:@"#000000"] colorWithAlphaComponent:0.6];
+        lb.textAlignment = NSTextAlignmentLeft;
+        lb.font = [UIFont fontWithName:Rob_Regular size:12];
+        lb.numberOfLines = 1;
+        _dateLb = lb;
+    }
+    return _dateLb;
+}
+
+-(UIView *)bgV {
+    if (!_bgV) {
+        UIView *v = [UIView new];
+        v.backgroundColor = Col_FFF;
+
+        _bgV = v;
+    }
+    return _bgV;
+}
+
+-(UIView *)lineV {
+    if (!_lineV) {
+        UIView *v = [UIView new];
+        v.backgroundColor = [_043632 colorWithAlphaComponent:0.1];
+
+        _lineV = v;
+    }
+    return _lineV;
+}
+
+@end
+

+ 19 - 0
Asteria/Fuction/UserCenter/Points/view/ASPointDetailTableView.h

@@ -0,0 +1,19 @@
+//
+//  ASPointDetailTableView.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import <UIKit/UIKit.h>
+#import "ASPointDetailModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASPointDetailTableView : UITableView
+
+@property (nonatomic, strong) NSMutableArray <ASPointDetailModel *>*dataArr;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 50 - 0
Asteria/Fuction/UserCenter/Points/view/ASPointDetailTableView.m

@@ -0,0 +1,50 @@
+//
+//  ASPointDetailTableView.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "ASPointDetailTableView.h"
+#import "ASPointDetailCell.h"
+
+@interface ASPointDetailTableView ()<UITableViewDelegate,UITableViewDataSource>
+
+@end
+
+@implementation ASPointDetailTableView
+
+- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
+    self = [super initWithFrame:frame style:style];
+    if (self) {
+        [self configSelf];
+    }
+    return self;
+}
+    
+- (void)configSelf {
+    self.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self registerClass:[ASPointDetailCell class] forCellReuseIdentifier:@"ASPointDetailCell"];
+    self.delegate = self;
+    self.dataSource = self;
+    self.alwaysBounceVertical = true;
+    self.showsVerticalScrollIndicator = false;
+}
+
+// MARK: - delegate,datasource
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataArr.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    ASPointDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ASPointDetailCell" forIndexPath:indexPath];
+    if (self.dataArr.count <= indexPath.row) {
+        return cell;
+    }
+    ASPointDetailModel *m = self.dataArr[indexPath.row];
+    [cell setData:m];
+    return cell;
+}
+
+@end

+ 18 - 0
Asteria/Fuction/UserCenter/Points/view/ASPointEranCell.h

@@ -0,0 +1,18 @@
+//
+//  ASPointEranCell.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASPointEranCell : UITableViewCell
+
+- (void)setData:(NSString *)title des:(NSString *)des status:(BOOL)status;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 141 - 0
Asteria/Fuction/UserCenter/Points/view/ASPointEranCell.m

@@ -0,0 +1,141 @@
+//
+//  ASPointEranCell.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "ASPointEranCell.h"
+
+@interface ASPointEranCell ()
+
+@property (nonatomic, strong) UILabel *titleLb;
+@property (nonatomic, strong) UILabel *desLb;
+@property (nonatomic, strong) UIImageView *moreIconV;
+@property (nonatomic, strong) UIView *lineV;
+
+
+@end
+
+@implementation ASPointEranCell
+
+- (void)setData:(NSString *)title des:(NSString *)des status:(BOOL)status {
+    self.titleLb.text = title;
+    self.desLb.text = des;
+    if (status) {
+        self.titleLb.textColor = Col_666;
+        self.titleLb.font = [UIFont fontWithName:Rob_Regular size:14];
+        self.desLb.textColor = Col_000;
+        self.moreIconV.hidden = true;
+    } else {
+        self.titleLb.textColor = Col_000;
+        self.titleLb.font = [UIFont fontWithName:Rob_Bold size:14];
+        self.desLb.textColor = Col_000;
+        self.moreIconV.hidden = false;
+    }
+}
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        [self loadSubVs];
+    }
+    return self;
+}
+
+
+
+- (void)loadSubVs {
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+    [self.contentView addSubview:self.lineV];
+    [self.contentView addSubview:self.titleLb];
+    [self.contentView addSubview:self.desLb];
+    [self.contentView addSubview:self.moreIconV];
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.leading.equalTo(self.contentView).offset(20);
+        make.bottom.equalTo(self.contentView).offset(-20);
+        make.height.greaterThanOrEqualTo(@17);
+    }];
+    [self.moreIconV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.width.equalTo(@7);
+        make.height.equalTo(@17);
+        make.top.equalTo(self.contentView).offset(20);
+        make.trailing.equalTo(self.contentView).offset(-20);
+        make.leading.equalTo(self.desLb.mas_trailing).offset(10);
+    }];
+    [self.desLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(20);
+        make.leading.equalTo(self.titleLb.mas_trailing).offset(10);
+        make.width.equalTo(@112);
+        make.height.equalTo(@17);
+    }];
+    [self.lineV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.leading.equalTo(self.contentView).offset(20);
+        make.trailing.equalTo(self.contentView).offset(-20);
+        make.bottom.equalTo(self.contentView);
+        make.height.equalTo(@1);
+    }];
+    
+    [self.desLb setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
+    [self.titleLb setContentHuggingPriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal];
+    [self.titleLb setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
+    
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel *lb = [[UILabel alloc] init];
+        lb.textColor = Col_000;
+        lb.font = [UIFont fontWithName:Rob_Bold size:14];
+        lb.textAlignment = NSTextAlignmentLeft;
+        lb.numberOfLines = 0;
+        _titleLb = lb;
+    }
+    return _titleLb;
+}
+
+- (UILabel *)desLb {
+    if (!_desLb) {
+        UILabel *lb = [[UILabel alloc] init];
+        lb.textColor = Col_000;
+        lb.font = [UIFont fontWithName:Rob_Regular size:14];
+        lb.textAlignment = NSTextAlignmentRight;
+        _desLb = lb;
+    }
+    return _desLb;
+}
+
+- (UIImageView *)moreIconV {
+    if (!_moreIconV) {
+        UIImageView *v = [UIImageView new];
+        v.contentMode = UIViewContentModeScaleAspectFit;
+        v.image = [UIImage imageNamed:@"uc_more"];
+        _moreIconV = v;
+    }
+    return _moreIconV;
+}
+
+- (UIView *)lineV {
+    if (!_lineV) {
+        UIView *v = [UIView new];
+        v.backgroundColor = _043632;
+        v.alpha = 0.1;
+        _lineV = v;
+    }
+    return _lineV;
+}
+
+
+
+@end

+ 5 - 0
Asteria/Fuction/UserCenter/Points/ASPointHeadView.h

@@ -11,6 +11,11 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface ASPointHeadView : UIView
 
+@property (nonatomic, copy) btnClickBlock ruleCallBack;
+@property (nonatomic, copy) btnClickBlock detailCallBack;
+
+- (void)setData:(NSString *)num;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 69 - 1
Asteria/Fuction/UserCenter/Points/ASPointHeadView.m

@@ -24,9 +24,25 @@
 
 @implementation ASPointHeadView
 
+- (void)setData:(NSString *)num {
+    self.numLb.text = num;
+}
+
+- (void)ruleAction {
+    if (self.ruleCallBack) {
+        self.ruleCallBack();
+    }
+}
+
+- (void)detailAction {
+    if (self.detailCallBack) {
+        self.detailCallBack();
+    }
+}
 
 - (instancetype)initWithFrame:(CGRect)frame {
-    self = [super initWithFrame:frame];
+    CGRect rect = CGRectMake(0, 0, KScreenWidth, 205);
+    self = [super initWithFrame:rect];
     if (self) {
         [self loadsubV];
     }
@@ -34,6 +50,7 @@
 }
 
 - (void)loadsubV {
+    self.backgroundColor = _E0FFF5;
     [self addSubview:self.topBgV];
     [self addSubview:self.bottomBgV];
     
@@ -46,6 +63,43 @@
     
     [self.bottomBgV mas_makeConstraints:^(MASConstraintMaker *make) {
         make.height.equalTo(@70);
+        make.bottom.leading.trailing.equalTo(self);
+    }];
+    
+    [self.topBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.leading.trailing.equalTo(self);
+        make.height.equalTo(@135);
+    }];
+    
+    [self.numLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.leading.equalTo(self.topBgV).offset(30);
+        make.height.equalTo(@58);
+        make.top.equalTo(self.topBgV).offset(30);
+    }];
+    
+    [self.numDesLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.leading.equalTo(self.numLb);
+        make.top.equalTo(self.numLb.mas_bottom);
+        make.height.equalTo(@17);
+    }];
+    [self.ruleBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.width.equalTo(@44);
+        make.top.equalTo(self.topBgV).offset(30);
+        make.trailing.equalTo(self.topBgV).offset(-15);
+        make.height.equalTo(@17);
+    }];
+    [self.detailBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(self.ruleBt);
+        make.width.equalTo(@53);
+        make.trailing.equalTo(self.ruleBt.mas_leading).offset(0);
+        make.centerY.equalTo(self.ruleBt);
+    }];
+    
+    [self.bottomTitleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bottomBgV).offset(30);
+        make.leading.equalTo(self.bottomBgV).offset(20);
+        make.trailing.equalTo(self.bottomBgV).offset(-20);
+        make.height.equalTo(@30);
     }];
 }
 
@@ -62,7 +116,19 @@
 - (UIView *)bottomBgV {
     if (!_bottomBgV) {
         UIView *v = [UIView baseV];
+        v.frame = CGRectMake(0, 0, KScreenWidth, 70);
         v.backgroundColor = Col_FFF;
+        
+        // 左上和右上为圆角
+
+        UIBezierPath *cornerRadiusPath = [UIBezierPath      bezierPathWithRoundedRect:v.bounds byRoundingCorners:UIRectCornerTopRight | UIRectCornerTopLeft cornerRadii:CGSizeMake(16, 16)];
+        
+        CAShapeLayer *cornerRadiusLayer = [ [CAShapeLayer alloc ] init];
+        cornerRadiusLayer.frame = v.bounds;
+        
+        cornerRadiusLayer.path = cornerRadiusPath.CGPath;
+        
+        v.layer.mask = cornerRadiusLayer;
         _bottomBgV = v;
     }
     return _bottomBgV;
@@ -113,6 +179,7 @@
             NSFontAttributeName:[UIFont fontWithName:Rob_Regular size:14]
         } range:NSMakeRange(0, str.length)];
         [bt setAttributedTitle:str forState:UIControlStateNormal];
+        [bt addTarget:self action:@selector(detailAction) forControlEvents:UIControlEventTouchUpInside];
         _detailBt = bt;
     }
     return _detailBt;
@@ -130,6 +197,7 @@
             NSFontAttributeName:[UIFont fontWithName:Rob_Regular size:14]
         } range:NSMakeRange(0, str.length)];
         [bt setAttributedTitle:str forState:UIControlStateNormal];
+        [bt addTarget:self action:@selector(ruleAction) forControlEvents:UIControlEventTouchUpInside];
         _ruleBt = bt;
     }
     return _ruleBt;

+ 25 - 1
Asteria/Fuction/UserCenter/UserCenterHome/ASUserCenterViewController.m

@@ -11,6 +11,8 @@
 #import "KWMineHomeOrderListCell.h"
 #import "KWMineMoreProductsCell.h"
 
+#import "ASPointsHomeViewController.h"
+
 
 @interface ASUserCenterViewController ()<UITableViewDelegate,UITableViewDataSource>
 
@@ -24,7 +26,12 @@
 
 - (void)viewDidLoad {
     [super viewDidLoad];
+    [self configSubVs];
+    
     
+}
+
+- (void)configSubVs {
     __block typeof(self) wSelf = self;
     [self ucHomeStyle:^{
         // TODO: 跳转搜索模块
@@ -39,8 +46,24 @@
     
     [self.tableHeadV.signV configDayArr:4 currentDay:7 status:false];
     
+    
+    [self.tableHeadV.itemsV setItemTapCallBack:^(NSInteger tag) {
+        // -2编辑头像 -1设置 0 vip  1优惠券 2积分 3 钱包 4联系 5浏览历史
+        switch (tag) {
+            case -2:
+                
+                break;
+            case 2: {
+                ASPointsHomeViewController *vc = [[ASPointsHomeViewController alloc] init];
+                [self.navigationController pushViewController:vc animated:true];
+            }
+            default:
+                break;
+        }
+    }];
 }
 
+
 #pragma mark - UITableViewDelegate,UITableViewDataSource
 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
@@ -111,8 +134,9 @@
     if (name == nil || [name isEqualToString:@""]) {
         name = @"Products";
     }
+    UIViewController *vc = [CTMediator.sharedInstance getProductListVc:@{}];
+    [self.navigationController pushViewController:vc animated:true];
     
-
 }
 
 

+ 19 - 0
Asteria/Fuction/WebView/ASWebViewController.h

@@ -0,0 +1,19 @@
+//
+//  ASWebViewController.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "ASBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASWebViewController : ASBaseViewController
+
+@property (nonatomic, copy) NSString *customTitle;
+@property (nonatomic, copy) NSString *webUrl;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 77 - 0
Asteria/Fuction/WebView/ASWebViewController.m

@@ -0,0 +1,77 @@
+//
+//  ASWebViewController.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "ASWebViewController.h"
+
+@interface ASWebViewController ()<WKNavigationDelegate, WKUIDelegate>
+
+@property (nonatomic, strong) WKWebView *webView;
+
+@end
+
+@implementation ASWebViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self loadSubVs];
+    [self configViews];
+    
+    [self beginLoad];
+}
+
+- (void)beginLoad {
+    NSURL *url = [NSURL URLWithString:self.webUrl];
+    if (!url) {
+        return;
+    }
+    NSURLRequest *requst = [NSURLRequest requestWithURL:url];
+    [self.webView loadRequest:requst];
+}
+
+- (void)configViews {
+    [self setTitleStr:self.customTitle];
+    [self setNavRightSearch:^{
+        
+    }];
+    
+}
+
+- (void)loadSubVs {
+    [self.view addSubview:self.webView ];
+    [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.customNavBar.mas_bottom);
+        make.bottom.leading.trailing.equalTo(self.view);
+    }];
+    
+}
+
+// MARK: - subvs
+- (WKWebView *)webView {
+    if (!_webView) {
+        WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
+        WKWebView *v = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];
+        v.navigationDelegate = self;
+        v.UIDelegate = self;
+        _webView = v;
+    }
+    return _webView;
+}
+
+// MARK: - uidelegate navidelegate
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
+    [webView evaluateJavaScript:@"document.title" completionHandler:^(id _Nullable title, NSError * _Nullable error) {
+        NSString *titleStr = [NSString stringWithFormat:@"%@",title];
+            if (!titleStr.isEmpty) {
+                [self setTitleStr:titleStr];
+     
+            }
+     
+        }];
+}
+
+
+@end

+ 19 - 0
Asteria/Fuction/WebView/Target_WebView.h

@@ -0,0 +1,19 @@
+//
+//  Target_WebView.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface Target_WebView : NSObject
+
+/// title: 标题    url: 加载链接
+- (UIViewController *)Action_getWebViewVc:(NSDictionary *)params;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 21 - 0
Asteria/Fuction/WebView/Target_WebView.m

@@ -0,0 +1,21 @@
+//
+//  Target_WebView.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "Target_WebView.h"
+#import "ASWebViewController.h"
+
+@implementation Target_WebView
+
+/// title: 标题    url: 加载链接
+- (UIViewController *)Action_getWebViewVc:(NSDictionary *)params {
+    ASWebViewController *vc = [ASWebViewController new];
+    vc.customTitle = params[@"title"];
+    vc.webUrl = params[@"url"];
+    return vc;
+}
+
+@end

+ 1 - 0
Asteria/PreFixHeader.h

@@ -10,6 +10,7 @@
 
 #import "CTMediator+Categorys.h"
 #import "CTMediator+Home.h"
+#import "CTMediator+ASWebView.h"
 #import "CTMediator+UserCenter.h"
 #import "UITableView+ASBase.h"
 #import "UIView+PublicInit.h"

+ 20 - 0
Asteria/Product/CTMediatoaTargets/CTMediator+ASWebView.h

@@ -0,0 +1,20 @@
+//
+//  CTMediator+ASWebView.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import <CTMediator/CTMediator.h>
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CTMediator (ASWebView)
+
+/// title: 标题    url: 加载链接
+-(UIViewController *)getWebViewVc:(NSDictionary *)params;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 18 - 0
Asteria/Product/CTMediatoaTargets/CTMediator+ASWebView.m

@@ -0,0 +1,18 @@
+//
+//  CTMediator+ASWebView.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/24.
+//
+
+#import "CTMediator+ASWebView.h"
+
+
+@implementation CTMediator (ASWebView)
+
+/// title: 标题    url: 加载链接
+-(UIViewController *)getWebViewVc:(NSDictionary *)params{
+    return [self performTarget:@"WebView" action:@"getWebViewVc" params:params shouldCacheTarget:NO];
+}
+
+@end