Jelajahi Sumber

自发布职位和职位分享

15555599100 6 tahun lalu
induk
melakukan
be14f7cd11
100 mengubah file dengan 2447 tambahan dan 166 penghapusan
  1. 34 0
      .gitignore
  2. TEMPAT SAMPAH
      HappyJob/.DS_Store
  3. 1290 131
      HappyJob/HappyJob.xcodeproj/project.pbxproj
  4. TEMPAT SAMPAH
      HappyJob/HappyJob.xcworkspace/xcuserdata/Bob.xcuserdatad/UserInterfaceState.xcuserstate
  5. TEMPAT SAMPAH
      HappyJob/HappyJob/.DS_Store
  6. 22 0
      HappyJob/HappyJob/API/FBNetworking/FBAPIManagerDataBox.h
  7. 115 0
      HappyJob/HappyJob/API/FBNetworking/FBBaseAPIManager.h
  8. 249 0
      HappyJob/HappyJob/API/FBNetworking/FBBaseAPIManager.m
  9. 0 0
      HappyJob/HappyJob/API/FBNetworking/FBNetworkingConfig.h
  10. 0 0
      HappyJob/HappyJob/API/FBNetworking/FBNetworkingConfig.m
  11. 1 0
      HappyJob/HappyJob/AppDelegate.h
  12. 102 35
      HappyJob/HappyJob/AppDelegate.m
  13. 6 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/Contents.json
  14. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_certification.imageset/Contents.json
  15. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_certification.imageset/b_home_certification@2x.png
  16. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_certification.imageset/b_home_certification@3x.png
  17. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_delivery.imageset/Contents.json
  18. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_delivery.imageset/b_home_delivery@2x.png
  19. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_delivery.imageset/b_home_delivery@3x.png
  20. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_search.imageset/Contents.json
  21. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_search.imageset/b_home_search@2x.png
  22. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_search.imageset/b_home_search@3x.png
  23. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_set.imageset/Contents.json
  24. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_set.imageset/b_home_set@2x.png
  25. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_set.imageset/b_home_set@3x.png
  26. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_messag.imageset/Contents.json
  27. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_messag.imageset/b_messag@2x.png
  28. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_messag.imageset/b_messag@3x.png
  29. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_message.imageset/Contents.json
  30. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_message.imageset/b_message_message@2x.png
  31. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_message.imageset/b_message_message@3x.png
  32. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_nopass.imageset/Contents.json
  33. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_nopass.imageset/b_message_nopass@2x.png
  34. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_nopass.imageset/b_message_nopass@3x.png
  35. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_position.imageset/Contents.json
  36. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_position.imageset/b_message_position@2x.png
  37. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_position.imageset/b_message_position@3x.png
  38. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_resume.imageset/Contents.json
  39. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_resume.imageset/b_message_resume@2x.png
  40. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_resume.imageset/b_message_resume@3x.png
  41. 6 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/Contents.json
  42. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_enterprise_certification.imageset/Contents.json
  43. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_enterprise_certification.imageset/b_enterprise_certification@2x.png
  44. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_enterprise_certification.imageset/b_enterprise_certification@3x.png
  45. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_collection.imageset/Contents.json
  46. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_collection.imageset/b_my_collection@2x.png
  47. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_collection.imageset/b_my_collection@3x.png
  48. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_feedback.imageset/Contents.json
  49. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_feedback.imageset/b_my_feedback@2x.png
  50. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_feedback.imageset/b_my_feedback@3x.png
  51. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_right.imageset/Contents.json
  52. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_right.imageset/b_my_righ@3x.png
  53. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_right.imageset/b_my_right@2x.png
  54. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_set.imageset/Contents.json
  55. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_set.imageset/b_my_set@2x.png
  56. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_set.imageset/b_my_set@3x.png
  57. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_wallet.imageset/Contents.json
  58. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_wallet.imageset/b_my_wallet@2x.png
  59. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_wallet.imageset/b_my_wallet@3x.png
  60. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_ID.imageset/Contents.json
  61. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_ID.imageset/b_set_ID@2x.png
  62. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_ID.imageset/b_set_ID@3x.png
  63. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_clear.imageset/Contents.json
  64. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_clear.imageset/b_set_clear@2x.png
  65. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_clear.imageset/b_set_clear@3x.png
  66. 6 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/Contents.json
  67. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_certification.imageset/Contents.json
  68. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_certification.imageset/b_certification@2x.png
  69. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_certification.imageset/b_certification@3x.png
  70. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_blue.imageset/Contents.json
  71. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_blue.imageset/b_edit_blue@2x.png
  72. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_blue.imageset/b_edit_blue@3x.png
  73. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_gray.imageset/Contents.json
  74. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_gray.imageset/b_edit_gray@2x.png
  75. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_gray.imageset/b_edit_gray@3x.png
  76. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_blue.imageset/Contents.json
  77. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_blue.imageset/b_end_blue@2x.png
  78. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_blue.imageset/b_end_blue@3x.png
  79. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_gray.imageset/Contents.json
  80. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_gray.imageset/b_end_gray@2x.png
  81. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_gray.imageset/b_end_gray@3x.png
  82. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_invitation_company.imageset/Contents.json
  83. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_invitation_company.imageset/b_invitation_company@2x.png
  84. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_invitation_company.imageset/b_invitation_company@3x.png
  85. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_message_white.imageset/Contents.json
  86. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_message_white.imageset/b_message_white@2x.png
  87. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_message_white.imageset/b_message_white@3x.png
  88. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_address.imageset/Contents.json
  89. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_address.imageset/b_position_address@2x.png
  90. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_address.imageset/b_position_address@3x.png
  91. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allnoselect.imageset/Contents.json
  92. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allnoselect.imageset/b_position_allnoselect@2x.png
  93. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allnoselect.imageset/b_position_allnoselect@3x.png
  94. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allselect.imageset/Contents.json
  95. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allselect.imageset/b_position_allselect@2x.png
  96. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allselect.imageset/b_position_allselect@3x.png
  97. 22 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_auditnoselect.imageset/Contents.json
  98. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_auditnoselect.imageset/b_position_auditnoselect@2x.png
  99. TEMPAT SAMPAH
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_auditnoselect.imageset/b_position_auditnoselect@3x.png
  100. 0 0
      HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_auditselect.imageset/Contents.json

