Browse Source

2.3.0 版本 完成

openlockPPP 5 months ago
parent
commit
60810375a6
23 changed files with 2661 additions and 28 deletions
  1. 4 4
      jiaPei.xcodeproj/project.pbxproj
  2. BIN
      jiaPei.xcworkspace/xcuserdata/mimasigeling.xcuserdatad/UserInterfaceState.xcuserstate
  3. 0 22
      jiaPei/Images.xcassets/Modules/小李视频/li_zu_kbg.imageset/Contents.json
  4. 1 0
      jiaPei/Modules/HomePageModule/ViewModel/HomePage/考场视频/ItemViewModel/RQPlaceBuyItemViewModel.m
  5. 20 0
      jiaPei/Modules/HomePageModule/ViewModel/HomeSubPage/易错专项/NYFailSpecialExerciseItemModel.h
  6. 43 0
      jiaPei/Modules/HomePageModule/ViewModel/HomeSubPage/易错专项/NYFailSpecialExerciseItemModel.m
  7. 17 0
      jiaPei/Modules/OtherModules/VIPModule/View/其他/NYVipTipsCell.h
  8. 41 0
      jiaPei/Modules/OtherModules/VIPModule/View/其他/NYVipTipsCell.m
  9. 66 0
      jiaPei/Modules/OtherModules/VIPModule/View/其他/NYVipTipsCell.xib
  10. 1 0
      jiaPei/Modules/OtherModules/VIPModule/ViewController/RQVipViewController.m
  11. 3 2
      jiaPei/Modules/OtherModules/VIPModule/ViewModel/NYWPViewModel.m
  12. 21 0
      jiaPei/Modules/OtherModules/VIPModule/ViewModel/itemViewModel/小李/NYLIVipContentNewItemViewModel.h
  13. 41 0
      jiaPei/Modules/OtherModules/VIPModule/ViewModel/itemViewModel/小李/NYLIVipContentNewItemViewModel.m
  14. 20 0
      jiaPei/Modules/OtherModules/VIPModule/ViewModel/itemViewModel/小李/NYLIVipTipsItemViewModel.h
  15. 17 0
      jiaPei/Modules/OtherModules/VideoModule/Controller/NYVideoCatalogueViewController.h
  16. 233 0
      jiaPei/Modules/OtherModules/VideoModule/Controller/NYVideoCatalogueViewController.m
  17. 1 0
      jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailViewController.m
  18. 1 0
      jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVipCoachViewController.m
  19. 4 0
      jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubFooterCell.m
  20. 58 0
      jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailViewModel.m
  21. 135 0
      jiaPei/Vendor/MuTableCollectMenu/MuMenuView/MultilevelMenu.h
  22. 712 0
      jiaPei/Vendor/MuTableCollectMenu/MuMenuView/MultilevelMenu.m
  23. 1222 0
      jiaPei/pointData.json

+ 4 - 4
jiaPei.xcodeproj/project.pbxproj

@@ -12581,7 +12581,7 @@
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				"CODE_SIGN_RESOURCE_RULES_PATH[sdk=*]" = "";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 2292025012203;
+				CURRENT_PROJECT_VERSION = 2302025021902;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				DEVELOPMENT_TEAM = K7T6CU5SW5;
 				ENABLE_BITCODE = NO;
@@ -12619,7 +12619,7 @@
 					"$(PROJECT_DIR)/jiaPei/Vendor/BaiDuFaceSDK/BDFaceSDK/lib",
 					"$(PROJECT_DIR)/jiaPei/Vendor/QiNiu_IMSDK/Vendors/Voice",
 				);
-				MARKETING_VERSION = 2.2.9;
+				MARKETING_VERSION = 2.3.0;
 				ONLY_ACTIVE_ARCH = YES;
 				OTHER_CFLAGS = (
 					"$(inherited)",
@@ -12667,7 +12667,7 @@
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 2292025012203;
+				CURRENT_PROJECT_VERSION = 2302025021902;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DEVELOPMENT_TEAM = K7T6CU5SW5;
 				ENABLE_BITCODE = NO;
@@ -12705,7 +12705,7 @@
 					"$(PROJECT_DIR)/jiaPei/Vendor/BaiDuFaceSDK/BDFaceSDK/lib",
 					"$(PROJECT_DIR)/jiaPei/Vendor/QiNiu_IMSDK/Vendors/Voice",
 				);
-				MARKETING_VERSION = 2.2.9;
+				MARKETING_VERSION = 2.3.0;
 				ONLY_ACTIVE_ARCH = NO;
 				OTHER_CFLAGS = (
 					"$(inherited)",

BIN
jiaPei.xcworkspace/xcuserdata/mimasigeling.xcuserdatad/UserInterfaceState.xcuserstate


+ 0 - 22
jiaPei/Images.xcassets/Modules/小李视频/li_zu_kbg.imageset/Contents.json

@@ -1,22 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "universal",
-      "scale" : "1x"
-    },
-    {
-      "filename" : "li_zu_kbg@2x.png",
-      "idiom" : "universal",
-      "scale" : "2x"
-    },
-    {
-      "filename" : "li_zu_kbg@3x.png",
-      "idiom" : "universal",
-      "scale" : "3x"
-    }
-  ],
-  "info" : {
-    "author" : "xcode",
-    "version" : 1
-  }
-}

+ 1 - 0
jiaPei/Modules/HomePageModule/ViewModel/HomePage/考场视频/ItemViewModel/RQPlaceBuyItemViewModel.m

@@ -26,6 +26,7 @@
         NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
         [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
         }];
+        
         [self.wpviewModel.wView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
             NSLog(@"navigator.userAgent.result is ++++ %@", result);
         }];

+ 20 - 0
jiaPei/Modules/HomePageModule/ViewModel/HomeSubPage/易错专项/NYFailSpecialExerciseItemModel.h

@@ -0,0 +1,20 @@
+//
+//  NYFailSpecialExerciseItemModel.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2024/12/11.
+//  Copyright © 2024 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYFailSpecialExerciseItemModel : RQCommonCollectionItemViewModel
+
+
+- (instancetype)initWithTitle:(NSString *)title icon:(NSString *)icon;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 43 - 0
jiaPei/Modules/HomePageModule/ViewModel/HomeSubPage/易错专项/NYFailSpecialExerciseItemModel.m

@@ -0,0 +1,43 @@
+//
+//  NYFailSpecialExerciseItemModel.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2024/12/11.
+//  Copyright © 2024 JCZ. All rights reserved.
+//
+
+#import "NYFailSpecialExerciseItemModel.h"
+
+@implementation NYFailSpecialExerciseItemModel
+
+- (instancetype)init {
+    if (self = [super init]) {
+        self.itemSize = CGSizeMake((RQ_SCREEN_WIDTH/3.0)-20.f, RQ_FIT_HORIZONTAL(100));
+    }
+    return self;
+}
+
+- (NSString *)itemClassName {
+    return @"NYFailSpecialExerciseCell";
+}
+
+
+- (nonnull instancetype)initWithTitle:(nonnull NSString *)title icon:(nonnull NSString *)icon {
+    if (self = [self init]) {
+        self.title = title;
+        self.icon = icon;
+        self.operation = ^{
+            NSLog(@"%@点击了",title);
+            if (RQ_USER_MANAGER.isLogin) {
+                NYFailSpecialExerciseDetailsViewModel *failSpecialExerciseDetailsViewModel = [[NYFailSpecialExerciseDetailsViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
+                    RQHomePageSubjectTypeKey : @(RQ_YDTQuestion_Module.carType),
+                    RQHomePageSpTitleKey : title,
+                }];
+                [RQ_APPDELEGATE.services pushViewModel:failSpecialExerciseDetailsViewModel animated:YES];
+            }
+        };
+    }
+    return self;
+}
+
+@end

+ 17 - 0
jiaPei/Modules/OtherModules/VIPModule/View/其他/NYVipTipsCell.h

@@ -0,0 +1,17 @@
+//
+//  NYVipTipsCell.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/15.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "RQCommonCollectionViewCell.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYVipTipsCell : RQCommonCollectionViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 41 - 0
jiaPei/Modules/OtherModules/VIPModule/View/其他/NYVipTipsCell.m

@@ -0,0 +1,41 @@
+//
+//  NYVipTipsCell.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/15.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYVipTipsCell.h"
+
+@interface NYVipTipsCell ()
+@property (nonatomic, readwrite, strong) NYLIVipTipsItemViewModel *viewModel;
+
+@end
+
+@implementation NYVipTipsCell
+
+#pragma mark - PublicMethods
++ (instancetype)cellWithCollectionView:(UICollectionView *)collectionView forIndexPath:(NSIndexPath *)indexPath {
+    static NSString *ID = @"NYVipTipsCell";
+    [collectionView registerNib:[UINib nibWithNibName:ID bundle:nil] forCellWithReuseIdentifier:ID];
+    NYVipTipsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ID forIndexPath:indexPath];
+    if (!cell) cell = [self rq_viewFromXib];
+    
+    return cell;
+}
+
+- (void)bindViewModel:(NYLIVipTipsItemViewModel *)viewModel {
+//    @weakify(self)
+    _viewModel = viewModel;
+
+}
+
+
+#pragma mark - SystemMethods
+- (void)awakeFromNib {
+    [super awakeFromNib];
+   
+}
+
+@end

+ 66 - 0
jiaPei/Modules/OtherModules/VIPModule/View/其他/NYVipTipsCell.xib

@@ -0,0 +1,66 @@
+<?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" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="NYVipTipsCell">
+            <rect key="frame" x="0.0" y="0.0" width="365" height="90"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="365" height="90"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iUx-Qj-Vbh">
+                        <rect key="frame" x="0.0" y="15" width="365" height="60"/>
+                        <subviews>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="温馨提示: 特训包不包含普通VIP内容,推荐临考学员学习!" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kwf-Zq-uIz">
+                                <rect key="frame" x="50" y="4" width="300" height="52"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.92156862750000001" green="0.38823529410000002" blue="0.10980392160000001" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="li_tis_deng" translatesAutoresizingMaskIntoConstraints="NO" id="Fg3-7o-Q3Y">
+                                <rect key="frame" x="15" y="12" width="20" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="t8M-ea-56p"/>
+                                    <constraint firstAttribute="width" constant="20" id="tkg-tH-yRb"/>
+                                </constraints>
+                            </imageView>
+                        </subviews>
+                        <color key="backgroundColor" red="1" green="0.96078431369999995" blue="0.90980392160000001" alpha="1" colorSpace="calibratedRGB"/>
+                        <constraints>
+                            <constraint firstItem="Fg3-7o-Q3Y" firstAttribute="leading" secondItem="iUx-Qj-Vbh" secondAttribute="leading" constant="15" id="PDX-AU-dL3"/>
+                            <constraint firstAttribute="bottom" secondItem="kwf-Zq-uIz" secondAttribute="bottom" constant="4" id="UTN-h1-Vzf"/>
+                            <constraint firstItem="kwf-Zq-uIz" firstAttribute="leading" secondItem="Fg3-7o-Q3Y" secondAttribute="trailing" constant="15" id="ViD-5e-F7P"/>
+                            <constraint firstItem="kwf-Zq-uIz" firstAttribute="top" secondItem="iUx-Qj-Vbh" secondAttribute="top" constant="4" id="c96-xR-JQF"/>
+                            <constraint firstAttribute="trailing" secondItem="kwf-Zq-uIz" secondAttribute="trailing" constant="15" id="cxG-72-rfN"/>
+                            <constraint firstItem="Fg3-7o-Q3Y" firstAttribute="top" secondItem="iUx-Qj-Vbh" secondAttribute="top" constant="12" id="eI0-T1-7ag"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
+                                <integer key="value" value="6"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+            </view>
+            <constraints>
+                <constraint firstItem="iUx-Qj-Vbh" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="Ndr-nI-bCE"/>
+                <constraint firstAttribute="trailing" secondItem="iUx-Qj-Vbh" secondAttribute="trailing" id="Zx2-7j-vbc"/>
+                <constraint firstAttribute="bottom" secondItem="iUx-Qj-Vbh" secondAttribute="bottom" constant="15" id="pd0-q6-okO"/>
+                <constraint firstItem="iUx-Qj-Vbh" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="15" id="r6h-Ra-A3V"/>
+            </constraints>
+            <size key="customSize" width="361" height="111"/>
+            <point key="canvasLocation" x="278.62595419847327" y="9.8591549295774659"/>
+        </collectionViewCell>
+    </objects>
+    <resources>
+        <image name="li_tis_deng" width="20" height="20"/>
+    </resources>
+</document>

+ 1 - 0
jiaPei/Modules/OtherModules/VIPModule/ViewController/RQVipViewController.m

@@ -32,6 +32,7 @@
     [super viewDidLoad];
     /// 初始化
     [self rq_setup];
+    [self.view addSubview:self.wpviewModel.wView];
     [self.wpviewModel.wView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
         NSLog(@"navigator.userAgent.result is ++++ %@", result);
     }];

+ 3 - 2
jiaPei/Modules/OtherModules/VIPModule/ViewModel/NYWPViewModel.m

