| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470 |
- //
- // MerchantEnrollViewController.m
- // BuguLive
- //
- // Created by qitewei on 2025/8/11.
- // Copyright © 2025 xfg. All rights reserved.
- //
- #import "MerchantEnrollViewController.h"
- #import "MerchantEnrollGuideView.h"
- #import "MerchantEnrollCheckListView.h"
- #import "MerchantStoreInfoView.h"
- #import "MerchantBusinessLicenseView.h"
- #import "MerchantLegalInfoView.h"
- #import "MerchantBankInfoView.h"
- #import "MerchantAdminSetupView.h"
- #import "MerchantPaymentView.h"
- #import "MerchantEnrollResultView.h"
- #import "NavigationBarView.h"
- #import "MerchantBaseEnrollContentView.h"
- #import "UIButton+Layout.h"
- @interface MerchantEnrollViewController ()<JXCategoryViewDelegate, JXCategoryListContainerViewDelegate, MerchantEnrollContentViewDelegate>
- @property (nonatomic, assign) MerchantEnrollStep currentStep;
- @property (nonatomic, strong) NavigationBarView *navBar;
- @property (nonatomic, strong) UIImageView *bgImageView;
- @property (nonatomic, strong) UILabel *titleLabel;
- @property (nonatomic, strong) UIStackView *stepsStackView;
- @property (nonatomic, strong) UIView *step1View;
- @property (nonatomic, strong) UIView *step2View;
- @property (nonatomic, strong) UIView *step3View;
- @property (nonatomic, strong) UIImageView *line1ImageView;
- @property (nonatomic, strong) UIImageView *line2ImageView;
- @property (nonatomic, strong) NSMutableArray<UIButton *> *buttons;
- @property (nonatomic, strong) JXCategoryTitleView *categoryView;
- @property (nonatomic, strong) JXCategoryListContainerView *containerView;
- @property (nonatomic, copy) NSArray *list;
- @property (nonatomic, strong, nullable) MerchantEnrollGuideView *guideView;
- @property (nonatomic, strong, nullable) MerchantEnrollCheckListView *checkListView;
- @property (nonatomic, strong, nullable) MerchantEnrollResultView *resultView;
- @end
- @implementation MerchantEnrollViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- self.view.backgroundColor = [UIColor whiteColor];
- [IQKeyboardManager sharedManager].enable = YES;
- [IQKeyboardManager sharedManager].enableAutoToolbar = YES;
- [self setupNavigationBar];
- [self setupStepsUI];
- [self showCurrentStep];
- }
- - (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- self.navigationController.navigationBar.hidden = YES;
- }
- - (void)viewWillDisappear:(BOOL)animated {
- [super viewWillDisappear:animated];
- self.navigationController.navigationBar.hidden = NO;
- }
- #pragma mark - UI Setup
- - (void)setupNavigationBar {
- self.title = ASLocalizedString(@"商家入驻");
- [self.view addSubview:self.bgImageView];
- [self.view addSubview:self.navBar];
- self.navBar.titleLabel.text = self.title;
-
- [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.top.mas_offset(0);
- make.height.mas_equalTo(self.bgImageView.height);
- }];
-
- [self.navBar mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.right.left.mas_offset(0);
- make.height.mas_equalTo(self.navBar.height);
- }];
-
- }
- #pragma mark - Steps UI Setup
- - (void)setupStepsUI {
- [self.view addSubview:self.categoryView];
- [self.view addSubview:self.stepsStackView];
- [self.view addSubview:self.containerView];
- // 创建步骤视图
- [self.stepsStackView addArrangedSubview:self.step1View];
- [self.stepsStackView addArrangedSubview:self.step2View];
- [self.stepsStackView addArrangedSubview:self.step3View];
-
- [self.view addSubview:self.line1ImageView];
- [self.view addSubview:self.line2ImageView];
-
- // 设置步骤1(选中状态)
- [self setupStepView:self.step1View withNumber:@"1" title:ASLocalizedString(@"提交材料") isSelected:YES];
-
- // 设置步骤2(未选中状态)
- [self setupStepView:self.step2View withNumber:@"2" title:ASLocalizedString(@"平台审核") isSelected:NO];
-
- // 设置步骤3(未选中状态)
- [self setupStepView:self.step3View withNumber:@"3" title:ASLocalizedString(@"完成入驻") isSelected:NO];
-
- [self.stepsStackView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.navBar.mas_bottom).offset(kRealValue(20));
- make.centerX.mas_offset(0);
- make.left.right.mas_offset(0);
- make.height.mas_equalTo(kRealValue(80));
- }];
-
- [self.categoryView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.edges.mas_equalTo(self.stepsStackView);
- }];
-
- [self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.bottom.mas_offset(0);
- make.top.equalTo(self.stepsStackView.mas_bottom);
- }];
-
- [self.line1ImageView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.size.mas_equalTo(CGSizeMake(kRealValue(70), kRealValue(8)));
- make.left.mas_offset(kRealValue(90));
- make.centerY.equalTo(self.stepsStackView).mas_offset(-kRealValue(20));
- }];
-
- [self.line2ImageView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.size.mas_equalTo(CGSizeMake(kRealValue(70), kRealValue(8)));
- make.right.mas_offset(kRealValue(-90));
- make.centerY.equalTo(self.line1ImageView);
- }];
- }
- - (void)setupStepView:(UIView *)stepView withNumber:(NSString *)number title:(NSString *)title isSelected:(BOOL)isSelected {
-
- NSString *imageName = [NSString stringWithFormat:@"store_step_%@", number];
- NSString *selImageName = [NSString stringWithFormat:@"store_step_%@_sel", number];
- UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
- [button setTitle:title forState:UIControlStateNormal];
- button.titleLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightMedium];
- [button setTitleColor:[UIColor colorWithHexString:@"#777777"] forState:UIControlStateNormal];
- [button setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
- [button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
- [button setImage:[UIImage imageNamed:selImageName] forState:UIControlStateSelected];
- button.selected = isSelected;
- [button layoutImageTopSpace:3];
-
- // 添加视图
- [stepView addSubview:button];
- [button mas_makeConstraints:^(MASConstraintMaker *make) {
- make.edges.mas_offset(0);
- }];
-
- button.tag = [number integerValue];
- [self.buttons addObject:button];
- }
- - (void)showCurrentStep {
-
- if (self.guideView) {
- [self.guideView removeFromSuperview];
- self.guideView = nil;
- }
-
- if (self.checkListView) {
- [self.checkListView removeFromSuperview];
- self.guideView = nil;
- }
-
-
- if (self.currentStep <= MerchantEnrollStepCheckList) {
- self.stepsStackView.hidden = YES;
- self.containerView.hidden = YES;
- self.line1ImageView.hidden = YES;
- self.line2ImageView.hidden = YES;
-
- MerchantBaseEnrollContentView *contentView;
- switch (self.currentStep) {
- case MerchantEnrollStepGuide:
- self.guideView = [[MerchantEnrollGuideView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-self.bgImageView.height+kRealValue(60))];
- contentView = self.guideView;
- break;
- case MerchantEnrollStepCheckList:
- self.checkListView = [[MerchantEnrollCheckListView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-self.bgImageView.height+kRealValue(100))];
- contentView = self.checkListView;
- break;
- default:
- break;
- }
-
- if (contentView) {
- contentView.currentStep = self.currentStep;
- contentView.delegate = self;
- [self.view addSubview:contentView];
- [contentView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.size.mas_equalTo(contentView.size);
- make.bottom.inset(0);
- make.centerX.mas_offset(0);
- }];
- }
- } else {
- self.line1ImageView.hidden = NO;
- self.line2ImageView.hidden = NO;
- if (self.buttons.count > 1) {
- UIButton *second = self.buttons[1];
- second.selected = self.currentStep >= MerchantEnrollStepWatingForReview;
- }
-
- NSString *name = self.currentStep >= MerchantEnrollStepWatingForReview ? @"store_line_blue" : @"store_line_gray(1)";
- self.line2ImageView.image = [UIImage imageNamed:name];
-
- UIButton *last = self.buttons.lastObject;
- last.selected = self.currentStep >= MerchantEnrollStepComplete;
-
- if (self.currentStep > MerchantEnrollStepCheckList && self.currentStep < MerchantEnrollStepWatingForReview) {
- self.stepsStackView.hidden = NO;
- self.containerView.hidden = NO;
- [self.categoryView selectItemAtIndex:self.currentStep-2];
- } else {
- self.stepsStackView.hidden = NO;
- self.containerView.hidden = YES;
- switch (self.currentStep) {
- case MerchantEnrollStepWatingForReview:
- [self showEnrollResult:MerchantEnrollResultPending];
- break;
- case MerchantEnrollStepReviewFail:
- [self showEnrollResult:MerchantEnrollResultFailed];
- break;
- case MerchantEnrollStepComplete:
- [self showEnrollResult:MerchantEnrollResultSuccess];
- break;
- default:
- break;
- }
- }
- }
- }
- - (void)backButtonClicked:(UIButton *)sender {
- [self.navigationController popViewControllerAnimated:YES];
- }
- - (void)helpButtonClicked:(UIButton *)sender {
- // TODO: 显示帮助页面
- NSLog(@"Help button clicked");
- }
- - (void)showEnrollResult:(MerchantEnrollResultType)resultType {
- if (_resultView) {
- [_resultView removeFromSuperview];
- _resultView = nil;
- }
-
- // 添加结果页面
- MerchantEnrollResultView *resultView = [[MerchantEnrollResultView alloc]
- initWithResultType:resultType
- frame:CGRectMake(0, 0, SCREEN_WIDTH-24, SCREEN_HEIGHT-self.bgImageView.height+kRealValue(16))];
- [self.view addSubview:resultView];
- resultView.delegate = self;
- _resultView = resultView;
- [resultView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.size.mas_equalTo(resultView.size);
- make.bottom.inset(0);
- make.centerX.mas_offset(0);
- }];
- }
- - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
-
- }
- - (id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index {
- MerchantBaseEnrollContentView *contentView;
- MerchantEnrollStep step = index + 2;
- CGFloat height = SCREEN_HEIGHT-self.bgImageView.height+kRealValue(16);
- CGFloat width = SCREEN_WIDTH;
- CGRect frame = CGRectMake(0, 0, width, height);
- switch (step) {
- case MerchantEnrollStepStoreInfo:
- contentView = [[MerchantStoreInfoView alloc] initWithFrame:frame];
- break;
- case MerchantEnrollStepBusinessLicense:
- contentView = [[MerchantBusinessLicenseView alloc] initWithFrame:frame];
- break;
- case MerchantEnrollStepLegalInfo:
- contentView = [[MerchantLegalInfoView alloc] initWithFrame:frame];
- break;
- case MerchantEnrollStepBank:
- contentView = [[MerchantBankInfoView alloc] initWithFrame:frame];
- break;
- case MerchantEnrollStepSetAdmin:
- contentView = [[MerchantAdminSetupView alloc] initWithFrame:frame];
- break;
- case MerchantEnrollStepPay:
- contentView = [[MerchantPaymentView alloc] initWithFrame:frame];
- break;
-
- default:
- break;
- }
- contentView.delegate = self;
- contentView.currentStep = step;
- return contentView;
- }
- - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView {
- return self.list.count;
- }
- #pragma mark - MerchantEnrollContentViewDelegate
- - (void)onMerchantEnrollGotoNextButtonClick {
- self.currentStep++;
- [self showCurrentStep];
- }
- - (void)onMerchantEnrollResultNextButtonClick:(MerchantEnrollResultType)type {
- switch (type) {
- case MerchantEnrollResultPending:
- [self.navigationController popViewControllerAnimated:YES];
- break;
- case MerchantEnrollResultFailed:
- self.currentStep = MerchantEnrollStepStoreInfo;
- [self showCurrentStep];
- break;
- case MerchantEnrollResultSuccess:
- [self.navigationController popViewControllerAnimated:YES];
- break;
- }
- }
- - (NavigationBarView *)navBar {
- if (!_navBar) {
- _navBar = [[NavigationBarView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, STATUS_BAR_HEIGHT+44)];
- _navBar.backgroundColor = UIColor.clearColor;
- _navBar.contentView.backgroundColor = UIColor.clearColor;
-
- WeakSelf
- [_navBar setOnBackButtonkAction:^{
- [weakSelf.navigationController popViewControllerAnimated:YES];
- }];
-
- [_navBar setOnRightButtonkAction:^{
-
- }];
- }
- return _navBar;
- }
- - (UIImageView *)bgImageView {
- if (!_bgImageView) {
- _bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, kRealValue(200))];
- _bgImageView.contentMode = UIViewContentModeScaleAspectFill;
- _bgImageView.image = [UIImage imageNamed:@"store_header_bg"];
- }
- return _bgImageView;
- }
- - (UIStackView *)stepsStackView {
- if (!_stepsStackView) {
- UIStackView *stackView = [[UIStackView alloc] init];
- stackView.axis = UILayoutConstraintAxisHorizontal;
- stackView.distribution = UIStackViewDistributionFill;
- stackView.alignment = UIStackViewAlignmentCenter;
- stackView.spacing = 0;
- _stepsStackView = stackView;
- }
- return _stepsStackView;
- }
- - (UIView *)step1View {
- if (!_step1View) {
- _step1View = [[UIView alloc] init];
- }
- return _step1View;
- }
- - (UIView *)step2View {
- if (!_step2View) {
- _step2View = [[UIView alloc] init];
- }
- return _step2View;
- }
- - (UIView *)step3View {
- if (!_step3View) {
- _step3View = [[UIView alloc] init];
- }
- return _step3View;
- }
- - (UIImageView *)line1ImageView {
- if (!_line1ImageView) {
- _line1ImageView = [[UIImageView alloc] init];
- _line1ImageView.image = [UIImage imageNamed:@"store_line_blue"];
- _line1ImageView.contentMode = UIViewContentModeScaleAspectFit;
- }
- return _line1ImageView;
- }
- - (UIImageView *)line2ImageView {
- if (!_line2ImageView) {
- _line2ImageView = [[UIImageView alloc] init];
- _line2ImageView.image = [UIImage imageNamed:@"store_line_gray(1)"];
- _line2ImageView.contentMode = UIViewContentModeScaleAspectFit;
- }
- return _line2ImageView;
- }
- - (JXCategoryTitleView *)categoryView {
- if (!_categoryView) {
- NSMutableArray *array = [NSMutableArray array];
- for (NSNumber *num in self.list) {
- [array addObject:[NSString stringWithFormat:@"%ld", [num integerValue]]];
- }
- _categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectZero];
- _categoryView.delegate = self;
- _categoryView.titles = array;
- _categoryView.listContainer = self.containerView;
- _categoryView.hidden = YES;
- }
- return _categoryView;
- }
- - (JXCategoryListContainerView *)containerView {
- if (!_containerView) {
- _containerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_CollectionView delegate:self];
- }
- return _containerView;
- }
- - (NSArray *)list {
- if (!_list) {
- _list = @[
- @(MerchantEnrollStepStoreInfo),
- @(MerchantEnrollStepBusinessLicense),
- @(MerchantEnrollStepLegalInfo),
- @(MerchantEnrollStepBank),
- @(MerchantEnrollStepSetAdmin),
- @(MerchantEnrollStepPay)
- ];
- }
- return _list;
- }
- - (NSMutableArray<UIButton *> *)buttons {
- if (!_buttons) {
- _buttons = [NSMutableArray array];
- }
- return _buttons;
- }
- @end
|