+ 34 - 0
.gitignore

@@ -0,0 +1,34 @@
+# Xcode
+#
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+
+# CocoaPods
+#
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
+#
+Pods/
+Podfile.lock
+
+# Carthage
+#
+# Add this line if you want to avoid checking in source code from Carthage dependencies.
+# Carthage/Checkouts
+
+Carthage/Build

TEMPAT SAMPAH
HappyJob/.DS_Store


File diff ditekan karena terlalu besar
+ 1290 - 131
HappyJob/HappyJob.xcodeproj/project.pbxproj


TEMPAT SAMPAH
HappyJob/HappyJob.xcworkspace/xcuserdata/Bob.xcuserdatad/UserInterfaceState.xcuserstate


TEMPAT SAMPAH
HappyJob/HappyJob/.DS_Store


+ 22 - 0
HappyJob/HappyJob/API/FBNetworking/FBAPIManagerDataBox.h

@@ -0,0 +1,22 @@
+//
+//  FBAPIManagerDataBox.h
+//  HappyJob
+//
+//  Created by Bob on 2019/3/29.
+//  Copyright © 2019 Bob. All rights reserved.
+//
+
+#ifndef FBAPIManagerDataBox_h
+#define FBAPIManagerDataBox_h
+
+@class FBBaseAPIManager;
+
+@protocol FBAPIManagerDataBox <NSObject>
+//协议 数据处理的
+
+@required//遵循此协议方法必须实现(协议中只有方法的声明没有方法的实现)
+- (id)manager:(FBBaseAPIManager *)manager boxingData:(NSDictionary *)data;
+
+@end
+
+#endif /* FBAPIManagerDataBox_h */