@@ -69,6 +69,7 @@
         } else {
             // Fallback on earlier versions
         }
+        view.hidden = YES;
         _wView = view;
     }
     return _wView;
@@ -231,8 +232,8 @@
         @"loginCode":RQ_USER_MANAGER.currentUser.loginCode==nil?@"":RQ_USER_MANAGER.currentUser.loginCode,
         @"nickName":RQ_USER_MANAGER.currentUser.nickName,
         @"pxkm":RQ_USER_MANAGER.currentUser.pxkm==nil?@"":RQ_USER_MANAGER.currentUser.pxkm,
-        @"apsw":@"1" ,//RQ_COMMON_MANAGER.APP_SWITCH?@"1":@"0",
-        @"apt":[NSString stringWithFormat:@"%zd",RQ_COMMON_MANAGER.JSJP_iOS_PT], // 1 苹果 
+        @"apsw":RQ_COMMON_MANAGER.APP_SWITCH?@"1":@"0",
+        @"apt":[NSString stringWithFormat:@"%zd",RQ_COMMON_MANAGER.JSJP_iOS_PT], 
     };
     return obj;
 }

+ 21 - 0
jiaPei/Modules/OtherModules/VIPModule/ViewModel/itemViewModel/小李/NYLIVipContentNewItemViewModel.h

@@ -0,0 +1,21 @@
+//
+//  NYLIVipContentNewItemViewModel.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/6.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVipContentNewItemViewModel : RQCommonCollectionItemViewModel
+@property (nonatomic, readonly, strong) RQTypeModel *typeModel;
+@property (nonatomic, readwrite, assign) BOOL isSubjectFour;
+@property (nonatomic, readwrite, assign) int type;
+
+/// init
+- (instancetype)initWithRQTypeModel:(RQTypeModel *)typeModel type:(int)type;
+@end
+NS_ASSUME_NONNULL_END

+ 41 - 0
jiaPei/Modules/OtherModules/VIPModule/ViewModel/itemViewModel/小李/NYLIVipContentNewItemViewModel.m

@@ -0,0 +1,41 @@
+//
+//  NYLIVipContentNewItemViewModel.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/6.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVipContentNewItemViewModel.h"
+
+@interface NYLIVipContentNewItemViewModel ()
+@property (nonatomic, readwrite, strong) RQTypeModel *typeModel;
+@property (nonatomic, readwrite, copy) NSString *contentStr;
+
+@end
+
+@implementation NYLIVipContentNewItemViewModel
+- (instancetype)initWithRQTypeModel:(RQTypeModel *)typeModel type:(int)type{
+    if (self = [super init]) {
+        self.typeModel = typeModel;
+        self.type = type;
+        CGFloat RQVipContentCellWidth = RQ_SCREEN_WIDTH;
+        CGFloat RQVipContentCellHeight = RQVipContentCellWidth * (580.f / 375.f);
+        if(type==1){
+            RQVipContentCellHeight = RQVipContentCellWidth * (380.f / 375.f);
+        }else if(type==2){
+            RQVipContentCellHeight = RQVipContentCellWidth * (280.f / 375.f);
+        }
+        else if(type==3){
+            RQVipContentCellHeight = RQVipContentCellWidth * (400.f / 375.f);
+        }
+        self.itemSize = CGSizeMake(RQVipContentCellWidth, RQVipContentCellHeight);
+    }
+    return self;
+}
+
+- (NSString *)itemClassName {
+    return @"NYLiVipContentNewCell01";
+}
+
+@end

+ 20 - 0
jiaPei/Modules/OtherModules/VIPModule/ViewModel/itemViewModel/小李/NYLIVipTipsItemViewModel.h

@@ -0,0 +1,20 @@
+//
+//  NYLIVipTipsItemViewModel.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/15.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYLIVipTipsItemViewModel : RQCommonCollectionItemViewModel
+@property (nonatomic, readonly, strong) RQVideoVipModel *videoVipModel;
+@property (nonatomic, readonly, assign) RQHomePageSubjectType homePageSubjectType;
+
+- (instancetype)initVideoVipModel:(RQVideoVipModel *)videoVipModel homePageSubjectType:(RQHomePageSubjectType)homePageSubjectType;
+@end
+
+NS_ASSUME_NONNULL_END

+ 17 - 0
jiaPei/Modules/OtherModules/VideoModule/Controller/NYVideoCatalogueViewController.h

@@ -0,0 +1,17 @@
+//
+//  NYVideoCatalogueViewController.h
+//  jiaPei
+//
+//  Created by Ning.ge on 2024/11/27.
+//  Copyright © 2024 JCZ. All rights reserved.
+//  视频目录(科目一,科目四)
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NYVideoCatalogueViewController : RQCommonViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 233 - 0
jiaPei/Modules/OtherModules/VideoModule/Controller/NYVideoCatalogueViewController.m

@@ -0,0 +1,233 @@
+//
+//  NYVideoCatalogueViewController.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2024/11/27.
+//  Copyright © 2024 JCZ. All rights reserved.
+//
+
+#import "NYVideoCatalogueViewController.h"
+#import "MultilevelMenu.h"
+
+@interface NYVideoCatalogueViewController ()<SDCycleScrollViewDelegate>
+/// viewModel
+@property (nonatomic, readonly, strong) NYVideoCatalogueViewModel *viewModel;
+
+@property (nonatomic, readwrite, strong) SDCycleScrollView *cycleScrollView;
+@property (nonatomic, readonly, assign) float cycleScrollViewHeight;
+
+@property (nonatomic, readwrite, assign) NSInteger lastcontentOffset;
+@property (nonatomic, readwrite, assign) float menuCategoryViewTitleWidth;
+
+@property (nonatomic, readwrite, strong) NSMutableArray *leftChildrenItemsArr;
+
+@property (nonatomic, readwrite, strong) MultilevelMenu *menuView;
+
+@end
+
+@implementation NYVideoCatalogueViewController
+
+@dynamic viewModel;
+
+#pragma mark - SystemMethod
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    /// 初始化
+    [self rq_setup];
+}
+
+
+#pragma mark - PrivateMethods
+/// 初始化
+- (void)rq_setup {
+    /// set up ...
+    self.tableView.backgroundColor = UIColor.whiteColor;
+    [self.view addSubview:self.cycleScrollView];
+    if (self.adArray.count > 0) {
+        NSMutableArray *arr = [self.adArray.rac_sequence map:^id _Nullable(NSDictionary *dic) {
+            return dic[@"IMG"];
+        }].array.mutableCopy;
+        if (arr.count >= 1) {
+            [arr insertObject:@"RQ-AD" atIndex:1];
+        } else {
+            [arr addObject:@"RQ-AD"];
+        }
+        self.cycleScrollView.imageURLStringsGroup = arr.copy;
+    }
+    
+    [self configSelectView];
+}
+
+- (void)configSelectView {
+    @weakify(self)
+    //获取三级分类数组
+    NSMutableArray * lis = [NSMutableArray arrayWithCapacity:0];
+    NSMutableArray *typeNameStrArr = @[].mutableCopy;
+    self.leftChildrenItemsArr = @[].mutableCopy;
+    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); // 创建信号量,初始值为0
+    [[self.viewModel.treeListModel.children.rac_sequence.signal deliverOnMainThread] subscribeNext:^(ChildrenItem *childrenItem) {
+        @strongify(self)
+        if (childrenItem.videos.count > 0) {
+            [typeNameStrArr addObject:childrenItem.typeName];
+            [self.leftChildrenItemsArr addObject:childrenItem];
+        }
+    } completed:^{
+        @strongify(self)
+        NSMutableArray *titleArr = [NSMutableArray arrayWithArray:typeNameStrArr.copy];
+        for (int i = 0; i < titleArr.count; i++) {
+            rightMeun * meun=[[rightMeun alloc] init];
+            meun.ID = [NSString stringWithFormat:@"%d",i];
+            meun.meunName = titleArr[i];
+            NSMutableArray * sub = [NSMutableArray arrayWithCapacity:0];
+            ChildrenItem *childrenItem = self.leftChildrenItemsArr[i];
+            [[RQ_HTTP_Service getTeachingVideoByTypeId:childrenItem.id] subscribeNext:^(NSArray *arr) {
+                @strongify(self)
+                NSMutableArray *dataList = [[arr.rac_sequence.signal map:^id _Nullable(VideosItem *videoItem) {
+                    @strongify(self)
+                    videoItem.subject = self.viewModel.homePageSubjectType;
+                    CGXVerticalMenuMoreListSectionItemModel *itemModel = [[CGXVerticalMenuMoreListSectionItemModel alloc] init];
+                    itemModel.itemCornerRadius = 10;
+                    itemModel.itemBorderColor = [UIColor redColor];
+                    itemModel.itemBborderWidth = 1;
+                    itemModel.itemText = videoItem.title;
+                    itemModel.itemUrlStr = videoItem.coverFileUrl;
+                    itemModel.menu_ImageCallback = ^(UIImageView * _Nonnull hotImageView, NSURL * _Nonnull hotImageURL) {
+                        [hotImageView yy_setImageWithURL:hotImageURL options:RQWebImageOptionAutomatic];
+                    };
+                    itemModel.dataModel = videoItem;
+                    return itemModel;
+                }].toArray mutableCopy];
+                int index_Id = 0;
+                for (CGXVerticalMenuMoreListSectionItemModel *itemModel in dataList) {
+                    rightMeun * meun1=[[rightMeun alloc] init];
+                    meun1.meunName = @"";
+                    meun1.ID = [NSString stringWithFormat:@"%d",index_Id];
+                    meun1.parentID = i;
+                    meun1.model = itemModel;
+                    [sub addObject:meun1];
+                    index_Id++;
+                }
+                meun.nextArray=sub;
+                // 释放信号量,表示当前请求完成
+                dispatch_semaphore_signal(semaphore);
+            }];
+            [lis addObject:meun];
+        }
+        CGFloat menuCategoryViewY = CGRectGetMaxY(self.cycleScrollView.frame) + 8;
+        // 使用信号量等待所有请求完成
+        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+            // 等待所有请求结束
+            for (int i = 0; i < titleArr.count; i++) {
+                dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); // 等待信号量,直到信号量被释放
+            }
+            
+            // 在所有请求完成后执行UI更新操作
+            dispatch_async(dispatch_get_main_queue(), ^{
+                MultilevelMenu * mView = [[MultilevelMenu alloc] initWithFrame:CGRectMake(0, menuCategoryViewY, RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT - menuCategoryViewY - RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT) WithData:lis withSelectIndex:^(NSInteger left, NSInteger right,rightMeun* info) {
+                    
+                }];
+                mView.needToScorllerIndex = 0;
+                mView.isRecordLastScroll = YES;
+                mView.leftSelectColor = [UIColor purpleColor];
+                mView.chooseBlock = ^(NSString *chooseContent, NSMutableArray *chooseArr, NSIndexPath *indexPath) {
+                    [self chooseBlockIndex:indexPath];
+                };
+                [self.view addSubview:mView];
+                self.menuView = mView;
+            });
+            
+        });
+        
+    }];
+}
+
+- (void)chooseBlockIndex:(NSIndexPath*)indexPath{
+    rightMeun *title = self.menuView.allData[self.menuView.selectIndex];
+    rightMeun *model = title.nextArray[indexPath.row];
+    NSInteger index = self.menuView.selectIndex;
+    CGXVerticalMenuMoreListSectionItemModel *itemModel = model.model;
+    RQVideoDetailViewModel *videoDetailViewModel = [[RQVideoDetailViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
+        RQViewModelUtilKey      : self.viewModel.treeListModel,
+        RQPlayVideoItemKey      : itemModel.dataModel,
+        RQVideoItemIndexKey     : @(index),
+        RQVideoItemIndexPathKey : [NSIndexPath indexPathForRow:indexPath.section inSection:(self.viewModel.homePageSubjectType == RQHomePageSubjectType_SubjectTwo || self.viewModel.homePageSubjectType == RQHomePageSubjectType_SubjectThree)? self.viewModel.mySection : indexPath.row],
+        RQHomePageSubjectTypeKey    : @(self.viewModel.homePageSubjectType),
+    }];
+    if ([RQ_Video_Module isCanWatchWithVideosItem:itemModel.dataModel]) {
+        [RQ_APPDELEGATE.services pushViewModel:videoDetailViewModel animated:YES];
+    }
+}
+
+#pragma mark - SDCycleScrollViewDelegate
+- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index {
+    if (self.adArray.count >= 1) {
+        if (index == 1) return;
+    } else {
+        if (index >= self.adArray.count) return;
+    }
+    NSDictionary *dic = self.adArray[index];
+    [RQ_SHARE_FUNCTION saveObjectWithObject:dic ForKey:@"currentSelectDic"];
+    
+    NSString *skipType = dic[@"OPENTYPE"];
+    
+    if ([skipType isEqualToString:@"1"]) {
+        [RQ_SHARE_FUNCTION gotoWebViewWithUrlStr:dic[@"URL"]];
+    }else{
+        if ([dic[@"ADTYPE"] isEqualToString:@"2"]) {
+            [RQ_SHARE_FUNCTION miniwithUserName:dic[@"URL"] path:dic[@"AI_XCX_URL"]? : @""];
+        } else if ([dic[@"ADTYPE"] isEqualToString:@"1"]) {
+            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:dic[@"URL"]] options:@{} completionHandler:^(BOOL success) {
+                
+            }];
+        } else if ([dic[@"ADTYPE"] isEqualToString:@"3"]) {
+            WXSubscribeMsgReq *req = [[WXSubscribeMsgReq alloc] init];
+            req.scene = 1;
+            req.templateId = @"1iZwYeI2QtSXZ3rTRkQ42wgRkd7NSINzem8R-LvtHYw";
+            req.reserved = @"";
+            [WXApi sendReq:req completion:nil];
+        }
+    }
+}
+
+#pragma mark - LazyLoad
+- (SDCycleScrollView *)cycleScrollView {
+    if (!_cycleScrollView) {
+        _cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(16, (RQ_APPLICATION_NAV_BAR_HEIGHT + RQ_APPLICATION_STATUS_BAR_HEIGHT), RQ_SCREEN_WIDTH - 32.f, self.cycleScrollViewHeight) imageNamesGroup:@[@"adPlaceHolder"]];
+        _cycleScrollView.autoScrollTimeInterval = 5;
+        _cycleScrollView.layer.cornerRadius = 10.f;
+        _cycleScrollView.layer.masksToBounds = YES;
+        _cycleScrollView.placeholderImage = RQImageNamed(@"adPlaceHolder");
+    }
+    return _cycleScrollView;
+}
+
+- (float)cycleScrollViewHeight {
+    return (RQ_SCREEN_WIDTH - 32.f) / (600.f / 150.0);
+}
+
+- (NSArray *)adArray {
+    //广告
+    NSMutableArray *newAD = [NSMutableArray array];
+    if (self.viewModel.homePageSubjectType == RQHomePageSubjectType_SubjectOne) {
+        for (NSDictionary *dic in myDelegate.adArray) {
+            if ([dic[@"LOCATION"] isEqualToString:@"3"]) {
+                [newAD addObject:dic];
+            }
+        }
+    }else{
+        for (NSDictionary *dic in myDelegate.adArray) {
+            if ([dic[@"LOCATION"] isEqualToString:@"6"]) {
+                [newAD addObject:dic];
+            }
+        }
+    }
+    return newAD.copy;
+}
+- (void)showHud {
+    [MBProgressHUD showHUDAddedTo:[RQ_SHARE_FUNCTION topViewController].view animated:YES];
+}
+
+- (void)hideHud {
+    [MBProgressHUD hideHUDForView:[RQ_SHARE_FUNCTION topViewController].view animated:YES];
+}
+@end