+ 115 - 0
HappyJob/HappyJob/API/FBNetworking/FBBaseAPIManager.h

@@ -0,0 +1,115 @@
+//
+//  FBBaseAPIManager.h
+//  HappyJob
+//
+//  Created by Bob on 2019/3/28.
+//  Copyright © 2019 Bob. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <YTKNetwork/YTKNetwork.h>
+#import "FBAPIManagerDataBox.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, FBAPIManagerErrorType) {
+    
+    FBAPIManagerErrorTypeDefault,         // 没有产生过API请求,这个是manager的默认状态。
+    FBAPIManagerErrorTypeSuccess,         // API请求成功且返回数据正确,此时manager的数据是可以直接拿来使用的。
+    FBAPIManagerErrorTypeNoContent,       // API请求成功但返回数据不正确。如果回调数据验证函数返回值为NO,manager的状态就会是这个。
+    FBAPIManagerErrorTypeNoError,         // 无错误errcode返回0,但是没有对data中的数据进行校验
+    FBAPIManagerErrorTypeParamsError,     // 参数错误,此时manager不会调用API,因为参数验证是在调用API之前做的。
+    FBAPIManagerErrorTypeTimedOut,        // 请求超时。requestTimeoutInterval设置的是20秒超时。
+    FBAPIManagerErrorTypeNoNetWork,       // 网络不通。在调用API之前会判断一下当前网络是否通畅,这个也是在调用API之前验证的,和上面超时的状态是有区别的。
+};
+
+typedef NS_ENUM(NSInteger, FBAPIManagerRequestType) {
+    
+    FBAPIManagerRequestTypePost,          //默认是Post请求
+    FBAPIManagerRequestTypeGet,
+};
+
+@class FBBaseAPIManager;
+@class FBUploadDataModel;
+
+@protocol FBAPIManagerProtocol <NSObject>
+
+@required
+/** 接口调用URL */
+- (NSString *)methodName;
+
+@optional
+/** 接口调用参数 */
+- (NSDictionary *)parameters;
+/** 接口请求方式 */
+- (FBAPIManagerRequestType)requestType;
+/** 上传数据 */
+- (NSArray<FBUploadDataModel *> *)uploadDataArray;
+/** 按时间缓存内容,如:3 分钟 = 180 秒 */
+- (NSInteger)cacheTime;
+
+@end
+
+@protocol FBAPIManagerDelegate <NSObject>
+
+@required
+- (void)managerCallAPIDidSuccess:(FBBaseAPIManager *)manager;
+- (void)managerCallAPIDidFailed:(FBBaseAPIManager *)manager;
+
+@end
+
+@protocol FBAPIManagerInterceptor <NSObject>
+
+@required
+- (BOOL)manager:(FBBaseAPIManager *)manager shouldStartCallAPIWithParams:(NSDictionary *_Nullable)params;;
+- (void)managerShouldFinishCallAPI:(FBBaseAPIManager *)manager;
+
+@end
+
+@protocol FBAPIManagerValidator <NSObject>
+
+@required
+/** 接口调用返回数据校验 */
+- (FBAPIManagerErrorType)manager:(FBBaseAPIManager *)manager validWithCallBackData:(NSDictionary *)data;
+
+/** 接口调用参数校验 */
+- (FBAPIManagerErrorType)manager:(FBBaseAPIManager *)manager validWithCallParamsData:(NSDictionary *)data;
+
+@end
+
+@protocol FBPageableAPIManager <NSObject>
+
+@property (nonatomic, assign) NSInteger pageSize;
+@property (nonatomic, assign, readonly) NSUInteger currentPageNumber;
+@property (nonatomic, assign, readonly) BOOL isFirstPage;//是否是第一页
+@property (nonatomic, assign, readonly) BOOL isLastPage;//是否是最后一页
+
+- (void)loadNextPage;
+
+@end
+
+@interface FBBaseAPIManager : YTKRequest
+
+@property (nonatomic, weak) id<FBAPIManagerDelegate> APIManagerDelegate;//结果
+@property (nonatomic, weak) id<FBAPIManagerInterceptor> APIManagerInterceptor;//指示
+@property (nonatomic, assign) FBAPIManagerErrorType errorType;
+@property (nonatomic, copy, readonly) NSString *errorMessage;
+
+- (id)fetchDataWithBox:(id<FBAPIManagerDataBox> _Nullable)box;
+
+@end
+
+@interface FBUploadDataModel : NSObject
+
+/**上传文件数据*/
+@property (nonatomic, copy) NSData *data;
+/**文件名,一定要带扩展名*/
+@property (nonatomic, copy) NSString *name;
+/**上传文件的参数名*/
+@property (nonatomic, copy) NSString *formKey;
+/**文件上传的类型,如:image/jpeg*/
+@property (nonatomic, copy) NSString *type;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 249 - 0
HappyJob/HappyJob/API/FBNetworking/FBBaseAPIManager.m

@@ -0,0 +1,249 @@
+//
+//  FBBaseAPIManager.m
+//  HappyJob
+//
+//  Created by Bob on 2019/3/28.
+//  Copyright © 2019 Bob. All rights reserved.
+//
+
+#import "FBBaseAPIManager.h"
+#import <AFNetworking/AFNetworking.h>
+
+@interface FBBaseAPIManager () <YTKRequestDelegate>
+
+@property (nonatomic, weak) NSObject<FBAPIManagerProtocol, FBAPIManagerValidator> *child;
+
+@property (nonatomic, strong, readwrite) id fetchedRawData;
+@property (nonatomic, copy, readwrite)   NSString *errorMessage;
+
+@end
+
+@implementation FBBaseAPIManager
+
+- (instancetype)init {
+    
+    if (self = [super init])
+    {
+        _fetchedRawData = nil;
+        self.delegate = self;
+        
+        if ([self conformsToProtocol:@protocol(FBAPIManagerProtocol)])
+        {
+            self.child = (id<FBAPIManagerProtocol, FBAPIManagerValidator>)self;
+        }
+        else
+        {
+            NSString *name = NSStringFromClass([self class]);
+            NSString *reason = @"没有实现父类的代理方法";
+            NSException *exception = [NSException exceptionWithName:name reason:reason userInfo:nil];
+            @throw exception;
+        }
+    }
+    return self;
+}
+
+- (id)fetchDataWithBox:(id<FBAPIManagerDataBox>)box {
+    
+    id resultData = nil;
+    if ([box respondsToSelector:@selector(manager:boxingData:)])
+    {
+        resultData = [box manager:self boxingData:self.fetchedRawData];
+    }
+    else
+    {
+        resultData = [self.fetchedRawData mutableCopy];
+    }
+    return resultData;
+}
+
+#pragma mark - YTKRequestDelegate
+
+- (void)requestFinished:(__kindof YTKBaseRequest *)request {
+    DDLogDebug(@"[%@: %@] = %@", [self requestUrl], [self requestArgument], request.responseObject);
+    
+    [self callingSuccessWithResponseObject:request.responseObject];
+}
+
+- (void)requestFailed:(__kindof YTKBaseRequest *)request {
+    DDLogDebug(@"[%@: %@] = error:%@", [self requestUrl], [self requestArgument], request.error);
+    
+    // 除了超时以外,所有错误都当成是无网络
+    FBAPIManagerErrorType errorType = FBAPIManagerErrorTypeNoNetWork;
+    if (request.error.code == NSURLErrorTimedOut)
+    {
+        errorType = FBAPIManagerErrorTypeTimedOut;
+    }
+    
+    [self callingFailedWithResponseObject:request.responseObject errorType:errorType];
+}
+
+#pragma mark - 重载父类方法
+
+- (void)start {
+    
+    NSDictionary *reformedParams = [self requestArgument];
+    if (reformedParams == nil)
+    {
+        reformedParams = @{};
+    }
+    if ([self shouldCallAPIWithParams:reformedParams])
+    {
+        FBAPIManagerErrorType errorType = [self.child manager:self validWithCallParamsData:reformedParams];//校验参数
+        if (errorType == FBAPIManagerErrorTypeParamsError)
+        {
+            DDLogDebug(@"参数校验失败:[%@: %@]", [self requestUrl], [self requestArgument]);
+            [self callingFailedWithResponseObject:nil errorType:FBAPIManagerErrorTypeParamsError];//参数失败处理
+        }
+        else
+        {
+            [super start];
+        }
+    }
+}
+
+- (NSString *)requestUrl {
+    
+    return [self.child methodName];
+}
+
+- (id)requestArgument {
+    
+    if ([self.child respondsToSelector:@selector(parameters)])
+    {
+        return [self.child parameters];
+    }
+    return nil;
+}
+
+- (YTKRequestMethod)requestMethod {
+    
+    if ([self.child respondsToSelector:@selector(requestType)])
+    {
+        if ([self.child requestType] == FBAPIManagerRequestTypeGet)
+        {
+            return YTKRequestMethodGET;
+        }
+    }
+    
+    return YTKRequestMethodPOST;
+}
+
+- (YTKRequestSerializerType)requestSerializerType {
+    
+    return YTKRequestSerializerTypeJSON;
+}
+
+- (NSTimeInterval)requestTimeoutInterval {
+    
+    return 20;
+}
+
+- (NSInteger)cacheTimeInSeconds {
+    
+    if ([self.child respondsToSelector:@selector(cacheTime)])
+    {
+        return [self.child cacheTime];
+    }
+    
+    return [super cacheTimeInSeconds];
+}
+
+- (AFConstructingBlock)constructingBodyBlock {
+    
+    if ([self.child respondsToSelector:@selector(uploadDataArray)])
+    {
+        NSArray *array = [self.child uploadDataArray];
+        if (array.count > 0)
+        {
+            return ^(id<AFMultipartFormData> formData) {
+                
+                for (FBUploadDataModel *model in array)
+                {
+                    NSData *data = model.data;
+                    NSString *name = model.name;
+                    NSString *formKey = model.formKey;
+                    NSString *type = model.type;
+                    [formData appendPartWithFileData:data name:formKey fileName:name mimeType:type];
+                }
+            };
+        }
+    }
+    
+    return nil;
+}
+
+#pragma mark - interceptor
+
+//只有返回YES才会继续调用API
+- (BOOL)shouldCallAPIWithParams:(NSDictionary *)params {
+    
+    if ([self.APIManagerInterceptor respondsToSelector:@selector(manager:shouldStartCallAPIWithParams:)])
+    {
+        return [self.APIManagerInterceptor manager:self shouldStartCallAPIWithParams:params];
+    }
+    else
+    {
+        return YES;
+    }
+}
+
+#pragma mark - private methods
+
+- (void)callingSuccessWithResponseObject:(id)responseObject {
+    
+    self.fetchedRawData = [responseObject copy];
+    
+    FBAPIManagerErrorType errorType = [self.child manager:self validWithCallBackData:responseObject];//错误类型
+    if (errorType == FBAPIManagerErrorTypeNoError)
+    {
+        self.errorType = errorType;
+        
+        if ([self.APIManagerInterceptor respondsToSelector:@selector(managerShouldFinishCallAPI:)])
+        {
+            [self.APIManagerInterceptor managerShouldFinishCallAPI:self];//结束指示器
+        }
+        
+        if ([self.APIManagerDelegate respondsToSelector:@selector(managerCallAPIDidSuccess:)])
+        {
+            [self.APIManagerDelegate managerCallAPIDidSuccess:self];//成功回调
+        }
+    }
+    else
+    {
+        [self callingFailedWithResponseObject:responseObject errorType:errorType];//处理失败的
+    }
+}
+
+- (void)callingFailedWithResponseObject:(id)responseObject errorType:(FBAPIManagerErrorType)errorType {
+    self.errorType = errorType;
+    
+    // 常规错误
+    if (errorType == FBAPIManagerErrorTypeNoNetWork)
+    {
+        self.errorMessage = @"无网络连接,请检查网络";
+    }
+    if (errorType == FBAPIManagerErrorTypeTimedOut)
+    {
+        self.errorMessage = @"请求超时";
+    }
+    if (errorType == FBAPIManagerErrorTypeParamsError)
+    {
+        self.errorMessage = @"参数有误";
+    }
+    
+    if ([self.APIManagerInterceptor respondsToSelector:@selector(managerShouldFinishCallAPI:)])
+    {
+        [self.APIManagerInterceptor managerShouldFinishCallAPI:self];//结束指示器
+    }
+    
+    if ([self.APIManagerDelegate respondsToSelector:@selector(managerCallAPIDidFailed:)])
+    {
+        [self.APIManagerDelegate managerCallAPIDidFailed:self];//失败回调
+    }
+}
+
+@end
+
+@implementation FBUploadDataModel
+
+@end