+ 1 - 0
jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVideoDetailViewController.m

@@ -56,6 +56,7 @@
 
 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
+    RQ_YDTQuestion_Module.subject = self.viewModel.homePageSubjectType;
     RQ_Video_Module.playerController.viewControllerDisappear = NO;
 }
 

+ 1 - 0
jiaPei/Modules/OtherModules/XLIModule/Controller/NYLIVipCoachViewController.m

@@ -36,6 +36,7 @@
     [super viewDidLoad];
     /// 初始化
     [self rq_setup];
+    [self.view addSubview:self.wpviewModel.wView];
     [self.wpviewModel.wView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
         NSLog(@"navigator.userAgent.result is ++++ %@", result);
     }];

+ 4 - 0
jiaPei/Modules/OtherModules/XLIModule/View/NYLIVideoDetailSubFooterCell.m

@@ -47,6 +47,8 @@
     }].toArray;
     if(btn.tag == 10){//竖
         [RQ_VIP_Module isVipWithSubject:sub complete:^(BOOL isVip) {
+            int subtype = sub-1;
+            RQ_YDTQuestion_Module.subject = subtype;
             if (isVip) {
                 RQExerciseViewModel *exerciseViewModel = [[RQExerciseViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
                     RQHomePageCarTypeKey        : @(RQ_YDTQuestion_Module.carType),
@@ -76,6 +78,8 @@
                 examinationViewModel.km = sub;
                 [RQ_APPDELEGATE.services pushViewModel:examinationViewModel animated:YES];
             } else {
+                int subtype = sub-1;
+                RQ_YDTQuestion_Module.subject = subtype;
                 [RQ_VIP_Module gotoBuyVipWithVipPageType:RQVIPPageType_Full];
             }
         }];

+ 58 - 0
jiaPei/Modules/OtherModules/XLIModule/ViewModel/NYLIVideoDetailViewModel.m

@@ -0,0 +1,58 @@
+//
+//  NYLIVideoDetailViewModel.m
+//  jiaPei
+//
+//  Created by Ning.ge on 2025/2/8.
+//  Copyright © 2025 JCZ. All rights reserved.
+//
+
+#import "NYLIVideoDetailViewModel.h"
+
+
+@interface NYLIVideoDetailViewModel ()
+@property (nonatomic, readwrite, strong) RQTreeListModel *treeListModel;
+@property (nonatomic, readwrite, strong) RQPlaceVideoListModel *placeVideoListModel;
+@property (nonatomic, readwrite, assign) NSInteger index;
+@property (nonatomic, readwrite, strong) NSIndexPath *indexPath;
+@property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType;
+@property (nonatomic, readwrite, strong) VideosItem *videosItem;
+@end
+
+@implementation NYLIVideoDetailViewModel
+#pragma mark - Public Method
+- (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
+    if (self = [super initWithServices:services params:params]) {
+//        if ([params[RQViewModelUtilKey] isKindOfClass:[RQPlaceVideoListModel class]]) {
+            self.placeVideoListModel = params[RQViewModelUtilKey];
+//        } else {
+//            self.treeListModel = params[RQViewModelUtilKey];
+//        }
+        self.index = [params[RQVideoItemIndexKey] integerValue];
+        self.indexPath = params[RQVideoItemIndexPathKey];
+        self.homePageSubjectType = [params[RQHomePageSubjectTypeKey] integerValue];
+        self.videosItem = params[RQPlayVideoItemKey];
+    }
+    return self;
+}
+
+- (void)initialize {
+    [super initialize];
+    
+    self.prefersNavigationBarHidden = YES;
+   
+//    RQ_YDTQuestion_Module.subject = self.homePageSubjectType;
+    //通知
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getLIFiveReload:) name:NYLI_FIVEDB_CHANGEDO object:nil];
+}
+
+- (void)dealloc{
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+- (void)getLIFiveReload:(NSNotification *)sender {
+    NSString *type = sender.object;
+    self.homePageSubjectType = [type isEqualToString:@"1"]? RQHomePageSubjectType_SubjectOne_LI : RQHomePageSubjectType_SubjectFour_LI;
+    self.placeVideoListModel.examName = [type isEqualToString:@"1"]? @"科一专项精品课" :@"科四专项精品课";
+}
+
+@end

+ 135 - 0
jiaPei/Vendor/MuTableCollectMenu/MuMenuView/MultilevelMenu.h

@@ -0,0 +1,135 @@
+//
+//  MultilevelMenu.h
+//  MultilevelMenu
+//
+//  Created by Kingson on 2021/4/25.
+//
+
+#import <UIKit/UIKit.h>
+
+#define kLeftWidth 100
+
+typedef void(^ChooseBlock) (NSString *chooseContent,NSMutableArray *chooseArr,NSIndexPath *indexPath);
+
+@interface MultilevelMenu : UIView<UITableViewDataSource,UITableViewDelegate,UICollectionViewDelegateFlowLayout,UICollectionViewDataSource,UICollectionViewDelegate>
+
+@property(strong,nonatomic,readonly) NSArray * allData;
+
+
+@property(copy,nonatomic,readonly) id block;
+
+/**
+ *  是否 记录滑动位置
+ */
+@property(assign,nonatomic) BOOL isRecordLastScroll;
+/**
+ *   记录滑动位置 是否需要 动画
+ */
+@property(assign,nonatomic) BOOL isRecordLastScrollAnimated;
+/**
+ *   记录已选中的数据索引
+ */
+@property(assign,nonatomic,readonly) NSInteger selectIndex;
+
+/**
+ *  为了 不修改原来的,因此增加了一个属性,选中指定 行数
+ */
+@property(assign,nonatomic) NSInteger needToScorllerIndex;
+/**
+ *  颜色属性配置
+ */
+
+/**
+ *  左边背景颜色
+ */
+@property(strong,nonatomic) UIColor * leftBgColor;
+/**
+ *  左边点中文字颜色
+ */
+@property(strong,nonatomic) UIColor * leftSelectColor;
+/**
+ *  左边点中背景颜色
+ */
+@property(strong,nonatomic) UIColor * leftSelectBgColor;
+
+/**
+ *  左边未点中文字颜色
+ */
+
+@property(strong,nonatomic) UIColor * leftUnSelectColor;
+/**
+ *  左边未点中背景颜色
+ */
+@property(strong,nonatomic) UIColor * leftUnSelectBgColor;
+/**
+ *  tablew 的分割线
+ */
+@property(strong,nonatomic) UIColor * leftSeparatorColor;
+
+@property(nonatomic,strong)NSMutableArray * dataArr;
+
+@property(nonatomic,strong)NSMutableArray * choosedArr;
+
+@property(nonatomic,strong)NSMutableDictionary * choosedDic;
+
+@property(nonatomic,copy)ChooseBlock chooseBlock;
+
+@property (nonatomic,assign)BOOL ifAllSelected;
+
+@property (nonatomic,assign)BOOL ifAllSelecteSwitch;
+
+@property(strong,nonatomic ) UICollectionView * rightCollection;
+
+
+-(instancetype)initWithFrame:(CGRect)frame WithData:(NSArray*)data withSelectIndex:(void(^)(NSInteger left,NSInteger right,id info))selectIndex;
+
+@end
+
+
+@interface rightMeun : NSObject
+
+/**
+ *  菜单图片名
+ */
+@property(copy,nonatomic) NSString * urlName;
+/**
+ *  菜单名
+ */
+@property(copy,nonatomic) NSString * meunName;
+/**
+ *  菜单ID
+ */
+@property(copy,nonatomic) NSString * ID;
+
+/**
+ *  父级ID
+ */
+@property(assign,nonatomic) NSInteger parentID;
+
+@property (nonatomic, readwrite, strong) CGXVerticalMenuMoreListSectionItemModel *model;
+
+/**
+ *  下一级菜单
+ */
+@property(strong,nonatomic) NSArray * nextArray;
+
+/**
+ *  菜单层数
+ */
+@property(assign,nonatomic) NSInteger meunNumber;
+
+@property(assign,nonatomic) float offsetScorller;
+
+/**
+ *  模型数组
+ */
+@property(nonatomic,strong) NSMutableArray *allModelArr;
+
+
+/// 根据ID和MenuName判断RightMenu是否相同
+/// @param rightMenu 需要比较的对象
+-(BOOL)isEualToRightMeun:(rightMeun *)rightMenu;
+
+
+@end
+

+ 712 - 0
jiaPei/Vendor/MuTableCollectMenu/MuMenuView/MultilevelMenu.m

@@ -0,0 +1,712 @@
+//
+//  MultilevelMenu.m
+//  MultilevelMenu
+//
+//  Created by Kingson on 2021/4/25.
+//
+
+#import "MultilevelMenu.h"
+#import "MultilevelTableViewCell.h"
+#import "ProductCateFilteHeaderView.h"
+#import "CollectviewChooseCell.h"
+#import "NSString+hAdd.h"
+#import <Masonry/Masonry.h>
+#import "NYVideoListCell.h"
+
+#define kCellRightLineTag 100
+#define ItemHeight 70
+
+#define kMultilevelCollectionHeader   @"CollectionHeader"//CollectionHeader
+#define kScreenWidth [UIScreen mainScreen].bounds.size.width
+
+#define kScreenHeight [UIScreen mainScreen].bounds.size.height
+#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
+#define MAX3(a,b,c) (a>b?(a>c?a:c):(b>c?b:c))
+
+static NSString *HeaderId = @"HeaderId";
+static NSString *CellId = @"CellId";
+
+@interface MultilevelMenu()
+
+@property(strong,nonatomic ) UITableView * leftTablew;
+//@property(strong,nonatomic ) UICollectionView * rightCollection;
+
+@property(assign,nonatomic) BOOL isReturnLastOffset;
+
+//可变数组记录头视图的按钮
+@property(nonatomic,strong) NSMutableArray *headerBtnArr;
+
+@end
+
+@implementation MultilevelMenu{
+    UICollectionReusableView *headReusableview;
+}
+
+- (NSMutableArray *)headerBtnArr{
+    
+    if (!_headerBtnArr) {
+        _headerBtnArr = [NSMutableArray array];
+    }
+    
+    return _headerBtnArr;
+    
+}
+
+
+-(instancetype)initWithFrame:(CGRect)frame WithData:(NSArray *)data withSelectIndex:(void (^)(NSInteger, NSInteger, id))selectIndex
+{
+    self=[super initWithFrame:frame];
+    if (self) {
+        if (data.count==0) {
+            return nil;
+        }
+        
+        _block=selectIndex;
+        self.leftSelectColor=[UIColor blackColor];
+        self.leftSelectBgColor=[UIColor whiteColor];
+        self.leftBgColor=UIColorFromRGB(0xF3F4F6);
+        self.leftSeparatorColor=UIColorFromRGB(0xE5E5E5);
+        self.leftUnSelectBgColor=UIColorFromRGB(0xF3F4F6);
+        self.leftUnSelectColor=[UIColor blackColor];
+        
+        _selectIndex=0;
+        _allData=data;
+        
+        _choosedArr = [[NSMutableArray alloc] initWithCapacity:0];
+        
+        /**
+         左边的视图
+        */
+        self.leftTablew=[[UITableView alloc] initWithFrame:CGRectMake(0, 0, kLeftWidth, frame.size.height)];
+        self.leftTablew.dataSource=self;
+        self.leftTablew.delegate=self;
+        
+        self.leftTablew.tableFooterView=[[UIView alloc] init];
+        [self addSubview:self.leftTablew];
+        self.leftTablew.backgroundColor=self.leftBgColor;
+        if ([self.leftTablew respondsToSelector:@selector(setLayoutMargins:)]) {
+            self.leftTablew.layoutMargins=UIEdgeInsetsZero;
+        }
+        if ([self.leftTablew respondsToSelector:@selector(setSeparatorInset:)]) {
+            self.leftTablew.separatorInset=UIEdgeInsetsZero;
+        }
+        self.leftTablew.separatorColor=self.leftSeparatorColor;
+        
+        self.leftTablew.estimatedRowHeight = 70;
+        self.leftTablew.rowHeight = UITableViewAutomaticDimension;
+        
+        
+        /**
+         右边的视图
+         */
+        UICollectionViewFlowLayout *flowLayout=[[UICollectionViewFlowLayout alloc] init];
+        
+        self.rightCollection=[[UICollectionView alloc] initWithFrame:CGRectMake(kLeftWidth,0,kScreenWidth-kLeftWidth,frame.size.height) collectionViewLayout:flowLayout];
+        
+        self.rightCollection.delegate=self;
+        self.rightCollection.dataSource=self;
+        
+        UINib *header=[UINib nibWithNibName:kMultilevelCollectionHeader bundle:nil];
+        [self.rightCollection registerNib:header forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kMultilevelCollectionHeader];
+        
+        [self.rightCollection registerClass:[ProductCateFilteHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader  withReuseIdentifier:HeaderId];
+        
+        [self.rightCollection registerClass:[CollectviewChooseCell class] forCellWithReuseIdentifier:CellId];
+        
+        [self.rightCollection registerNib:[UINib nibWithNibName:@"NYVideoListCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"NYVideoListCell"];
+        self.rightCollection.showsVerticalScrollIndicator = NO;
+        
+        [self addSubview:self.rightCollection];
+        
+      
+        self.isReturnLastOffset=YES;
+        
+        self.rightCollection.backgroundColor=self.leftSelectBgColor;
+        
+        
+        self.backgroundColor=self.leftSelectBgColor;
+        
+    }
+    return self;
+}
+
+-(void)setNeedToScorllerIndex:(NSInteger)needToScorllerIndex{
+    
+        /**
+         *  滑动到 指定行数
+         */
+        [self.leftTablew selectRowAtIndexPath:[NSIndexPath indexPathForRow:needToScorllerIndex inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
+
+        _selectIndex=needToScorllerIndex;
+        
+        [self.rightCollection reloadData];
+
+    _needToScorllerIndex=needToScorllerIndex;
+}
+-(void)setLeftBgColor:(UIColor *)leftBgColor{
+    _leftBgColor=leftBgColor;
+    self.leftTablew.backgroundColor=leftBgColor;
+   
+}
+-(void)setLeftSelectBgColor:(UIColor *)leftSelectBgColor{
+    
+    _leftSelectBgColor=leftSelectBgColor;
+    self.rightCollection.backgroundColor=leftSelectBgColor;
+    
+    self.backgroundColor=leftSelectBgColor;
+}
+-(void)setLeftSeparatorColor:(UIColor *)leftSeparatorColor{
+    _leftSeparatorColor=leftSeparatorColor;
+    self.leftTablew.separatorColor=leftSeparatorColor;
+}
+-(void)reloadData{
+    
+    [self.leftTablew reloadData];
+    [self.rightCollection reloadData];
+    
+}
+-(void)setLeftTablewCellSelected:(BOOL)selected withCell:(MultilevelTableViewCell*)cell
+{
+    UILabel * line=(UILabel*)[cell viewWithTag:kCellRightLineTag];
+    if (selected) {
+        
+        line.backgroundColor=cell.backgroundColor;
+        cell.titile.textColor=self.leftSelectColor;
+        cell.backgroundColor=self.leftSelectBgColor;
+    }
+    else{
+        cell.titile.textColor=self.leftUnSelectColor;
+        cell.backgroundColor=self.leftUnSelectBgColor;
+        line.backgroundColor=_leftTablew.separatorColor;
+    }
+   
+
+}
+
+#pragma mark---左边的tablew 代理
+#pragma mark--deleagte
+-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    return 1;
+}
+
+-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+    
+    return self.allData.count;
+   
+}
+
+-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
+    
+    static NSString * Identifier=@"MultilevelTableViewCell";
+    MultilevelTableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:Identifier];
+    
+    cell.selectionStyle=UITableViewCellSelectionStyleNone;
+    
+    if (!cell) {
+        cell=[[NSBundle mainBundle] loadNibNamed:@"MultilevelTableViewCell" owner:self options:nil][0];
+        
+        UILabel * label=[[UILabel alloc] initWithFrame:CGRectMake(kLeftWidth-0.5, 0, 0.5, 44)];
+        label.backgroundColor = tableView.separatorColor;
+        [cell addSubview:label];
+        label.numberOfLines = 0;
+        label.tag = kCellRightLineTag;
+    }
+    
+    
+    cell.selectionStyle=UITableViewCellSelectionStyleNone;
+    
+    rightMeun * title=self.allData[indexPath.row];
+    
+    cell.titile.text = title.meunName;
+    
+    cell.titile.font = [UIFont systemFontOfSize:13];
+    
+    if (indexPath.row==self.selectIndex) {
+        
+        [self setLeftTablewCellSelected:YES withCell:cell];
+        
+    }else{
+        
+        [self setLeftTablewCellSelected:NO withCell:cell];
+
+
+    }
+    
+
+    
+    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
+        cell.layoutMargins=UIEdgeInsetsZero;
+    }
+    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
+        cell.separatorInset=UIEdgeInsetsZero;
+    }
+    
+    
+    return cell;
+    
+}
+
+
+//-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
+//    return 44;
+//}
+
+-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
+    
+    
+    MultilevelTableViewCell * cell=(MultilevelTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
+
+    _selectIndex = indexPath.row;
+    
+    [self setLeftTablewCellSelected:YES withCell:cell];
+
+    rightMeun *title=self.allData[indexPath.row];
+    
+    [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
+    
+    self.isReturnLastOffset=NO;
+    
+    
+    [self.rightCollection reloadData];
+    
+    if (self.isRecordLastScroll) {
+        [self.rightCollection scrollRectToVisible:CGRectMake(0, title.offsetScorller, self.rightCollection.frame.size.width, self.rightCollection.frame.size.height) animated:self.isRecordLastScrollAnimated];
+    }
+    else{
+        
+         [self.rightCollection scrollRectToVisible:CGRectMake(0, 0, self.rightCollection.frame.size.width, self.rightCollection.frame.size.height) animated:self.isRecordLastScrollAnimated];
+    }
+    
+    
+    
+
+}
+
+
+-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
+    MultilevelTableViewCell * cell=(MultilevelTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
+
+    [self setLeftTablewCellSelected:NO withCell:cell];
+
+    cell.backgroundColor = self.leftUnSelectBgColor;
+}
+
+#pragma mark---imageCollectionView--------------------------
+
+-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
+    
+    
+    if (self.allData.count==0) {
+        return 0;
+    }
+    
+    rightMeun * title=self.allData[self.selectIndex];
+    return title.nextArray.count;
+    
+    
+}
+
+-(NSInteger)collectionView:(UICollectionView *)collectionView  numberOfItemsInSection:(NSInteger)section{
+    rightMeun * title=self.allData[self.selectIndex];
+    if (title.nextArray.count>0) {
+        
+        rightMeun *sub=title.nextArray[section];
+        
+        if (sub.nextArray.count==0)//没有下一级
+        {
+            return 1;
+        }
+        else
+            return sub.nextArray.count;
+        
+    }else{
+        return title.nextArray.count;
+    }
+}
+
+-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
+    
+    CollectviewChooseCell * cell = (CollectviewChooseCell *)[collectionView cellForItemAtIndexPath:indexPath];
+    
+    rightMeun *title = self.allData[self.selectIndex];
+    
+    //获取到当前选择的item
+    rightMeun *menu;
+    
+    menu = title.nextArray[indexPath.section];
+    
+    _chooseBlock(menu.meunName,_choosedArr,indexPath);
+    
+    
+}
+
+-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    
+    rightMeun * title = self.allData[self.selectIndex];
+    NSArray *list;
+    
+    rightMeun * meun;
+
+    meun=title.nextArray[indexPath.section];
+
+    if (meun.nextArray.count > 0) {
+        meun = title.nextArray[indexPath.section];
+        list = meun.nextArray;
+        meun = list[indexPath.row];
+    }
+    
+    NSString *reuseIdetify = @"NYVideoListCell";
+    NYVideoListCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdetify forIndexPath:indexPath];
+    cell.backgroundColor = [UIColor clearColor];
+    if(meun.model){
+        [cell reloadData:meun.model];
+    }
+    
+    return cell;
+    
+}
+
+- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
+    
+    NSString *reuseIdentifier;
+    if ([kind isEqualToString:UICollectionElementKindSectionFooter]){
+        reuseIdentifier = @"footer";
+    }else{
+        reuseIdentifier = kMultilevelCollectionHeader;
+    }
+    
+    rightMeun *title = self.allData[self.selectIndex];
+
+    if ([kind isEqualToString:UICollectionElementKindSectionHeader]){
+        
+        ProductCateFilteHeaderView *headReusableview = [collectionView  dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:HeaderId forIndexPath:indexPath];
+        
+        headReusableview.backgroundColor = [UIColor whiteColor];
+        
+        //取消复用
+        for (UIView *view in headReusableview.subviews) {
+            [view removeFromSuperview];
+        }
+        
+        UILabel *HeaderTitleLab = [[UILabel alloc] init];
+        
+        [HeaderTitleLab setFont:[UIFont systemFontOfSize:15.0f]];
+        
+        HeaderTitleLab.numberOfLines = 0;
+        
+        NSArray *menuArr = [NSArray array];
+        
+//        HeaderTitleLab.text = @"全选";
+        if (title.nextArray.count > 0) {
+            
+            rightMeun * meun;
+            meun=title.nextArray[indexPath.section];
+            
+            HeaderTitleLab.text = meun.meunName;
+            
+            menuArr = [meun.nextArray copy];
+            
+        }else{
+            
+            HeaderTitleLab.text = @"暂无";
+
+        }
+    
+        [headReusableview addSubview:HeaderTitleLab];
+        [HeaderTitleLab mas_makeConstraints:^(MASConstraintMaker *make) {
+
+            make.left.equalTo(headReusableview.mas_left).offset(15);
+            
+            make.top.equalTo(headReusableview.mas_top).offset(0);
+            make.height.mas_equalTo(headReusableview.mas_height);
+        }];
+        
+        UIButton *chooseIcon = [UIButton buttonWithType:UIButtonTypeCustom];
+        
+        //判断当前的全选状态
+        [chooseIcon setImage:[UIImage imageNamed:@"table_UnSelect"] forState:UIControlStateNormal];
+        [chooseIcon setImage:[UIImage imageNamed:@"table_Selected"] forState:UIControlStateSelected];
+        chooseIcon.tag = indexPath.section;
+        [chooseIcon addTarget:self action:@selector(ChooseAllClick:) forControlEvents:UIControlEventTouchUpInside];
+        [headReusableview addSubview:chooseIcon];
+        [chooseIcon mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.equalTo(HeaderTitleLab.mas_right).offset(10);
+            make.right.equalTo(headReusableview.mas_right).offset(-15);
+            make.top.equalTo(headReusableview.mas_top);
+            make.height.mas_equalTo(headReusableview.mas_height);
+            make.width.mas_equalTo(50);
+        }];
+        
+        BOOL isContain2 = true;
+//        //找出相同的数组
+        if (_choosedArr.count > 0) {
+            NSMutableArray *testArr1 = [NSMutableArray array];
+
+            for (rightMeun *ocl in _choosedArr) {
+                for (rightMeun *ocl2 in menuArr) {
+                    if ([ocl.meunName isEqualToString:ocl2.meunName]) {
+                        [testArr1 addObject:ocl];
+                    }
+                }
+            }
+            
+            [testArr1 sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
+                rightMeun *key1 = obj1;
+                rightMeun *key2 = obj2;
+                
+                NSInteger key1Integer = [key1.ID integerValue];
+                
+                NSInteger key2Integer = [key2.ID integerValue];
+                
+                if (key1Integer < key2Integer) {
+                    return NSOrderedAscending;
+                }
+                if (key1Integer > key2Integer) {
+                    return NSOrderedDescending;
+                }
+                return NSOrderedSame;;
+                
+            }];
+            
+            if (testArr1.count == 0 && menuArr.count == 0) {
+                isContain2 = false;
+            }else{
+                isContain2 = [[testArr1 copy] isEqual:menuArr];
+            }
+            
+        }else{
+            isContain2 = false;
+        }
+
+        if (isContain2) {
+            [chooseIcon setSelected:YES];
+
+        }else{
+
+            [chooseIcon setSelected:NO];
+
+        }
+        
+        
+        return headReusableview;
+        
+    }
+    else if ([kind isEqualToString:UICollectionElementKindSectionFooter]){
+        UICollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind :kind   withReuseIdentifier:reuseIdentifier  forIndexPath:indexPath];
+        
+        UILabel *label = (UILabel *)[view viewWithTag:1];
+        label.font = [UIFont systemFontOfSize:15];
+        label.textColor = UIColorFromRGB(0x686868);
+        
+        view.backgroundColor = [UIColor lightGrayColor];
+        label.text = [NSString stringWithFormat:@"这是footer:%ld",(long)indexPath.section];
+        return view;
+    }else{
+        
+        UICollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind :kind   withReuseIdentifier:reuseIdentifier  forIndexPath:indexPath];
+        return view;
+        
+    }
+    
+    
+}
+
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
+    
+//    return CGSizeMake(60, 90);
+    //根据文本计算出item的高度
+    rightMeun * title = self.allData[self.selectIndex];
+    NSArray *list;
+    
+    rightMeun * meun;
+
+    meun=title.nextArray[indexPath.section];
+
+    if (meun.nextArray.count > 0) {
+        meun = title.nextArray[indexPath.section];
+        list = meun.nextArray;
+        meun = list[indexPath.row];
+    }
+    
+    NSInteger rowC = indexPath.row;
+    
+    CGFloat labelWidth = (kScreenWidth - kLeftWidth);
+    CGFloat itemHeight = RQ_FIT_HORIZONTAL(82);
+    
+    return CGSizeMake(labelWidth,itemHeight);
+    
+}
+
+-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
+    return UIEdgeInsetsMake(10, 10, 10, 10);
+}
+
+-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{
+    CGSize size = {kScreenWidth,0.1};
+    return size;
+}
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{
+    
+    //行间距
+    return 10;
+    
+}
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{
+    
+    return 10;
+    
+}
+
+
+#pragma mark---记录滑动的坐标
+-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
+{
+    if ([scrollView isEqual:self.rightCollection]) {
+
+        
+        self.isReturnLastOffset=YES;
+    }
+}
+
+-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
+{
+    if ([scrollView isEqual:self.rightCollection]) {
+        
+        rightMeun * title=self.allData[self.selectIndex];
+        
+        title.offsetScorller=scrollView.contentOffset.y;
+        self.isReturnLastOffset=NO;
+        
+    }
+
+ }
+
+-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
+    if ([scrollView isEqual:self.rightCollection]) {
+        
+        rightMeun * title=self.allData[self.selectIndex];
+        
+        title.offsetScorller=scrollView.contentOffset.y;
+        self.isReturnLastOffset=NO;
+        
+    }
+
+}
+
+-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
+    
+    if ([scrollView isEqual:self.rightCollection] && self.isReturnLastOffset) {
+        rightMeun * title=self.allData[self.selectIndex];
+        
+        title.offsetScorller=scrollView.contentOffset.y;
+
+        
+    }
+}
+
+-(void)ChooseAllClick:(UIButton *)button{
+    
+    NSInteger sectionIndex = button.tag;
+    
+    BOOL selectType = button.isSelected;
+    
+    rightMeun *title = self.allData[self.selectIndex];
+    
+    //获取到当前选择的item
+    rightMeun *menu;
+    
+    menu = title.nextArray[sectionIndex];
+    
+    NSArray *selectArr = menu.nextArray;
+    
+    if (selectArr.count > 0) {
+        
+        //判断当前是全选还是取消全选状态
+        
+        if (_choosedArr.count == 0) {
+            //全选
+            if (!selectType) {
+                //选中
+                [_choosedArr addObjectsFromArray:selectArr];
+            }
+            
+            
+        }else{
+            
+            if (selectType) {
+                //移除数组内数据
+                [_choosedArr removeObjectsInArray:selectArr];
+                
+            }else{
+                //添加到数组内
+                [_choosedArr removeObjectsInArray:selectArr];
+                
+                [_choosedArr addObjectsFromArray:selectArr];
+                
+            }
+            
+        }
+        
+        
+    }
+    
+    
+    
+    //记录选择的数据 并更新视图
+    _ifAllSelecteSwitch = YES;
+    
+    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:button.tag];
+    
+    NSIndexSet *indexSet = [[NSIndexSet alloc] initWithIndex:indexPath.section];
+    
+    [_rightCollection reloadSections:indexSet];
+    
+    
+    
+//    [_rightCollection reloadData];
+    _chooseBlock(@"All",_choosedArr,indexPath);
+    
+}
+
+
+#pragma mark--Tools
+-(void)performBlock:(void (^)())block afterDelay:(NSTimeInterval)delay{
+    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC));
+    dispatch_after(popTime, dispatch_get_main_queue(), block);
+}
+
+@end
+
+
+
+@implementation rightMeun
+
+
+- (BOOL)isEqual:(rightMeun *)object{
+    
+    return [self isEualToRightMeun:object];
+    
+}
+
+
+-(BOOL)isEualToRightMeun:(rightMeun *)rightMenu{
+    
+    if (![rightMenu isKindOfClass:self.class]) {
+        return NO;
+    }
+    
+    BOOL result = ([self.meunName isEqualToString:rightMenu.meunName]);
+    
+    if (result == NO) {
+        return NO;
+    }else{
+        return YES;
+    }
+    
+}
+
+
+@end

+ 1222 - 0
jiaPei/pointData.json

@@ -0,0 +1,1222 @@
+{
+    "koufen": {
+        "videoDate": {
+            "publicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/e2145c432114499587229bf230d9d6cc.1080.mp4",
+            "vipPublicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/a25516c5c9f04ac79f6d43645d2d6b1d.1080.mp4",
+            "poster": "https://t1.58cdn.com.cn/brandads/jxedt/back/n_v272ee7d28b6124d2ba8c91752f906f909_4bb8ef7847d6e3c3.png",
+            "endButtonText": "解锁扣分题完整技巧"
+        },
+        "rightsType": "DEDUCT_SCORE_KM1",
+        "pointData": [
+            {
+                "showType": "1",
+                "content": "不按规定使用灯光/安全带/会车;普通道路不按规定倒车/掉头/停车;校车普通道路超速10%-20% ;违反禁令标志禁止标线;载货长宽高超规定/超重未达30%;载货汽车擅自改变已登记结构、构造或者特征;除公路客运、旅游客运、危险物品运输车辆外,未按规定年检上道路行驶",
+                "questionIds": "33696,33679,33809,33701,33676,33677,33401,29308,33707,33729,33856",
+                "score": 1,
+                "title": "扣1分",
+                "titleNightUrl": "https://t1.58cdn.com.cn/brandads/jxedt/back/n_v23507aa52584b4b9b9f19d647df4c67d6_284b7d262f486f57.png",
+                "scoreNightUrl": "https://t3.58cdn.com.cn/brandads/jxedt/back/n_v26836213287e94ca28ef92297a14e0982_b172040c06528579.png",
+                "titleDayUrl": "https://t2.58cdn.com.cn/brandads/jxedt/back/n_v261226280e1bf41a5b27d2544162cc462_e9a34a4f2d2fddde.png",
+                "scoreDayUrl": "https://t3.58cdn.com.cn/brandads/jxedt/back/n_v243ed9804fcaa4ca5816707a7ce48d5ec_11299fbd8a52cc19.png",
+                "category": 701
+            },
+            {
+                "showType": "1",
+                "content": "开车打电话;不避让校车;不按规定安装号牌;不按规定超车/让行;人行横道不按规定避让行人;高速公路/城市快速路不按规定车道行驶;出故障后停车,不按规定使用灯光/警告标志;高速行驶低于规定最低时速;强行占道穿插行为;载货汽车420法则(开车大于4小时未停车或停车休息小于20分钟);小车普通道路逆行/超速20%-50%;载客汽车超过核定人数20%-50%;载货载物超重30%-50%/载货汽车载客;校车上路前未检查车况/检查后带隐患仍上路;公路客运、旅游客运、危险物品运输车辆未按规定年检上道路行驶",
+                "questionIds": "33903,16509,26434,33682,33584,26011,27112,33749,33550,27114,33704,33580,33706,7761,26017",
+                "score": 3,
+                "title": "扣3分",
+                "titleNightUrl": "https://t2.58cdn.com.cn/brandads/jxedt/back/n_v2e23ad7121cc6423d958d28704699a9b7_01df97c5d329e44b.png",
+                "scoreNightUrl": "https://t1.58cdn.com.cn/brandads/jxedt/back/n_v2e4ae2b78a7514a6c8f2e5129dece5e0b_2be3774bd160eac0.png",
+                "titleDayUrl": "https://t2.58cdn.com.cn/brandads/jxedt/back/n_v2069b56c6d98649838c56b34586eefa66_8dab9db5ddc792bc.png",
+                "scoreDayUrl": "https://t4.58cdn.com.cn/brandads/jxedt/back/n_v21f6f4c89febd42459b44df3bf61c731d_d293aab515788473.png",
+                "category": 702
+            },
+            {
+                "showType": "1",
+                "content": "不遵守交通信号灯;占用应急车道;驾驶证被暂扣期间驾驶机动车;逃逸致人轻伤/财产损失;载运危险物品未按指定的时间、路线、速度行驶或者未悬挂警示标志的;小车高速超速20%-50%,普通道路50%以上;校车、中型以上载客载货汽车、危险物品运输车辆在高速公路、城市快速路上行驶超速未达到20%;载货汽车载物超最大允许总质量50%以上;校车、公路客运、旅游客运汽车超载未达20%/7座以上载客汽车载人超20%-50%/其他载客汽车载人超50%-100%",
+                "questionIds": "33693,33526,33860,33801,33722,33692,33654,33723,33700,33725,33675,33721,28102,27149,26527,348,33859,33565,350",
+                "score": 6,
+                "title": "扣6分",
+                "titleNightUrl": "https://t3.58cdn.com.cn/brandads/jxedt/back/n_v206cf7cf5af2c43d4ac86f26a58097315_ce3a8ddd23d0b0ca.png",
+                "scoreNightUrl": "https://t4.58cdn.com.cn/brandads/jxedt/back/n_v25028b36b03714e5289865eb929453ebb_8e049fb63c10ae94.png",
+                "titleDayUrl": "https://t2.58cdn.com.cn/brandads/jxedt/back/n_v28c3aef1db39943d383565fbc5df9ddf0_651e580c77d989ee.png",
+                "scoreDayUrl": "https://t4.58cdn.com.cn/brandads/jxedt/back/n_v2a734d84debdc491dbac8111c15d3b518_56d81fbc1470f6a0.png",
+                "category": 703
+            },
+            {
+                "showType": "1",
+                "content": "高速公路/城市快速路违法停车;未悬挂/遮挡/污损号牌;驾驶证与准驾车型不符;未取得校车驾驶资格驾驶校车;载客汽车/危险物品运输车420法则(开车大于4小时未停车或停车休息小于20分钟);7座以上载客汽车载人超50%-100%;校车、中型以上载客载货汽车、危险物品运输车辆在普通道路上超速50%以上",
+                "questionIds": "32,33591,33807,33798,33734,33659,341,33564,27121,33731,27101",
+                "score": 9,
+                "title": "扣9分",
+                "titleNightUrl": "https://t4.58cdn.com.cn/brandads/jxedt/back/n_v265efa44e53b44ff69c4c2ee7ff131d6e_8fc5f96e2ab2ba11.png",
+                "scoreNightUrl": "https://t3.58cdn.com.cn/brandads/jxedt/back/n_v2e6a4c42fe7e448b79cb1474653e53ccc_355f825017fb3e05.png",
+                "titleDayUrl": "https://t4.58cdn.com.cn/brandads/jxedt/back/n_v2aa08e127f32243059f7627c7c5608cad_13a7b69606c54dd7.png",
+                "scoreDayUrl": "https://t2.58cdn.com.cn/brandads/jxedt/back/n_v2ce291cb371024f7ba7f853f933bc6204_6348f04176402978.png",
+                "category": 704
+            },
+            {
+                "showType": "1",
+                "content": "饮酒开车;伪造/变造驾驶证/行驶证/号牌;使用其他号牌;逃逸致人轻伤以上或死亡;高速超速大车20%以上/小车50%以上;高速公路倒车/逆行/穿越分隔带;代替他人扣分,谋取利益;校车、公路客运汽车、旅游客运汽车载人超20%/其他载客汽车载人超100%",
+                "questionIds": "33724,33745,33714,33674,33728,33531,33681,33639,33636,356,33402,33708,343,33650,33743,29326,354,347,346,340,27108,7820,353,342",
+                "score": 12,
+                "title": "扣12分",
+                "titleNightUrl": "https://t1.58cdn.com.cn/brandads/jxedt/back/n_v2c0564ea45cd04e92990f12636d26562e_d2de1f73b3b3ad3b.png",
+                "scoreNightUrl": "https://t1.58cdn.com.cn/brandads/jxedt/back/n_v2ad04a984f8ad4313af97fd3adbaec602_3baccf7c900e96fd.png",
+                "titleDayUrl": "https://t2.58cdn.com.cn/brandads/jxedt/back/n_v2e2528dbbe17549bc99267792f819ba5f_b5cb35811322d927.png",
+                "scoreDayUrl": "https://t1.58cdn.com.cn/brandads/jxedt/back/n_v208d43a869b15480c9460f0b0792597da_a3eb22a3ebc7c8c2.png",
+                "category": 705
+            }
+        ],
+        "source": "440089",
+        "pageType": "koufen",
+        "category": 7
+    },
+    "fakuan": {
+        "videoDate": {
+            "vipPublicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/dd20852f7b884ca39ae30db283c52670.1080.mp4",
+            "publicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/e339da14d0d84dc9b145561c2e715795.1080.mp4",
+            "poster": "https://t4.58cdn.com.cn/brandads/jxedt/back/n_v22339c0aadbab40c7bdae090a0f762631_adb8f8769823934b.png",
+            "endButtonText": "解锁罚款题题完整技巧"
+        },
+        "pointData": [
+            {
+                "title": "罚款200元以下",
+                "fquestions": [
+                    {
+                        "subTitle": "1. 罚款题中出现【[未按照规定/未及时]】",
+                        "quesItem": [
+                            "[未按照规定]时限办理机动车转让登记",
+                            "改车[未按照规定]时限变更登记",
+                            "[未按照规定]期限检车",
+                            "大客车或中/重型载货车[未按照规定]喷涂号牌",
+                            "大中重型车驾驶证信息变更[未及时]申报"
+                        ]
+                    },
+                    {
+                        "subTitle": "2. 补换领驾驶证后[继续使用原证]"
+                    },
+                    {
+                        "subTitle": "3. 车身有影响安全驾驶的[喷涂]"
+                    },
+                    {
+                        "subTitle": "4. [实习期内]单独上高速/驾驶牵引挂车"
+                    }
+                ],
+                "questionIds": "33671,7783,27111,33672,33664",
+                "category": 2601
+            },
+            {
+                "title": "罚款200元",
+                "fquestions": [
+                    {
+                        "subTitle": "1. 事故未撤离,造成堵塞"
+                    }
+                ],
+                "questionIds": "315",
+                "category": 2602
+            },
+            {
+                "title": "罚款200元以上500元以下",
+                "fquestions": [
+                    {
+                        "subTitle": "1. 逾期不审验仍驾驶机动车"
+                    },
+                    {
+                        "subTitle": "2. 隐瞒情况申领驾驶证或申请校车驾驶"
+                    },
+                    {
+                        "subTitle": "3. 身体条件不适合仍驾驶"
+                    },
+                    {
+                        "subTitle": "4. 超载有2种罚款金额",
+                        "image": "https://jxedttest.58v5.cn/dist/jxedt/question_app/images/200-500.png"
+                    }
+                ],
+                "questionIds": "33545,33546",
+                "category": 2603
+            },
+            {
+                "title": "罚款200元以上2000元以下",
+                "fquestions": [
+                    {
+                        "subTitle": "1.罚款题中出现【[尚不构成犯罪]】",
+                        "quesItem": [
+                            "逃逸[尚不构成犯罪]",
+                            "损毁交通设施[尚不构成犯罪]"
+                        ]
+                    },
+                    {
+                        "subTitle": "2.罚款题中出现【[不听劝阻]】",
+                        "quesItem": [
+                            "违反交通管制,[不听劝阻]强行通行",
+                            "非法拦截扣留车辆,[不听劝阻]造成损失"
+                        ]
+                    },
+                    {
+                        "subTitle": "3.非法安装警报器"
+                    },
+                    {
+                        "subTitle": "4.驾驶拼装机动车上路"
+                    },
+                    {
+                        "subTitle": "5.车给无证人员驾驶"
+                    },
+                    {
+                        "subTitle": "6.超速50%"
+                    }
+                ],
+                "questionIds": "305,84,7806",
+                "category": 2604
+            },
+            {
+                "title": "酒驾",
+                "fquestions": [
+                    {
+                        "subTitle": "1.酒后驾驶运营车辆罚款5000元"
+                    },
+                    {
+                        "subTitle": "2.再次酒驾罚款1000元以上2000元以下"
+                    }
+                ],
+                "questionIds": "7724",
+                "category": 2605
+            },
+            {
+                "title": "弄虚作假",
+                "fquestions": [
+                    {
+                        "subTitle": "1000元以下",
+                        "quesItem": [
+                            "参加满分学习/扣减记分/审验教育时弄虚作假"
+                        ]
+                    },
+                    {
+                        "subTitle": "2000元以下",
+                        "quesItem": [
+                            "①不正当手段取得驾照/校车驾驶资格",
+                            "②驾考过程中舞弊",
+                            "③代替他人参加审验教育"
+                        ]
+                    },
+                    {
+                        "subTitle": "违法所得3倍以下,不超2万",
+                        "quesItem": [
+                            "组织他人代替参加审验教育"
+                        ]
+                    },
+                    {
+                        "subTitle": "所支付经济利益3倍以下,不超5万",
+                        "quesItem": [
+                            "请他人代扣分,并支付经济利益"
+                        ]
+                    },
+                    {
+                        "subTitle": "违法所得3倍-5倍,不超10万",
+                        "quesItem": [
+                            "参与实施以不正常手段取得驾驶证牟取经济利益"
+                        ]
+                    }
+                ],
+                "questionIds": "33658,33726,33690,33697,33665,28922,33687,33718,33669,33719,33562,33746,33553",
+                "category": 2606
+            }
+        ],
+        "source": "440107",
+        "pageType": "fakuan",
+        "category": 26
+    },
+    "zhouqi": {
+        "videoDate": {
+            "vipPublicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/2ee93b2c426f491c9e2ff785e276e7b8.1080.mp4",
+            "publicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/video/00e5ed283b8542bca6df10de5a7409db.mp4",
+            "poster": "https://t1.58cdn.com.cn/brandads/jxedt/back/n_v271cdf2330db842c89cb4470d7a89f101_febfe6fae86bea12.png",
+            "endButtonText": "解锁周期题题完整技巧"
+        },
+        "pointData": [
+            {
+                "title": "[记分]周期[4种]记分情况",
+                "fquestions": [
+                    {
+                        "subTitle": "1.记分未满12分",
+                        "quesItem": [
+                            "① 罚款[未缴]的记分[转下个周期]",
+                            "② 无未缴罚款记录,清除本周期内记分"
+                        ]
+                    },
+                    {
+                        "subTitle": "2.记满12分",
+                        "quesItem": [
+                            "① [扣留]驾驶证,参加[满分学习]",
+                            "② 满分学习一个周期只能参加[一次]",
+                            "③ 满分学习小车[7天],大中客货车[30天]"
+                        ]
+                    },
+                    {
+                        "subTitle": "3.记满24分,未满36分",
+                        "quesItem": [
+                            "参加理论/道路驾驶[2个]考试"
+                        ]
+                    },
+                    {
+                        "subTitle": "4.记满36分",
+                        "quesItem": [
+                            "参加理论/场地/道路驾驶[3个]考试"
+                        ]
+                    }
+                ],
+                "questionIds": "33415,33668,26066,33688,33673,33651,33736,33699,33689,7793,33739,33720,33977,33854,33405,28104,27138,44,307,33705,327,33685",
+                "category": 2501
+            },
+            {
+                "title": "[扣减分]周期[3个]考点",
+                "fquestions": [
+                    {
+                        "subTitle": "1.一个记分周期[12个月],满分[12分]"
+                    },
+                    {
+                        "subTitle": "2.一个记分周期内[最高扣减6分]"
+                    },
+                    {
+                        "subTitle": "3.[酒驾3个记分周期]内不可申请扣减"
+                    }
+                ],
+                "questionIds": "33717,33590,39,37,33587,33540,33515,33747,33727,326,325",
+                "category": 2502
+            },
+            {
+                "title": "[驾驶证]周期[3个]考点",
+                "fquestions": [
+                    {
+                        "subTitle": "1.审验驾驶证",
+                        "quesItem": [
+                            "到期前[90日]/到期后[30日]内接受审验",
+                            "延期审验不得超过[3年]"
+                        ]
+                    },
+                    {
+                        "subTitle": "2.换发驾驶证",
+                        "quesItem": [
+                            "每周期均未达12分,驾驶证有效期[6年换10年,10年换长期]"
+                        ]
+                    },
+                    {
+                        "subTitle": "3.注销驾驶证",
+                        "quesItem": [
+                            "70周岁以上,1个记分周期后的[1年内]未提交体检证明"
+                        ]
+                    }
+                ],
+                "questionIds": "7674,33461,254,253,250,249,246,33596,330,7707,331,329,323,321,7676",
+                "category": 2503
+            },
+            {
+                "title": "[增驾]周期[3个]考点",
+                "fquestions": [
+                    {
+                        "subTitle": "1.增驾[中型]客车",
+                        "quesItem": [
+                            "最近前[2个周期]内无满分记录"
+                        ]
+                    },
+                    {
+                        "subTitle": "2.增驾[大型]客车",
+                        "quesItem": [
+                            "最近[3个周期]内无满分记录"
+                        ]
+                    },
+                    {
+                        "subTitle": "3.增驾[重型]牵引挂车",
+                        "quesItem": [
+                            "最近[2个周期]内无满分记录"
+                        ]
+                    }
+                ],
+                "questionIds": "",
+                "category": 2504
+            }
+        ],
+        "source": "440110",
+        "pageType": "zhouqi",
+        "category": 25
+    },
+    "juliu": {
+        "videoDate": {
+            "vipPublicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/b570e6a28dbd4a6592b6b4fd1839b740.1080.mp4",
+            "publicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/0c49af2a0bb94cedb0f59906c155d76d.1080.mp4",
+            "poster": "https://t4.58cdn.com.cn/brandads/jxedt/back/n_v2ef1e9cbe048a4c60a590d984aa2e4bca_39f1b0b22ef8b1be.png",
+            "endButtonText": "解锁判罚题完整技巧"
+        },
+        "pointData": [
+            {
+                "title": "徒刑3个考点",
+                "iquestions": [
+                    {
+                        "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/Judgment/oneYears.png"
+                    },
+                    {
+                        "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/Judgment/threeYears.png"
+                    },
+                    {
+                        "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/Judgment/serverYears.png"
+                    }
+                ],
+                "questionIds": "7,282,280,33735,281,278,277,275,276,274,33712,33710",
+                "category": 2801
+            },
+            {
+                "title": "拘役2个考点",
+                "fquestions": [
+                    {
+                        "subTitle": "1.处拘役并处罚金",
+                        "quesItem": [
+                            "追逐竞驶,情节恶劣",
+                            "醉酒驾驶"
+                        ]
+                    },
+                    {
+                        "subTitle": "2.处拘役或管制,并处或单处罚金",
+                        "quesItem": [
+                            "替考驾驶证的"
+                        ]
+                    }
+                ],
+                "questionIds": "33715,7753,286,285,13594,283,284",
+                "category": 2802
+            },
+            {
+                "title": "扣留2个考点",
+                "tagquestions": [
+                    {
+                        "tag": "扣留车辆",
+                        "tagCon": [
+                            {
+                                "subTitle": "1.开车[未带或伪造]【2证2标1号牌】扣留车辆",
+                                "quesItem": [
+                                    "2证:驾驶证、行驶证",
+                                    "2标:保险标志、检验合格标志",
+                                    "1号牌:机动车号牌"
+                                ]
+                            },
+                            {
+                                "subTitle": "2.[未投保交强险]扣留车辆,同时应缴纳保费的[2倍罚款]"
+                            },
+                            {
+                                "subTitle": "3.需要收集证据的[事故车],可依法扣留"
+                            }
+                        ]
+                    },
+                    {
+                        "tag": "扣留驾驶证",
+                        "tagCon": [
+                            {
+                                "subTitle": "1.[酒驾]扣留驾驶证"
+                            },
+                            {
+                                "subTitle": "2.驾驶证扣留期间[不补发]"
+                            },
+                            {
+                                "subTitle": "3.驾驶证扣留/丢失[不得开车],开车处[15日以下拘留]"
+                            }
+                        ]
+                    }
+                ],
+                "questionIds": "27105,7745,43,42,41,40,7724,45,7744,302,298,297,301,300,299,296,339,295,294,18,17,306,7723,24733,293,292,33568,33466,29315,287,16,29,33,30,33543,33519,28,10,13596,13595,291,290",
+                "category": 2803
+            },
+            {
+                "title": "交通肇事罪",
+                "fquestions": [
+                    {
+                        "subTitle": "致人重伤,并具有下列6种行为之一,构成交通肇事罪",
+                        "quesItem": [
+                            "1.酒后/毒后驾驶",
+                            "2.无证驾驶",
+                            "3.严重超载驾驶",
+                            "4.为逃避追究逃离事故现场",
+                            "5.明知安全装置/机件不合规,仍驾驶",
+                            "6.明知无牌证/报废车,仍驾驶"
+                        ]
+                    }
+                ],
+                "questionIds": "13605,13604,2640,2639,2638,2637",
+                "category": 2804
+            }
+        ],
+        "source": "440108",
+        "pageType": "juliu",
+        "category": 28
+    },
+    "shoushi": {
+        "videoDate": {
+            "vipPublicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/de23d1041bb647b0b6ef927fc0f069a4.1080.mp4",
+            "publicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/4245848e64924e6db5579a8cbedfb489.1080.mp4",
+            "poster": "https://t1.58cdn.com.cn/brandads/jxedt/back/n_v28b632e1e8314423c91cd924b3c645376_ca02421b4f0d8e62.png",
+            "endButtonText": "解锁交警手势题完整技巧"
+        },
+        "pointData": [
+            {
+                "mainTit": "1个原则",
+                "con": [
+                    {
+                        "title": "1. 交警的指挥优先级[最高]",
+                        "image": "",
+                        "questions": []
+                    }
+                ],
+                "questionIds": "24752,61",
+                "category": 2401
+            },
+            {
+                "mainTit": "交警1个手臂动",
+                "con": [
+                    {
+                        "title": "[1.待转:]小幅向下摆",
+                        "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/vipPoliceGesture/dz.png",
+                        "questions": []
+                    },
+                    {
+                        "title": "[2.减速:]大幅上下摆",
+                        "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/vipPoliceGesture/js.png",
+                        "questions": []
+                    },
+                    {
+                        "title": "[3.变道:]左右摆动",
+                        "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/vipPoliceGesture/bd.png",
+                        "questions": []
+                    },
+                    {
+                        "title": "[4.停车:]手掌举高过头",
+                        "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/vipPoliceGesture/tc.png",
+                        "questions": []
+                    }
+                ],
+                "questionIds": "669,55,676,677,673",
+                "category": 2402
+            },
+            {
+                "mainTit": "交警2个手臂动",
+                "con": [
+                    {
+                        "title": "[1.直行:]双臂平行",
+                        "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/vipPoliceGesture/zx.png",
+                        "questions": []
+                    },
+                    {
+                        "title": "[2.转弯:]手臂一高一低",
+                        "image": "",
+                        "questions": [
+                            {
+                                "subTitle": "[左转:]左手在下",
+                                "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/vipPoliceGesture/zszx.png"
+                            },
+                            {
+                                "subTitle": "[右转:]右手在下",
+                                "image": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/vipPoliceGesture/yszx.png"
+                            }
+                        ]
+                    }
+                ],
+                "questionIds": "675,674,672,671,670",
+                "category": 2403
+            }
+        ],
+        "source": "440106",
+        "pageType": "shoushi",
+        "category": 24
+    },
+    "tianqi": {
+        "videoDate": {
+            "vipPublicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/dd9bd2fe29c64004aab6f0a81cd3bba7.1080.mp4",
+            "publicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/video/6352e810248648df8fa4bea69851fe25.mp4",
+            "poster": "https://t3.58cdn.com.cn/brandads/jxedt/back/n_v22cd9a3484db44da9a874e746b71c4293_0f2c567f97d49c70.png",
+            "endButtonText": "解锁特殊天气题完整技巧"
+        },
+        "pointData": [
+            {
+                "title": "特殊天气[驾驶速度]",
+                "fquestions": [
+                    {
+                        "subTitle": "1.普通道路最高车速不超过[30公里/小时]",
+                        "quesItem": []
+                    },
+                    {
+                        "subTitle": "2.高速公路行驶原则[261/145/52离]",
+                        "quesItem": [
+                            "【261:】能见度低于《200》米,最高车速不得超过《60公里/小时》,车距保持《100米》以上",
+                            "【145:】能见度低于《100》米,最高车速不得超过《40公里/小时》,车距保持《50米》以上",
+                            "【52离:】能见度低于《50》米,最高车速不得超过《20公里/小时》,尽快《驶离》高速公路"
+                        ]
+                    }
+                ],
+                "questionIds": "33876,33869,33821,33457,26538,13481,33642,193765,7805,7787,7786,7747,220,219,218,103,99,98,92",
+                "category": 2301
+            },
+            {
+                "title": "特殊天气[灯光使用]",
+                "fquestions": [
+                    {
+                        "subTitle": "1.能见度低[开近光灯],不开远光灯",
+                        "quesItem": []
+                    },
+                    {
+                        "subTitle": "2.雾天/沙尘开[雾灯]和[危险报警闪光灯]",
+                        "quesItem": []
+                    },
+                    {
+                        "subTitle": "3.临时停车开[危险报警闪光灯]",
+                        "quesItem": []
+                    }
+                ],
+                "questionIds": "13541,750,749,80,78,2553,71,70,69",
+                "category": 2302
+            },
+            {
+                "title": "特殊天气[正确驾驶行为]",
+                "fquestions": [
+                    {
+                        "subTitle": "1.特殊天气降低车速,保持车距",
+                        "quesItem": []
+                    },
+                    {
+                        "subTitle": "2.避免紧急制动/猛打方向,易引发事故",
+                        "quesItem": []
+                    },
+                    {
+                        "subTitle": "3.能见度过低/无法看清时要[停车]",
+                        "quesItem": []
+                    }
+                ],
+                "questionIds": "28937,33823,13480,2555,849,803,753,7735,91",
+                "category": 2303
+            },
+            {
+                "title": "特殊天气[行车注意事项]",
+                "fquestions": [
+                    {
+                        "subTitle": "1.冰雪天:[制动变差],制动距离延长;爬坡时后车需[停车]等待;路面反光[易目眩]。",
+                        "quesItem": []
+                    },
+                    {
+                        "subTitle": "2.雾天:能见度低,[多鸣喇叭];高速发生事故站到防护栏以外",
+                        "quesItem": []
+                    },
+                    {
+                        "subTitle": "3.雨天:路面湿滑,视线受阻,要用“雨刮器”",
+                        "quesItem": []
+                    }
+                ],
+                "questionIds": "847,2554,2541",
+                "category": 2304
+            }
+        ],
+        "source": "440105",
+        "pageType": "tianqi",
+        "category": 23
+    },
+    "suidao": {
+        "videoDate": {
+            "vipPublicityMediumUrl": "https://wos.58cdn.com.cn/XyVuTsRqXyf/videotransform/eac099e59ad74d2793a64f9007d05de1.1080.mp4",
+            "publicityMediumUrl": "",
+            "poster": "https://t4.58cdn.com.cn/brandads/jxedt/back/n_v2fb27604d99c34bc0ab7976e8593c8785_015910377b9a4986.png",
+            "endButtonText": "解锁隧道题完整技巧"
+        },
+        "pointData": [
+            {
+                "showType": "1",
+                "titleDayUrl": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/tunnel/before_left_rights.png",
+                "questions": [
+                    {
+                        "subTitle": "开启近光灯,照明不足鸣喇叭",
+                        "questionItem": [],
+                        "questionIds": "34053,1686,2179,13591,28130,2054,24577,34045"
+                    },
+                    {
+                        "subTitle": "降低/控制车速",
+                        "questionItem": [],
+                        "questionIds": "2197,16748,2053,33435,34042,34037"
+                    },
+                    {
+                        "subTitle": "50米内不可停车",
+                        "questionItem": [],
+                        "questionIds": "7832"
+                    }
+                ],
+                "category": 2201
+            },
+            {
+                "showType": "1",
+                "titleDayUrl": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/tunnel/within_left_rights.png",
+                "questions": [
+                    {
+                        "subTitle": "发生火灾",
+                        "questionItem": [
+                            "停车熄火,开启报警闪光灯,留下钥匙,初期灭火器灭火,无法灭火弃车逃生",
+                            "无法开车门可用尖利物体敲碎车窗逃生",
+                            "用湿毛巾捂住口鼻,向烟雾流相反方向或按照指示方向逃离",
+                            "走人行横洞/人行横道",
+                            "若视线不清,可以用手机手电筒照明",
+                            "打电话报警求助",
+                            "运营车辆驾驶人“先人后己”原则"
+                        ],
+                        "questionIds": "24435,24583,27162,24440,24578,24759,34038,34043,34047,34049,34051,34052,34040,34048"
+                    },
+                    {
+                        "subTitle": "灯光",
+                        "questionItem": [
+                            "隧道内行驶开启近光灯",
+                            "发生事故/故障要开启危险报警闪光灯、设警告标志,离开车辆并报警"
+                        ],
+                        "questionIds": "24437,34056,34054,2055,33442,33439,24585"
+                    },
+                    {
+                        "subTitle": "靠右/控制车速/保持车距",
+                        "questionItem": [],
+                        "questionIds": "2046,26735,33444,24579,24581,27155,24434,33498,24587"
+                    },
+                    {
+                        "subTitle": "禁止停车、超车、倒车、调头、逆行",
+                        "questionItem": [],
+                        "questionIds": "1680,2685,28941,7837,7886,7956,13933,24580,33433,34055,33449,2048,34046,24582"
+                    },
+                    {
+                        "subTitle": "环境不好/身体不适均会影响行车安全",
+                        "questionItem": [],
+                        "questionIds": "26513,34050,24756,34041,34039"
+                    }
+                ],
+                "category": 2202
+            },
+            {
+                "showType": "1",
+                "titleDayUrl": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/tunnel/out_left_rights.png",
+                "questions": [
+                    {
+                        "subTitle": "出隧道要控制车速、保持车距,不得紧急制动",
+                        "questionItem": [],
+                        "questionIds": "7957,26663,2049,13583,24586,26521"
+                    },
+                    {
+                        "subTitle": "横风会发生偏移,握稳方向盘",
+                        "questionItem": [],
+                        "questionIds": "2198,33443,2173"
+                    }
+                ],
+                "category": 2203
+            },
+            {
+                "showType": "1",
+                "imageShow": true,
+                "titleDayUrl": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/tunnel/sign_left_rights.png",
+                "questionIds": "1844,1806,1828,24571,26822,34044",
+                "questions": [
+                    {
+                        "subTitle": "限制高度3.5米",
+                        "img": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/tunnel/1.png"
+                    },
+                    {
+                        "subTitle": "注意横风",
+                        "img": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/tunnel/2.png"
+                    },
+                    {
+                        "subTitle": "前方隧道",
+                        "img": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/tunnel/3.png"
+                    },
+                    {
+                        "subTitle": "进入隧道开启前照灯",
+                        "img": "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/tunnel/4.png"
+                    }
+                ],
+                "category": 2204
+            }
+        ],
+        "source": "440098",
+        "pageType": "suidao",
+        "category": 22
+    },
+    "jiashizheng": {
+        "pointData": [
+            {
+                "title": "申领驾驶证",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/shenling_img1.jpg",
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/shenling_img2.jpg"
+                    ]
+                },
+                "questionIds": "15,33629,33578,33868,33858,256,27098,318,316,33733,33625,33635,255,33377,33748,33738,33740,33863,248,252,251,247",
+                "category": 2901
+            },
+            {
+                "title": "不得申领驾驶证",
+                "btnBgcColor": "#fff",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/budeshenling_img.png"
+                    ],
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.精神性疾病/红绿色盲,不得申请"
+                        },
+                        {
+                            "subTitle": "2.超员构成犯罪被吊销未满5年,不得申请"
+                        },
+                        {
+                            "subTitle": "3.假1骗3毒3逃终生",
+                            "quesItem": [
+                                "假1:虚假材料/考试舞弊,1年内不得申请",
+                                "骗3:欺骗/贿赂等不正当手段,3年内不得申请",
+                                "毒3:吸食注射毒品,3年内不得申请",
+                                "逃终生:交通事故后逃逸构成犯罪,终生不得申请"
+                            ]
+                        }
+                    ]
+                },
+                "questionIds": "7726,7810,7716,31,22773,33855,36,7788,33458,319,33695,8,3,7791,320,29297,317,7718,14,33885,269,270,7705,7748,338,7727,7794,33615,27125,7823,7824,7719",
+                "category": 2902
+            },
+            {
+                "title": "审验驾驶证",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.期满换证需要审验"
+                        },
+                        {
+                            "subTitle": "2.只审验证,不验车"
+                        },
+                        {
+                            "subTitle": "3.大型客/货车每年提交身体证明"
+                        },
+                        {
+                            "subTitle": "4.70周岁以上,要进行记忆/判断/反应测试"
+                        },
+                        {
+                            "subTitle": "5.70周岁以上,每年一次身体检查,是否有妨碍安全驾驶的疾病"
+                        }
+                    ]
+                },
+                "questionIds": "7757,33741,7828,332,7756,27103,333,7803,7722,328",
+                "category": 2903
+            },
+            {
+                "title": "补发/换领证件",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/huanfa_img.png"
+                    ]
+                },
+                "questionIds": "7702,7701,322,33471,7681,7766,365,364,267,266,33454,27136,263,26512,7825,7782",
+                "category": 2904
+            },
+            {
+                "title": "注销驾驶证",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.涉毒/服用精神药品"
+                        },
+                        {
+                            "subTitle": "2.驾驶拼装/报废车辆上路"
+                        },
+                        {
+                            "subTitle": "3.将车交给驾驶证被吊销人员驾驶"
+                        },
+                        {
+                            "subTitle": "4.实习期内记满12分"
+                        },
+                        {
+                            "subTitle": "5.驾驶证有效期超过一年以上未换证"
+                        }
+                    ]
+                },
+                "questionIds": "27168,28131,22,21,20,7703,7721,337,265,7829,264,35",
+                "category": 2905
+            },
+            {
+                "title": "驾驶证考试",
+                "btnBgcColor": "#fff",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/kaoshi_img1.png",
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/kaoshi_img2.png"
+                    ]
+                },
+                "questionIds": "29303,33510,33678,33680,33805,33684,33652,33711,258,29302,257,260,261,262",
+                "category": 2906
+            },
+            {
+                "title": "实习期",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.实习期12个月"
+                        },
+                        {
+                            "subTitle": "2.上路需粘贴实习标志"
+                        },
+                        {
+                            "subTitle": "3.不得牵引挂车"
+                        },
+                        {
+                            "subTitle": "4.不得单独上高速,需持证3年以上驾驶人陪同"
+                        },
+                        {
+                            "subTitle": "5.不得接受交通安全教育扣减分"
+                        }
+                    ]
+                },
+                "questionIds": "27159,193764,33691,33631,7755,13483,33683,335,336,13,24270,334",
+                "category": 2907
+            },
+            {
+                "title": "机动车登记",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.尚未登记时,需要临时号牌"
+                        },
+                        {
+                            "subTitle": "2.领新号牌后,旧号牌作废"
+                        },
+                        {
+                            "subTitle": "3.抵押/质押期间机动车不可转让"
+                        },
+                        {
+                            "subTitle": "4.机动车转让申请前要处理违章"
+                        },
+                        {
+                            "subTitle": "5.改车身颜色要登记;加装防撞不登记"
+                        },
+                        {
+                            "subTitle": "6.报废车要申请注销登记,不能办理注册登记"
+                        },
+                        {
+                            "subTitle": "7.查封扣押/盗抢/型号不符不予办理登记"
+                        }
+                    ]
+                },
+                "questionIds": "33709,33698,33670,363,7704,7682,7784,362,7804,7746,33732,33843,33730,7797,268",
+                "category": 2908
+            }
+        ],
+        "source": "440111",
+        "pageType": "jiashizheng",
+        "category": 29
+    },
+    "anquanchangshi": {
+        "pointData": [
+            {
+                "title": "上路前安全检查",
+                "btnBgcColor": "#fff",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.检查车辆安全技术性能"
+                        },
+                        {
+                            "subTitle": "2.观察周围,确认安全再上车"
+                        },
+                        {
+                            "subTitle": "3.不放干扰驾驶人视线的物品"
+                        },
+                        {
+                            "subTitle": "4.车门关好再上路"
+                        }
+                    ]
+                },
+                "questionIds": "13498,13497,241,238,708,33416,242,7760,24",
+                "category": 3001
+            },
+            {
+                "title": "安全配置",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/anquanchangshi/anquanpeizhi.png"
+                    ]
+                },
+                "questionIds": "33737,33694,33660,971,33418,970,969,967,966,965,936,963,973,972,7732,961,960,13534,178,964,181,180,179",
+                "category": 3002
+            },
+            {
+                "title": "驾驶中",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.驾车时任何其他事情都不可以做!"
+                        },
+                        {
+                            "subTitle": "2.驾驶[420原则](连续4小时,休息20分钟)"
+                        },
+                        {
+                            "subTitle": "3.夜间能见度低/视距变短,不利于观察"
+                        }
+                    ]
+                },
+                "questionIds": "27170,830,33742,13494,245,33538,13492,7677,243",
+                "category": 3003
+            },
+            {
+                "title": "停车",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/anquanchangshi/tingche.png"
+                    ]
+                },
+                "questionIds": "163,33989,13502,13501,13504,196,195,203,204,197,13503,200,29356,33494,13500,7710,272,201,199,194,164,22770,205,783,198,193,748",
+                "category": 3004
+            },
+            {
+                "title": "发生故障",
+                "btnBgcColor": "#fff",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/anquanchangshi/fashengguzhang.png"
+                    ]
+                },
+                "questionIds": "7772,33398,29319,28938,33624,228,186,33880,13489,7687,231,33381,33412,33525,33844,788,229,226,33893,33874,33873,182,33703,227,33465,230,183,188,13553,2551,33409,13487,13488,7799,33834,33407,13490,185,184,7688,13485,33557,7736",
+                "category": 3005
+            },
+            {
+                "title": "紧急避险",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.气压过低会爆胎"
+                        },
+                        {
+                            "subTitle": "2.爆胎别紧急制动,要握紧方向盘/轻踏制动"
+                        },
+                        {
+                            "subTitle": "3.报废/拼装不可上路"
+                        }
+                    ]
+                },
+                "questionIds": "806,33414,13597,27,7790,26,25",
+                "category": 3006
+            },
+            {
+                "title": "事故处理",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/anquanchangshi/fashengshigu.png"
+                    ]
+                },
+                "questionIds": "33667,697,2,271,9,5,4,1,7691,7800,13526,13525,7765,7764,7731,33463,7680,7700,7690,26448,7754,696,13476,13474,308,33544,7729,24561,311,7781,310,13475,7821,309,235,313,234,233,33686,13599,7773,26743,13598,13600,7822,7802,7739,7717,7689,312,232,187",
+                "category": 3007
+            }
+        ],
+        "source": "440112",
+        "pageType": "anquanchangshi",
+        "category": 30
+    },
+    "dengguang": {
+        "pointData": [
+            {
+                "title": "普通道路限速",
+                "btnBgcColor": "#fff",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/dengguang/putongImg.png"
+                    ],
+                    "putongNoRights": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/dengguang/putongImg_noRights.png"
+                    ]
+                },
+                "questionIds": "100,65,85,207,208,211,13542,2603,86,87,101,102,2562,13603,27154,28103,24274,88,89,33619,33797",
+                "category": 3101
+            },
+            {
+                "title": "高速道路限速",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/dengguang/gaosuImg2.png"
+                    ]
+                },
+                "questionIds": "33981,33870,33506,28127,13482,13479,2602,2557,28101,809,33872,213,33892,2601,2600,2598,791,210,2599,209,808,786,212",
+                "category": 3102
+            },
+            {
+                "title": "特殊道路限速",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/dengguang/teshuImg.png"
+                    ]
+                },
+                "questionIds": "90,95,97,104,94,96,105,93,2597,33987,796",
+                "category": 3103
+            },
+            {
+                "title": "5种灯光",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/dengguang/wuzhongImg.png"
+                    ]
+                },
+                "questionIds": "26846,26446,26443,2547,33460,13554,902,225,215,22742,7774,68,75,33967,756,27142,33421,214,13532,2576,2545,2543,33455,7775,76,33988,33585,33581,7693,121,7695,716,67,2552,2542,833,119,82,81,72,835,2546,838,7812,7692,2604,130,135,132,33979,13533,7740",
+                "category": 3104
+            }
+        ],
+        "source": "440113",
+        "pageType": "dengguang",
+        "category": 31
+    },
+    "tongxing": {
+        "pointData": [
+            {
+                "title": "通行原则常识",
+                "btnBgcColor": "#fff",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.遇拥堵时依次等候行驶"
+                        },
+                        {
+                            "subTitle": "2.与前车保持安全距离"
+                        },
+                        {
+                            "subTitle": "3.按规定速度行驶"
+                        },
+                        {
+                            "subTitle": "4.减少车辆并行时间"
+                        }
+                    ]
+                },
+                "questionIds": "24556,2611,804,733,156,154,33878,720,746,2608,24552,26742,26848,106,2592,712,33974,155,141,33420,33491,33865,33623,13602,7742,22756,2613,33560,29313,33986,2567,33978,705,704,699,160,159,158,157",
+                "category": 3201
+            },
+            {
+                "title": "走哪条车道?",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.按规定车道行驶,红叉禁止行驶"
+                        },
+                        {
+                            "subTitle": "2.专用车道规定时间只能规定车辆通行"
+                        },
+                        {
+                            "subTitle": "3.非紧急不占用应急车道(路肩)"
+                        },
+                        {
+                            "subTitle": "4.实行分道通行可提高通行效率"
+                        },
+                        {
+                            "subTitle": "5.没划车道,机动车在中间通行,会车靠右"
+                        },
+                        {
+                            "subTitle": "6.错过路口要继续前行"
+                        }
+                    ]
+                },
+                "questionIds": "7813,7749,7709,179905,33555,33552,13613,2564,2561,785,781,53,24554,33992,13477,7780,787,131,29370,33627,13484,2558,33637,33842,33413,802,797,790,33835,60,33994,29312,22703,7741,2560,2559,54,24557,13612,138,381,22689,22723,379,380",
+                "category": 3202
+            },
+            {
+                "title": "谁先行?",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.转弯让直行"
+                        },
+                        {
+                            "subTitle": "2.同样直行让右方来车先行"
+                        },
+                        {
+                            "subTitle": "3.右转让左转"
+                        },
+                        {
+                            "subTitle": "4.辅路让主路"
+                        },
+                        {
+                            "subTitle": "5.有障碍的让无障碍的先行"
+                        },
+                        {
+                            "subTitle": "6.不靠山体的车先行"
+                        },
+                        {
+                            "subTitle": "7.上坡先行/还没上坡要让行"
+                        }
+                    ]
+                },
+                "questionIds": "134,33419,13529,815,812,129,2607,133,128,22757,2606,153,142,2574,33993,7751,7777,143,22753,7778,2620,2573,2572,373,151",
+                "category": 3203
+            },
+            {
+                "title": "什么情况要让行?",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.遇行人/非机动车"
+                        },
+                        {
+                            "subTitle": "2.遇执行任务的车"
+                        },
+                        {
+                            "subTitle": "3.遇抢行的车"
+                        }
+                    ]
+                },
+                "questionIds": "27172,7712,695,689,739,780,2612,754,747,698,7769,7684,7685,7770,7734,7686,28932,27169,22771,7798,2569,740,191,190,189,33641,33633,721,779,775,774,773,13611,22754,2615,2571,2570,761,737,33520,27152,22750,13606,13601,13493,7715,2619,2617,777,170,168,124,725",
+                "category": 3204
+            },
+            {
+                "title": "注意观察/减速慢行",
+                "btnBgcColor": "#fff",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.通过人行横道/路口/急弯"
+                        },
+                        {
+                            "subTitle": "2.倒车/掉头/转弯"
+                        },
+                        {
+                            "subTitle": "3.会车要减速靠右"
+                        },
+                        {
+                            "subTitle": "4.驶入/驶离高速公路"
+                        }
+                    ]
+                },
+                "questionIds": "26679,25891,7815,776,764,726,800,221,24553,2556,7708,2610,2609,33474,33828,743,7697,7733,137,73,782,33895,2627,2548,148,147,145,144,140,136,771,7698,7750,7809,2566,752,751,723,741,22683,2618",
+                "category": 3205
+            },
+            {
+                "title": "超车/变道",
+                "questions": {
+                    "images": [
+                        "https://t1-1305573081.file.myqcloud.com/jsjp/json-img/tongxing/chaoche.png"
+                    ]
+                },
+                "questionIds": "7817,186505,33556,33508,28132,2635,2636,2581,2578,2596,801,755,7694,2577,799,27146,7771,2579,2575,2580,760,757,59,161,127,13609,2588,118,117,116,115,114,113,112,7808,33490,13610,111,110,107,224,222,33976,24555,7696,7776,33971,33960,711,736,2593,7796,702,765,7811,2584,2587,701,108,2595,730,729,607,2586,109,2594,7679,728,66,122,2582,2589,2591,2590,722",
+                "category": 3206
+            },
+            {
+                "title": "特殊路段",
+                "questions": {
+                    "quesTexts": [
+                        {
+                            "subTitle": "1.特殊路段不得倒车/停车/掉头"
+                        },
+                        {
+                            "subTitle": "2.下坡不得滑行"
+                        },
+                        {
+                            "subTitle": "3.进入弯道要减速/鸣喇叭/靠右行"
+                        },
+                        {
+                            "subTitle": "4.涉水/无人看守的铁路口要1停2看3低速通过"
+                        }
+                    ]
+                },
+                "questionIds": "33890,29352,28107,393,33612,33492,33470,27148,33539,33404,27116,26844,795,793,176,7779,2628,2630,7699,2634,13531,7763,13495,7795,7678,244,239,83,2544,819,822,2629,2632,126,22682,767,22681,772,13528,735,734,150,146,33559,7752,7819,7818,2623,2622,7713,2621,707,706,703,167,166,165",
+                "category": 3207
+            }
+        ],
+        "source": "440114",
+        "pageType": "tongxing",
+        "category": 32
+    }
+}