HappyJob/HappyJob/Components/FBKit/FBNetworking/FBNetworkingConfig.h → HappyJob/HappyJob/API/FBNetworking/FBNetworkingConfig.h


HappyJob/HappyJob/Components/FBKit/FBNetworking/FBNetworkingConfig.m → HappyJob/HappyJob/API/FBNetworking/FBNetworkingConfig.m


+ 1 - 0
HappyJob/HappyJob/AppDelegate.h

@@ -12,6 +12,7 @@
 
 @property (strong, nonatomic) UIWindow *window;
 
+- (void)switchTabBar;//切换
 
 @end
 

+ 102 - 35
HappyJob/HappyJob/AppDelegate.m

@@ -21,19 +21,30 @@
 #import <AMapFoundationKit/AMapFoundationKit.h>
 #import <Bugly/Bugly.h>
 
-@interface AppDelegate () <HJWelcomeViewDelegate>
+#import "BMainViewController.h"//自发布的
+#import "BReleaseJobsViewController.h"//发布工作
+#import "BReleaseViewController.h"
+
+@interface AppDelegate () <HJWelcomeViewDelegate,UITabBarControllerDelegate>
+
+@property (nonatomic, strong) BMainViewController *bTabBarC;
+@property (nonatomic, assign) int                 lastIndex;//tabBar选中的上一个的视图索引
+@property (nonatomic, strong) HJConfirmPanelViewController *confirmVC;//弹出页面
+
 
 @end
 
 @implementation AppDelegate
 
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    
+    [[HJAppUserType sharedInstance] loadUserType];
+    
     //配置Bugly
     [Bugly startWithAppId:kBuglyAppID];
     
     //配置广告数据
     [self setupAd];
-    
     // 高德地图
     [AMapServices sharedServices].apiKey = kGAODEAPIKey;
     
@@ -53,83 +64,119 @@
     
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
     self.window.backgroundColor = [UIColor whiteColor];
+    //引导页
     HJWelcomeViewController *welcomeViewController = [[HJWelcomeViewController alloc] init];
     welcomeViewController.delegate = self;
-    if (welcomeViewController.isShow) {
+    if (welcomeViewController.isShow)
+    {
         self.window.rootViewController = welcomeViewController;
-    } else {
+    }
+    else
+    {
         self.window.rootViewController = [self setupFirstViewController];
     }
     [self.window makeKeyAndVisible];
     
     return YES;
 }
+
 //iOS 9 之前用
 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
+    
     return [WXApi handleOpenURL:url delegate:[HJWeiXinAPIManager sharedManager]];
 }
 
 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
+    
     return [WXApi handleOpenURL:url delegate:[HJWeiXinAPIManager sharedManager]];
 }
 //iOS 9之后用
 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
+    
     return [WXApi handleOpenURL:url delegate:[HJWeiXinAPIManager sharedManager]];
 }
 
-- (void)applicationWillResignActive:(UIApplication *)application {
-    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
-    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
-}
-
-
-- (void)applicationDidEnterBackground:(UIApplication *)application {
-    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
-    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
-}
-
-
-- (void)applicationWillEnterForeground:(UIApplication *)application {
-    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
-}
-
-
-- (void)applicationDidBecomeActive:(UIApplication *)application {
-    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
-}
-
-
-- (void)applicationWillTerminate:(UIApplication *)application {
-    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
-}
-
 #pragma mark - HJWelcomeViewDelegate
 
 - (void)skipWelcomeView:(HJWelcomeViewController *)welcomeView {
+    
     self.window.rootViewController = [self setupFirstViewController];
 }
 
 #pragma mark - event response
 
 - (void)launchStartButtonClicked:(UIButton *)sender {
+    
     [XHLaunchAd removeAndAnimated:YES];
 }
 
 #pragma mark - private methods
 
 - (UIViewController *)setupFirstViewController {
+    
     NSString *userID = [HJUserInfoModel userInfo].userID;
-    if (userID != nil && ![userID isEqualToString:@""]) {
-        HJMainViewController *mainViewController = [[HJMainViewController alloc] init];
-        return mainViewController;
-    } else {
+    
+    if (userID != nil && ![userID isEqualToString:@""])
+    {  //c端
+        if (USERTYPE)
+        {
+            _bTabBarC = [[BMainViewController alloc]init];
+            _bTabBarC.delegate = self;
+            return _bTabBarC;
+        }
+        else
+        {//自发布
+            HJMainViewController *mainViewController = [[HJMainViewController alloc] init];
+            return mainViewController;
+        }
+    }
+    else
+    {
         HJLoginViewController *loginViewController = [[HJLoginViewController alloc] init];
         UINavigationController *loginNav = [[UINavigationController alloc] initWithRootViewController:loginViewController];
         return loginNav;
     }
+
 }
+- (void)switchTabBar {
+    
+    self.window.rootViewController = [self setupFirstViewController];
+    
+}
+#pragma mark - UITabBarControllerDelegate 代理
+- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
+{
+    if (_bTabBarC.tabBar.selectedItem.tag == 2 && [[HJCompanyInfoModel companyInfo].authenticationStatus integerValue] == 0)
+    {//取消tabBar的点击事件
+        return NO;
+    }
+   else
+   {
+       _lastIndex = (int)tabBarController.selectedIndex;
+       return YES;
+   }
 
+}
+- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
+{
+    if (tabBarController.selectedIndex == 2)
+    {
+        if ([[HJCompanyInfoModel companyInfo].authenticationStatus integerValue] == 3 || [[HJCompanyInfoModel companyInfo].authenticationStatus integerValue] == 2 || [[HJCompanyInfoModel companyInfo].authenticationStatus integerValue] == 1)
+        {
+            tabBarController.selectedIndex = _lastIndex ;
+            BReleaseJobsViewController *certification=[[BReleaseJobsViewController alloc]init];
+            UINavigationController *navi=[[UINavigationController alloc]initWithRootViewController:certification];
+            [self.window.rootViewController presentViewController:navi animated:YES completion:nil];
+        }
+        else
+        {
+            tabBarController.selectedIndex = _lastIndex ;
+        }
+    }
+}
+/* 配置启动页 */
 - (void)setupAd {
+    
     //设置你工程的启动页使用的是:LaunchImage 还是 LaunchScreen.storyboard(不设置默认:LaunchImage)
     [XHLaunchAd setLaunchSourceType:SourceTypeLaunchScreen];
     
@@ -147,11 +194,31 @@
     launchVersionLabel.textAlignment = NSTextAlignmentCenter;
     
     XHLaunchImageAdConfiguration *imageAdconfiguration = [XHLaunchImageAdConfiguration defaultConfiguration];
-    imageAdconfiguration.duration = 3;
+    imageAdconfiguration.duration = 1;
     imageAdconfiguration.subViews = @[launchVersionLabel, launchStartButton];
     imageAdconfiguration.skipButtonType = SkipTypeNone;
     imageAdconfiguration.showFinishAnimate = ShowFinishAnimateLite;
     [XHLaunchAd imageAdWithImageAdConfiguration:imageAdconfiguration delegate:self];
 }
+- (void)applicationWillResignActive:(UIApplication *)application {
+    
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+    
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+    
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+    
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
 
 @end

+ 6 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_certification.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_certification.imageset/b_home_certification@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_certification.imageset/b_home_certification@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_delivery.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_delivery.imageset/b_home_delivery@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_delivery.imageset/b_home_delivery@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_search.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_search.imageset/b_home_search@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_search.imageset/b_home_search@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_set.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_set.imageset/b_home_set@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_home_set.imageset/b_home_set@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_messag.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_messag.imageset/b_messag@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_messag.imageset/b_messag@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_message.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_message.imageset/b_message_message@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_message.imageset/b_message_message@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_nopass.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_nopass.imageset/b_message_nopass@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_nopass.imageset/b_message_nopass@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_position.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_position.imageset/b_message_position@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_position.imageset/b_message_position@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_resume.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_resume.imageset/b_message_resume@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMessageImage/b_message_resume.imageset/b_message_resume@3x.png


+ 6 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_enterprise_certification.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_enterprise_certification.imageset/b_enterprise_certification@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_enterprise_certification.imageset/b_enterprise_certification@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_collection.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_collection.imageset/b_my_collection@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_collection.imageset/b_my_collection@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_feedback.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_feedback.imageset/b_my_feedback@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_feedback.imageset/b_my_feedback@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_right.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_right.imageset/b_my_righ@3x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_right.imageset/b_my_right@2x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_set.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_set.imageset/b_my_set@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_set.imageset/b_my_set@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_wallet.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_wallet.imageset/b_my_wallet@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_my_wallet.imageset/b_my_wallet@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_ID.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_ID.imageset/b_set_ID@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_ID.imageset/b_set_ID@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_clear.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_clear.imageset/b_set_clear@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BMy/b_set_clear.imageset/b_set_clear@3x.png


+ 6 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_certification.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_certification.imageset/b_certification@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_certification.imageset/b_certification@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_blue.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_blue.imageset/b_edit_blue@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_blue.imageset/b_edit_blue@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_gray.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_gray.imageset/b_edit_gray@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_edit_gray.imageset/b_edit_gray@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_blue.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_blue.imageset/b_end_blue@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_blue.imageset/b_end_blue@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_gray.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_gray.imageset/b_end_gray@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_end_gray.imageset/b_end_gray@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_invitation_company.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_invitation_company.imageset/b_invitation_company@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_invitation_company.imageset/b_invitation_company@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_message_white.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_message_white.imageset/b_message_white@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_message_white.imageset/b_message_white@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_address.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_address.imageset/b_position_address@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_address.imageset/b_position_address@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allnoselect.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allnoselect.imageset/b_position_allnoselect@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allnoselect.imageset/b_position_allnoselect@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allselect.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allselect.imageset/b_position_allselect@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_allselect.imageset/b_position_allselect@3x.png


+ 22 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_auditnoselect.imageset/Contents.json

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

TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_auditnoselect.imageset/b_position_auditnoselect@2x.png


TEMPAT SAMPAH
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_auditnoselect.imageset/b_position_auditnoselect@3x.png


+ 0 - 0
HappyJob/HappyJob/Assets.xcassets/BImage/BPosition/b_position_auditselect.imageset/Contents.json


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini