4;; }; A69FFAD41E70047E0006FEE0 /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = "<group>"; wrapsLines = 1; }; A69FFAD51E70047E0006FEE0 /* HomeViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewModel.swift; sourceTree = "<group>"; wrapsLines = 1; }; A69FFAD61E70047E0006FEE0 /* HomePhotoRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomePhotoRepository.swift; sourceTree = "<group>"; }; A69FFAD71E70047E0006FEE0 /* ScanQRViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanQRViewController.swift; sourceTree = "<group>"; }; A69FFADA1E70047E0006FEE0 /* CommentCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommentCell.swift; sourceTree = "<group>"; }; A69FFADB1E70047E0006FEE0 /* MessageCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageCell.swift; sourceTree = "<group>"; }; A69FFADC1E70047E0006FEE0 /* MessageRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageRepository.swift; sourceTree = "<group>"; }; A69FFADD1E70047E0006FEE0 /* MessageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageViewController.swift; sourceTree = "<group>"; }; A69FFADE1E70047E0006FEE0 /* MessageViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageViewModel.swift; sourceTree = "<group>"; }; A69FFADF1E70047E0006FEE0 /* SystemMessageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SystemMessageViewController.swift; sourceTree = "<group>"; }; A69FFAE21E70047E0006FEE0 /* AboutViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = "<group>"; }; A69FFAE31E70047E0006FEE0 /* AboutWebViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AboutWebViewController.swift; sourceTree = "<group>"; }; A69FFAE41E70047E0006FEE0 /* FeedbackViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedbackViewController.swift; sourceTree = "<group>"; }; A69FFAE61E70047E0006FEE0 /* GroupRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupRepository.swift; sourceTree = "<group>"; }; A69FFAE71E70047E0006FEE0 /* GroupCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupCell.swift; sourceTree = "<group>"; }; A69FFAE81E70047E0006FEE0 /* GroupViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupViewController.swift; sourceTree = "<group>"; }; A69FFAEC1E70047E0006FEE0 /* OrderCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderCell.swift; sourceTree = "<group>"; }; A69FFAED1E70047E0006FEE0 /* OrderRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderRepository.swift; sourceTree = "<group>"; }; A69FFAEE1E70047E0006FEE0 /* OrderViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderViewController.swift; sourceTree = "<group>"; }; A69FFB081E700B700006FEE0 /* RecentGroupInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentGroupInfo.swift; sourceTree = "<group>"; }; A69FFB891E7018CC0006FEE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Detail.storyboard; sourceTree = "<group>"; }; A69FFB8B1E7018CC0006FEE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = GroupDetail.storyboard; sourceTree = "<group>"; }; A69FFB8D1E7018CC0006FEE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = LaunchScreen.storyboard; sourceTree = "<group>"; }; A69FFB8F1E7018CC0006FEE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Main.storyboard; sourceTree = "<group>"; }; A69FFB911E7018CC0006FEE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Message.storyboard; sourceTree = "<group>"; }; A69FFB931E7018CC0006FEE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Mine.storyboard; sourceTree = "<group>"; }; A6CCC0501E793DD0004BCC9D /* UIView+Badge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Badge.swift"; sourceTree = "<group>"; }; A6CCC0541E793DD0004BCC9D /* UIScrollView+Guide.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIScrollView+Guide.swift"; sourceTree = "<group>"; }; A6CCC0581E793DD0004BCC9D /* UIViewController+NavigatorBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+NavigatorBar.swift"; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 05130F2B21C94B32004EF1BE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 05130F6721C95373004EF1BE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 0543E7F121CB842B00A42807 /* libWeChatSDK.a in Frameworks */, 0513104C21CA1BAD004EF1BE /* SQLite.framework in Frameworks */, 0513104A21CA1BAD004EF1BE /* RxSwift.framework in Frameworks */, 0513104821CA1BAD004EF1BE /* RxCocoa.framework in Frameworks */, 0513106221CA22B6004EF1BE /* Alamofire.framework in Frameworks */, 0513104521CA1BAD004EF1BE /* ObjectMapper.framework in Frameworks */, 0513104921CA1BAD004EF1BE /* RxDataSources.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 05130F8B21C9E5E8004EF1BE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 0513105E21CA1D95004EF1BE /* PaiaiUIKit.framework in Frameworks */, 0513105D21CA1D95004EF1BE /* PaiaiDataKit.framework in Frameworks */, 0513105021CA1BED004EF1BE /* RxSwift.framework in Frameworks */, 0513104E21CA1BED004EF1BE /* RxCocoa.framework in Frameworks */, 051310B521CB5EDD004EF1BE /* Kingfisher.framework in Frameworks */, 0513104F21CA1BED004EF1BE /* RxDataSources.framework in Frameworks */, 0513104D21CA1BED004EF1BE /* ESPullToRefresh.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 6CEBD0FC1CA8D680004DBDE0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 051310B421CB5EC3004EF1BE /* Kingfisher.framework in Frameworks */, 0513109C21CA4103004EF1BE /* Alamofire.framework in Frameworks */, 0513109E21CA4103004EF1BE /* ESPullToRefresh.framework in Frameworks */, 0513109F21CA4103004EF1BE /* ObjectMapper.framework in Frameworks */, 051310A221CA4103004EF1BE /* RxCocoa.framework in Frameworks */, 051310A321CA4103004EF1BE /* RxDataSources.framework in Frameworks */, 051310A421CA4103004EF1BE /* RxSwift.framework in Frameworks */, 051310A621CA4103004EF1BE /* SQLite.framework in Frameworks */, 05130FA321C9E5E9004EF1BE /* Paiai_iOS.framework in Frameworks */, 05130F4321C94B33004EF1BE /* PaiaiUIKit.framework in Frameworks */, 05130F7F21C95373004EF1BE /* PaiaiDataKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 05130F2F21C94B32004EF1BE /* PaiaiUIKit */ = { isa = PBXGroup; children = ( 05130F3021C94B32004EF1BE /* PaiaiUIKit.h */, 05130F3121C94B32004EF1BE /* Info.plist */, 05130F4C21C94B53004EF1BE /* Reusable */, ); path = PaiaiUIKit; sourceTree = "<group>"; }; 05130F4C21C94B53004EF1BE /* Reusable */ = { isa = PBXGroup; children = ( 42FECF071EE0339500D4C695 /* HardwareAuthorization.swift */, 05130F4D21C94B72004EF1BE /* UIKit */, 0543272621C68C1900C6388D /* Extension */, ); path = Reusable; sourceTree = "<group>"; }; 05130F4D21C94B72004EF1BE /* UIKit */ = { isa = PBXGroup; children = ( 0513108921CA3914004EF1BE /* QR */, 0513106C21CA3907004EF1BE /* Alert */, 05130F4E21C94C12004EF1BE /* AlertViewController */, 05130F6121C94C79004EF1BE /* PageViewController */, 05130F5F21C94C79004EF1BE /* SideViewController */, A6CCC0731E793DD0004BCC9D /* WaterfallFlowLayout */, ); path = UIKit; sourceTree = "<group>"; }; 05130F4E21C94C12004EF1BE /* AlertViewController */ = { isa = PBXGroup; children = ( 05130F5121C94C12004EF1BE /* AlertViewController.swift */, 05130F5321C94C12004EF1BE /* AlertViewAnimatable.swift */, 05130F4F21C94C12004EF1BE /* AlertAnimator.swift */, 05130F5421C94C12004EF1BE /* ActionSheetAnimator.swift */, 05130F5621C94C12004EF1BE /* AppearAnimatedTransitioning.swift */, 05130F5221C94C12004EF1BE /* DisappearAnimatedTransitioning.swift */, ); path = AlertViewController; sourceTree = "<group>"; }; 05130F5F21C94C79004EF1BE /* SideViewController */ = { isa = PBXGroup; children = ( 05130F6021C94C79004EF1BE /* SideViewController.swift */, ); path = SideViewController; sourceTree = "<group>"; }; 05130F6121C94C79004EF1BE /* PageViewController */ = { isa = PBXGroup; children = ( 05130F6221C94C79004EF1BE /* PageViewController.swift */, ); path = PageViewController; sourceTree = "<group>"; }; 05130F6B21C95373004EF1BE /* PaiaiDataKit */ = { isa = PBXGroup; children = ( 05130F6C21C95373004EF1BE /* PaiaiDataKit.h */, 05130F6D21C95373004EF1BE /* Info.plist */, 05130F8721C9E10A004EF1BE /* DataLayer */, 05130F8821C9E11F004EF1BE /* PresentLayer */, 0543E7E721CB842B00A42807 /* wxSDK */, ); path = PaiaiDataKit; sourceTree = "<group>"; }; 05130F8721C9E10A004EF1BE /* DataLayer */ = { isa = PBXGroup; children = ( 05130FAD21C9E68A004EF1BE /* Model */, 05130FAE21C9E691004EF1BE /* Repositories */, ); path = DataLayer; sourceTree = "<group>"; }; 05130F8821C9E11F004EF1BE /* PresentLayer */ = { isa = PBXGroup; children = ( 0543E7F321CB911200A42807 /* UserInfoViewModel.swift */, 0543E80121D0CD9900A42807 /* home */, 0543E80321D0CD9E00A42807 /* message */, 0543E80221D0CD9C00A42807 /* mine */, 0543E80421D0CDA000A42807 /* groupDetail */, 0543E80521D0CDDA00A42807 /* photoDetail */, ); path = PresentLayer; sourceTree = "<group>"; }; 05130F8F21C9E5E8004EF1BE /* Paiai_iOS */ = { isa = PBXGroup; children = ( 05130F9021C9E5E8004EF1BE /* Paiai_iOS.h */, 05130F9121C9E5E8004EF1BE /* Info.plist */, 05130FBA21C9EE82004EF1BE /* App */, 051310B121CB3FCF004EF1BE /* Reusable */, ); path = Paiai_iOS; sourceTree = "<group>"; }; 05130FAD21C9E68A004EF1BE /* Model */ = { isa = PBXGroup; children = ( 05468AF11F8B73A000B8F469 /* PhotoItem.swift */, 05130FAF21C9E6CD004EF1BE /* OrderItem.swift */, 05130FB221C9E76A004EF1BE /* GroupItem.swift */, 05130FB621C9E80F004EF1BE /* MessageItem.swift */, 05130FB421C9E7CE004EF1BE /* MessageTypeItem.swift */, 051310BF21CB6EF4004EF1BE /* UserInfo.swift */, A69FFAB01E7004700006FEE0 /* GroupDetailModel.swift */, 0543E80A21D1DF4000A42807 /* GroupUserItem.swift */, 0543E80E21D1FD1100A42807 /* GroupDetail.swift */, A69FFA9F1E7004700006FEE0 /* DetailModel.swift */, 05C0D98D21D22119000B7B2A /* ZanUserItem.swift */, 05C0D98F21D2219A000B7B2A /* CommentItem.swift */, 05130FB121C9E703004EF1BE /* Reusable */, ); path = Model; sourceTree = "<group>"; }; 05130FAE21C9E691004EF1BE /* Repositories */ = { isa = PBXGroup; children = ( A69FFA841E7002B50006FEE0 /* UserInfoRepository.swift */, A69FFAD61E70047E0006FEE0 /* HomePhotoRepository.swift */, A69FFAED1E70047E0006FEE0 /* OrderRepository.swift */, A69FFAE61E70047E0006FEE0 /* GroupRepository.swift */, 059AA62821BA855000485188 /* MessageTypeRepository.swift */, A69FFADC1E70047E0006FEE0 /* MessageRepository.swift */, 0540C8B01F8C9A640044FCC5 /* GroupPhotoRepository.swift */, 0543E80C21D1E2EA00A42807 /* GroupDetailRepository.swift */, 05C0D99521D22AA7000B7B2A /* PhotoDetailRepository.swift */, 05C0D99821D23119000B7B2A /* Remote */, 05130FB921C9EAA8004EF1BE /* Persistence */, ); path = Repositories; sourceTree = "<group>"; }; 05130FB121C9E703004EF1BE /* Reusable */ = { isa = PBXGroup; children = ( 0506441E1F8D09C00035857E /* StatusModel.swift */, 0540C8B21F8CA07E0044FCC5 /* FileModel.swift */, ); path = Reusable; sourceTree = "<group>"; }; 05130FB921C9EAA8004EF1BE /* Persistence */ = { isa = PBXGroup; children = ( 0513106421CA2757004EF1BE /* Reusable */, 420FDBEA1EA70A9600958CBD /* PhotoLocalStorage.swift */, A69FFB081E700B700006FEE0 /* RecentGroupInfo.swift */, 051310B721CB6958004EF1BE /* UserInfoStore.swift */, ); path = Persistence; sourceTree = "<group>"; }; 05130FBA21C9EE82004EF1BE /* App */ = { isa = PBXGroup; children = ( 050E210F21B8CE8A008E1352 /* AppCoordinator.swift */, 05087F6721B8F9530024A117 /* ContainerViewController.swift */, A69FFA791E7002970006FEE0 /* LoginViewController.swift */, 054863661FA326CB00A39DA0 /* PhotoCell.swift */, 054863671FA326CB00A39DA0 /* PhotoCell.xib */, 05D790AD1FC50E7C00469AD1 /* Home */, 05D790AE1FC50E7C00469AD1 /* GroupDetail */, 05D790AA1FC50E7C00469AD1 /* Message */, 05D790AC1FC50E7C00469AD1 /* Mine */, 05D790AB1FC50E7C00469AD1 /* PhotoDetail */, ); path = App; sourceTree = "<group>"; }; 0513106421CA2757004EF1BE /* Reusable */ = { isa = PBXGroup; children = ( 0543274421C68C1900C6388D /* UserDefaultsExt.swift */, 0543274121C68C1900C6388D /* StringExt.swift */, 0543274721C68C1900C6388D /* DateExt.swift */, ); path = Reusable; sourceTree = "<group>"; }; 0513106C21CA3907004EF1BE /* Alert */ = { isa = PBXGroup; children = ( 0513106D21CA3907004EF1BE /* FFAlertController.swift */, 0513106E21CA3907004EF1BE /* Views */, 0513107821CA3907004EF1BE /* Presentation */, ); path = Alert; sourceTree = "<group>"; }; 0513106E21CA3907004EF1BE /* Views */ = { isa = PBXGroup; children = ( 0513106F21CA3907004EF1BE /* CancelAlertAction.swift */, 0513107021CA3907004EF1BE /* FFAlertControllerRepresentable.swift */, 0513107121CA3907004EF1BE /* DestructiveAlertAction.swift */, 0513107221CA3907004EF1BE /* FFSheetView.swift */, 0513107321CA3907004EF1BE /* ConfirmAlertAction.swift */, 0513107421CA3907004EF1BE /* FFSheetActionCell.swift */, 0513107521CA3907004EF1BE /* FFAlertLabel.swift */, 0513107621CA3907004EF1BE /* FFAlertView.swift */, 0513107721CA3907004EF1BE /* FFAlertAction.swift */, ); path = Views; sourceTree = "<group>"; }; 0513107821CA3907004EF1BE /* Presentation */ = { isa = PBXGroup; children = ( 0513107921CA3907004EF1BE /* FFTransitioning.swift */, 0513107A21CA3907004EF1BE /* FFAnimationTransitioning.swift */, 0513107B21CA3907004EF1BE /* FFPresentationController.swift */, ); path = Presentation; sourceTree = "<group>"; }; 0513108921CA3914004EF1BE /* QR */ = { isa = PBXGroup; children = ( 0513109121CA3915004EF1BE /* QRCodeScanView.swift */, 0513108C21CA3914004EF1BE /* QRCodeScanDelegate.swift */, 0513108E21CA3914004EF1BE /* QRCodeScanner.swift */, 0513108B21CA3914004EF1BE /* QRCodeMaskView.swift */, 0513108F21CA3914004EF1BE /* QRCodeScanResult.swift */, 0513109221CA3915004EF1BE /* QRCodeConfiguration.swift */, 0513108A21CA3914004EF1BE /* ColorQR.swift */, 0513109021CA3915004EF1BE /* NotificationExt.swift */, 0513108D21CA3914004EF1BE /* di.mp3 */, ); path = QR; sourceTree = "<group>"; }; 051310B121CB3FCF004EF1BE /* Reusable */ = { isa = PBXGroup; children = ( 051310B221CB3FEC004EF1BE /* Extension */, ); path = Reusable; sourceTree = "<group>"; }; 051310B221CB3FEC004EF1BE /* Extension */ = { isa = PBXGroup; children = ( 0543276621C68C3300C6388D /* UIImageView+Kingfisher.swift */, ); path = Extension; sourceTree = "<group>"; }; 0543272621C68C1900C6388D /* Extension */ = { isa = PBXGroup; children = ( 0543272721C68C1900C6388D /* CoreGraphics */, 0543272B21C68C1900C6388D /* UIKit */, 0543274021C68C1900C6388D /* Foundation */, ); path = Extension; sourceTree = "<group>"; }; 0543272721C68C1900C6388D /* CoreGraphics */ = { isa = PBXGroup; children = ( 0543272821C68C1900C6388D /* CLLocationExt.swift */, 0543272921C68C1900C6388D /* CGPointExt.swift */, 0543272A21C68C1900C6388D /* CGSizeExt.swift */, ); path = CoreGraphics; sourceTree = "<group>"; }; 0543272B21C68C1900C6388D /* UIKit */ = { isa = PBXGroup; children = ( 0513105F21CA1E53004EF1BE /* UIStoryboardExt.swift */, A6CCC0501E793DD0004BCC9D /* UIView+Badge.swift */, A6CCC0541E793DD0004BCC9D /* UIScrollView+Guide.swift */, A6CCC0581E793DD0004BCC9D /* UIViewController+NavigatorBar.swift */, 0543272C21C68C1900C6388D /* UITableViewExt.swift */, 0543272D21C68C1900C6388D /* UINavigationItemExt.swift */, 0543272E21C68C1900C6388D /* UIBarButtonItemExt.swift */, 0543272F21C68C1900C6388D /* UIColorExt.swift */, 0543273021C68C1900C6388D /* UINavigationControllerExt.swift */, 0543273121C68C1900C6388D /* UISwitchExt.swift */, 0543273221C68C1900C6388D /* UIButtonExt.swift */, 0543273321C68C1900C6388D /* UIViewExt.swift */, 0543273421C68C1900C6388D /* UIViewControllerExt.swift */, 0543273521C68C1900C6388D /* UICollectionViewExt.swift */, 0543273621C68C1900C6388D /* UITextFieldExt.swift */, 0543273721C68C1900C6388D /* UIScrollerViewExt.swift */, 0543273821C68C1900C6388D /* UITextViewExt.swift */, 0543273921C68C1900C6388D /* UINavigationBarExt.swift */, 0543273A21C68C1900C6388D /* UISegmentedControlExt.swift */, 0543273B21C68C1900C6388D /* UIApplicationExt.swift */, 0543273C21C68C1900C6388D /* UIStoryboardExt.swift */, 0543273D21C68C1900C6388D /* UIImageExt.swift */, 0543273E21C68C1900C6388D /* UILabelExt.swift */, 0543273F21C68C1900C6388D /* UIImageViewExt.swift */, ); path = UIKit; sourceTree = "<group>"; }; 0543274021C68C1900C6388D /* Foundation */ = { isa = PBXGroup; children = ( 0543274521C68C1900C6388D /* RuntimeExt.swift */, ); path = Foundation; sourceTree = "<group>"; }; 0543E7E721CB842B00A42807 /* wxSDK */ = { isa = PBXGroup; children = ( 0543E7E821CB842B00A42807 /* WXApi.h */, 0543E7E921CB842B00A42807 /* WXApiObject.h */, 0543E7EA21CB842B00A42807 /* README.txt */, 0543E7EB21CB842B00A42807 /* WechatAuthSDK.h */, 0543E7EC21CB842B00A42807 /* libWeChatSDK.a */, ); path = wxSDK; sourceTree = "<group>"; }; 0543E80121D0CD9900A42807 /* home */ = { isa = PBXGroup; children = ( A69FFAD51E70047E0006FEE0 /* HomeViewModel.swift */, A69FFAAC1E7004700006FEE0 /* GroupPageViewModel.swift */, 05130F2721C88D35004EF1BE /* ScanQRViewModel.swift */, 05A0E8A821C782D700EAB9A2 /* CreateGroupConfirmViewModel.swift */, ); path = home; sourceTree = "<group>"; }; 0543E80221D0CD9C00A42807 /* mine */ = { isa = PBXGroup; children = ( 42CF50451EC0526C00D23E9F /* GroupViewModel.swift */, 42CF50471EC052B200D23E9F /* OrderViewModel.swift */, 0543E80621D0CDFA00A42807 /* FeedbackViewModel.swift */, ); path = mine; sourceTree = "<group>"; }; 0543E80321D0CD9E00A42807 /* message */ = { isa = PBXGroup; children = ( A69FFADE1E70047E0006FEE0 /* MessageViewModel.swift */, 059AA62A21BA85B000485188 /* MessageTypeViewModel.swift */, ); path = message; sourceTree = "<group>"; }; 0543E80421D0CDA000A42807 /* groupDetail */ = { isa = PBXGroup; children = ( A69FFAB21E7004700006FEE0 /* GroupDetailViewModel.swift */, 42CF50491EC0536000D23E9F /* GroupMerberViewModel.swift */, ); path = groupDetail; sourceTree = "<group>"; }; 0543E80521D0CDDA00A42807 /* photoDetail */ = { isa = PBXGroup; children = ( A69FFAA41E7004700006FEE0 /* DetailPageViewModel.swift */, ); path = photoDetail; sourceTree = "<group>"; }; 05C0D99321D22604000B7B2A /* Reusable */ = { isa = PBXGroup; children = ( 05C0D99421D2260F000B7B2A /* ables */, A69FFA7F1E7002B50006FEE0 /* NetWork */, ); path = Reusable; sourceTree = "<group>"; }; 05C0D99421D2260F000B7B2A /* ables */ = { isa = PBXGroup; children = ( 0543E7F921CCC64B00A42807 /* Repositorable.swift */, 0543E7F721CC9E2D00A42807 /* Gettable.swift */, 0543E7FD21CCE51200A42807 /* Deletable.swift */, 0543E7FB21CCD1FB00A42807 /* Layoutable.swift */, 0543E7FF21CCEBDA00A42807 /* Readable.swift */, 0543E80821D0EDD200A42807 /* Submitable.swift */, 0543E81021D2053F00A42807 /* Updatable.swift */, 05C0D99121D223B0000B7B2A /* Quittable.swift */, ); path = ables; sourceTree = "<group>"; }; 05C0D99821D23119000B7B2A /* Remote */ = { isa = PBXGroup; children = ( 05C0D99321D22604000B7B2A /* Reusable */, ); path = Remote; sourceTree = "<group>"; }; 05D790AA1FC50E7C00469AD1 /* Message */ = { isa = PBXGroup; children = ( 059AA5D921BA1A2000485188 /* MessageCoordinator.swift */, A69FFADA1E70047E0006FEE0 /* CommentCell.swift */, A69FFADB1E70047E0006FEE0 /* MessageCell.swift */, 0578947E20D264B300A9F773 /* MessageTypeViewController.swift */, A69FFADD1E70047E0006FEE0 /* MessageViewController.swift */, A69FFADF1E70047E0006FEE0 /* SystemMessageViewController.swift */, A69FFB901E7018CC0006FEE0 /* Message.storyboard */, ); path = Message; sourceTree = "<group>"; }; 05D790AB1FC50E7C00469AD1 /* PhotoDetail */ = { isa = PBXGroup; children = ( 0513106A21CA3545004EF1BE /* PhotoDetailCoordinator.swift */, A69FFAA01E7004700006FEE0 /* DetailPageHeadCell.swift */, A69FFAA21E7004700006FEE0 /* DetailPagePhotoCell.swift */, A69FFAA11E7004700006FEE0 /* DetailPageNameCell.swift */, A69FFAA51E7004700006FEE0 /* DetailZanImagesCell.swift */, A69FFA9E1E7004700006FEE0 /* DetailCommentCell.swift */, A69FFAA61E7004700006FEE0 /* ImageCell.swift */, A69FFAA31E7004700006FEE0 /* DetailPageController.swift */, A69FFAA71E7004700006FEE0 /* ReportController.swift */, A69FFAA81E7004700006FEE0 /* ShareController.swift */, A69FFAA91E7004700006FEE0 /* ShowFullPicController.swift */, A69FFB881E7018CC0006FEE0 /* Detail.storyboard */, ); path = PhotoDetail; sourceTree = "<group>"; }; 05D790AC1FC50E7C00469AD1 /* Mine */ = { isa = PBXGroup; children = ( 050E211321B8F39C008E1352 /* MineCoordinator.swift */, 050E211721B8F3FF008E1352 /* MineViewController.swift */, A69FFAE81E70047E0006FEE0 /* GroupViewController.swift */, A69FFAE71E70047E0006FEE0 /* GroupCell.swift */, A69FFAEE1E70047E0006FEE0 /* OrderViewController.swift */, A69FFAEC1E70047E0006FEE0 /* OrderCell.swift */, A69FFAE41E70047E0006FEE0 /* FeedbackViewController.swift */, A69FFAE21E70047E0006FEE0 /* AboutViewController.swift */, A69FFAE31E70047E0006FEE0 /* AboutWebViewController.swift */, A69FFB921E7018CC0006FEE0 /* Mine.storyboard */, ); path = Mine; sourceTree = "<group>"; }; 05D790AD1FC50E7C00469AD1 /* Home */ = { isa = PBXGroup; children = ( 050E211121B8F2D4008E1352 /* HomeCoordinator.swift */, A69FFAD41E70047E0006FEE0 /* HomeViewController.swift */, A69FFACF1E70047E0006FEE0 /* CreateGroupConfirmViewController.swift */, A69FFAD01E70047E0006FEE0 /* CreateGroupViewController.swift */, A69FFAD71E70047E0006FEE0 /* ScanQRViewController.swift */, A69FFB8E1E7018CC0006FEE0 /* Main.storyboard */, 05D790AF1FC50E7C00469AD1 /* Group */, ); path = Home; sourceTree = "<group>"; }; 05D790AE1FC50E7C00469AD1 /* GroupDetail */ = { isa = PBXGroup; children = ( 0513106821CA34D6004EF1BE /* GroupDetailCoordinator.swift */, A69FFAB61E7004700006FEE0 /* MeberCell.swift */, A69FFAB11E7004700006FEE0 /* GroupDetailController.swift */, A69FFAB41E7004700006FEE0 /* GroupUserController.swift */, A69FFAAE1E7004700006FEE0 /* ChangeGroupNameController.swift */, A69FFAB71E7004700006FEE0 /* ShowGroupQRController.swift */, A69FFB8A1E7018CC0006FEE0 /* GroupDetail.storyboard */, ); path = GroupDetail; sourceTree = "<group>"; }; 05D790AF1FC50E7C00469AD1 /* Group */ = { isa = PBXGroup; children = ( A69FFAAB1E7004700006FEE0 /* GroupPageController.swift */, ); path = Group; sourceTree = "<group>"; }; 6CEBD0F61CA8D680004DBDE0 = { isa = PBXGroup; children = ( 05130FBB21C9F707004EF1BE /* Cartfile */, 3864C06C1CAD27EC0048ADAD /* Swift-bridge.h */, 6CEBD1011CA8D680004DBDE0 /* Paiai */, 05130F8F21C9E5E8004EF1BE /* Paiai_iOS */, 05130F2F21C94B32004EF1BE /* PaiaiUIKit */, 05130F6B21C95373004EF1BE /* PaiaiDataKit */, 6CEBD1001CA8D680004DBDE0 /* Products */, 7737858CEE753530C312F2CB /* Frameworks */, ); sourceTree = "<group>"; }; 6CEBD1001CA8D680004DBDE0 /* Products */ = { isa = PBXGroup; children = ( 6CEBD0FF1CA8D680004DBDE0 /* Paiai.app */, 05130F2E21C94B32004EF1BE /* PaiaiUIKit.framework */, 05130F6A21C95373004EF1BE /* PaiaiDataKit.framework */, 05130F8E21C9E5E8004EF1BE /* Paiai_iOS.framework */, ); name = Products; sourceTree = "<group>"; }; 6CEBD1011CA8D680004DBDE0 /* Paiai */ = { isa = PBXGroup; children = ( 045F01541DED33DC00B80C87 /* Paiai.entitlements */, 6CEBD1021CA8D680004DBDE0 /* AppDelegate.swift */, 6CEBD10E1CA8D680004DBDE0 /* Info.plist */, A69FFB8C1E7018CC0006FEE0 /* LaunchScreen.storyboard */, 6CEBD1091CA8D680004DBDE0 /* Assets.xcassets */, ); path = Paiai; sourceTree = "<group>"; }; 7737858CEE753530C312F2CB /* Frameworks */ = { isa = PBXGroup; children = ( 051310B321CB5EC3004EF1BE /* Kingfisher.framework */, 0513106121CA22B5004EF1BE /* Alamofire.framework */, 05130FC921CA1997004EF1BE /* ObjectMapper.framework */, 05130FC621CA1997004EF1BE /* RxAtomic.framework */, 05130FC521CA1997004EF1BE /* RxBlocking.framework */, 05130FC221CA1997004EF1BE /* RxCocoa.framework */, 05130FC421CA1997004EF1BE /* RxDataSources.framework */, 05130FC321CA1997004EF1BE /* RxSwift.framework */, 05130FC721CA1997004EF1BE /* RxTest.framework */, 05130FC821CA1997004EF1BE /* SQLite.framework */, 05130FC021CA196F004EF1BE /* ESPullToRefresh.framework */, 05130FBD21CA194B004EF1BE /* Differentiator.framework */, ); name = Frameworks; sourceTree = "<group>"; }; A69FFA7F1E7002B50006FEE0 /* NetWork */ = { isa = PBXGroup; children = ( 0505B34F1F7E4B9A009E4ED2 /* NetworkApi.swift */, 0543E7F521CC947C00A42807 /* Parsable.swift */, 0505B34B1F7E4024009E4ED2 /* Resource.swift */, 0594845921B66DA500074EFC /* Result.swift */, 0594845721B528FE00074EFC /* Interfaces.swift */, A69FFA811E7002B50006FEE0 /* NetWorkCache.swift */, ); path = NetWork; sourceTree = "<group>"; }; A6CCC0731E793DD0004BCC9D /* WaterfallFlowLayout */ = { isa = PBXGroup; children = ( 050F5D0F1FB9399E00A053D0 /* WaterfallFlowLayout.swift */, 050F5D111FB93A5C00A053D0 /* WaterfallFlowConfiguration.swift */, ); path = WaterfallFlowLayout; sourceTree = "<group>"; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 05130F2921C94B32004EF1BE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 05130F4021C94B33004EF1BE /* PaiaiUIKit.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 05130F6521C95373004EF1BE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 0543E7ED21CB842B00A42807 /* WXApi.h in Headers */, 0543E7F021CB842B00A42807 /* WechatAuthSDK.h in Headers */, 0543E7EE21CB842B00A42807 /* WXApiObject.h in Headers */, 05130F7C21C95373004EF1BE /* PaiaiDataKit.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 05130F8921C9E5E8004EF1BE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 05130FA021C9E5E9004EF1BE /* Paiai_iOS.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 05130F2D21C94B32004EF1BE /* PaiaiUIKit */ = { isa = PBXNativeTarget; buildConfigurationList = 05130F4521C94B33004EF1BE /* Build configuration list for PBXNativeTarget "PaiaiUIKit" */; buildPhases = ( 05130F2921C94B32004EF1BE /* Headers */, 05130F2A21C94B32004EF1BE /* Sources */, 05130F2B21C94B32004EF1BE /* Frameworks */, 05130F2C21C94B32004EF1BE /* Resources */, ); buildRules = ( ); dependencies = ( ); name = PaiaiUIKit; productName = PaiaiUIKit; productReference = 05130F2E21C94B32004EF1BE /* PaiaiUIKit.framework */; productType = "com.apple.product-type.framework"; }; 05130F6921C95373004EF1BE /* PaiaiDataKit */ = { isa = PBXNativeTarget; buildConfigurationList = 05130F8121C95373004EF1BE /* Build configuration list for PBXNativeTarget "PaiaiDataKit" */; buildPhases = ( 05130F6521C95373004EF1BE /* Headers */, 05130F6621C95373004EF1BE /* Sources */, 05130F6721C95373004EF1BE /* Frameworks */, 05130F6821C95373004EF1BE /* Resources */, ); buildRules = ( ); dependencies = ( ); name = PaiaiDataKit; productName = PaiaiDataKit; productReference = 05130F6A21C95373004EF1BE /* PaiaiDataKit.framework */; productType = "com.apple.product-type.framework"; }; 05130F8D21C9E5E8004EF1BE /* Paiai_iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 05130FA521C9E5E9004EF1BE /* Build configuration list for PBXNativeTarget "Paiai_iOS" */; buildPhases = ( 05130F8921C9E5E8004EF1BE /* Headers */, 05130F8A21C9E5E8004EF1BE /* Sources */, 05130F8B21C9E5E8004EF1BE /* Frameworks */, 05130F8C21C9E5E8004EF1BE /* Resources */, ); buildRules = ( ); dependencies = ( 051310A821CA451B004EF1BE /* PBXTargetDependency */, 051310AA21CA451B004EF1BE /* PBXTargetDependency */, ); name = Paiai_iOS; productName = Paiai_iOS; productReference = 05130F8E21C9E5E8004EF1BE /* Paiai_iOS.framework */; productType = "com.apple.product-type.framework"; }; 6CEBD0FE1CA8D680004DBDE0 /* Paiai */ = { isa = PBXNativeTarget; buildConfigurationList = 6CEBD1111CA8D680004DBDE0 /* Build configuration list for PBXNativeTarget "Paiai" */; buildPhases = ( 6CEBD0FB1CA8D680004DBDE0 /* Sources */, 6CEBD0FC1CA8D680004DBDE0 /* Frameworks */, 6CEBD0FD1CA8D680004DBDE0 /* Resources */, 05D5F0C22015E55000BC890B /* Run Script */, 05130F4821C94B33004EF1BE /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( 05130F4221C94B33004EF1BE /* PBXTargetDependency */, 05130F7E21C95373004EF1BE /* PBXTargetDependency */, 05130FA221C9E5E9004EF1BE /* PBXTargetDependency */, ); name = Paiai; productName = PaiAi; productReference = 6CEBD0FF1CA8D680004DBDE0 /* Paiai.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 6CEBD0F71CA8D680004DBDE0 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1010; LastUpgradeCheck = 1010; ORGANIZATIONNAME = yb; TargetAttributes = { 05130F2D21C94B32004EF1BE = { CreatedOnToolsVersion = 10.1; DevelopmentTeam = Q38447SL4M; ProvisioningStyle = Automatic; }; 05130F6921C95373004EF1BE = { CreatedOnToolsVersion = 10.1; DevelopmentTeam = Q38447SL4M; LastSwiftMigration = 1010; ProvisioningStyle = Automatic; }; 05130F8D21C9E5E8004EF1BE = { CreatedOnToolsVersion = 10.1; DevelopmentTeam = Q38447SL4M; ProvisioningStyle = Automatic; }; 6CEBD0FE1CA8D680004DBDE0 = { CreatedOnToolsVersion = 7.3; DevelopmentTeam = Q38447SL4M; LastSwiftMigration = 0900; ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.BackgroundModes = { enabled = 0; }; com.apple.Keychain = { enabled = 1; }; com.apple.Maps.iOS = { enabled = 0; }; }; }; }; }; buildConfigurationList = 6CEBD0FA1CA8D680004DBDE0 /* Build configuration list for PBXProject "Paiai" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 6CEBD0F61CA8D680004DBDE0; productRefGroup = 6CEBD1001CA8D680004DBDE0 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 6CEBD0FE1CA8D680004DBDE0 /* Paiai */, 05130F8D21C9E5E8004EF1BE /* Paiai_iOS */, 05130F2D21C94B32004EF1BE /* PaiaiUIKit */, 05130F6921C95373004EF1BE /* PaiaiDataKit */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 05130F2C21C94B32004EF1BE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 0513109621CA3915004EF1BE /* di.mp3 in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; 05130F6821C95373004EF1BE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 0543E7EF21CB842B00A42807 /* README.txt in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; 05130F8C21C9E5E8004EF1BE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 0513105721CA1D50004EF1BE /* PhotoCell.xib in Resources */, 0513105B21CA1D50004EF1BE /* Mine.storyboard in Resources */, 0513105821CA1D50004EF1BE /* Main.storyboard in Resources */, 0513105C21CA1D50004EF1BE /* Detail.storyboard in Resources */, 0513105A21CA1D50004EF1BE /* Message.storyboard in Resources */, 0513105921CA1D50004EF1BE /* GroupDetail.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; 6CEBD0FD1CA8D680004DBDE0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 05130FBC21C9F708004EF1BE /* Cartfile in Resources */, 6CEBD10A1CA8D680004DBDE0 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 05D5F0C22015E55000BC890B /* Run Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "$(SRCROOT)/Carthage/Build/iOS/SQLite.framework", "$(SRCROOT)/Carthage/Build/iOS/ESPullToRefresh.framework", "$(SRCROOT)/Carthage/Build/iOS/RxCocoa.framework", "$(SRCROOT)/Carthage/Build/iOS/RxSwift.framework", "$(SRCROOT)/Carthage/Build/iOS/RxDataSources.framework", "$(SRCROOT)/Carthage/Build/iOS/ObjectMapper.framework", "$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework", "$(SRCROOT)/Carthage/Build/iOS/Kingfisher.framework", ); name = "Run Script"; outputPaths = ( "$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SQLite.framework", "$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ESPullToRefresh.framework", "$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxCocoa.framework", "$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxSwift.framework", "$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxDataSources.framework", "$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ObjectMapper.framework", "$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Alamofire.framework", "$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Kingfisher.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "/usr/local/bin/carthage copy-frameworks\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 05130F2A21C94B32004EF1BE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0513108521CA3907004EF1BE /* FFAlertAction.swift in Sources */, 0513108821CA3907004EF1BE /* FFPresentationController.swift in Sources */, 05130FFD21CA1B39004EF1BE /* HardwareAuthorization.swift in Sources */, 0513107D21CA3907004EF1BE /* CancelAlertAction.swift in Sources */, 0513108621CA3907004EF1BE /* FFTransitioning.swift in Sources */, 05130FFE21CA1B39004EF1BE /* WaterfallFlowLayout.swift in Sources */, 05130FFF21CA1B39004EF1BE /* WaterfallFlowConfiguration.swift in Sources */, 0513100021CA1B39004EF1BE /* CLLocationExt.swift in Sources */, 0513100121CA1B39004EF1BE /* CGPointExt.swift in Sources */, 0513108321CA3907004EF1BE /* FFAlertLabel.swift in Sources */, 0513107F21CA3907004EF1BE /* DestructiveAlertAction.swift in Sources */, 0513109821CA3915004EF1BE /* QRCodeScanResult.swift in Sources */, 0513100221CA1B39004EF1BE /* CGSizeExt.swift in Sources */, 0513100421CA1B39004EF1BE /* UIView+Badge.swift in Sources */, 0513108121CA3907004EF1BE /* ConfirmAlertAction.swift in Sources */, 0513108221CA3907004EF1BE /* FFSheetActionCell.swift in Sources */, 0513100521CA1B39004EF1BE /* UIScrollView+Guide.swift in Sources */, 0513109A21CA3915004EF1BE /* QRCodeScanView.swift in Sources */, 0513100721CA1B39004EF1BE /* UIViewController+NavigatorBar.swift in Sources */, 0513100821CA1B39004EF1BE /* UITableViewExt.swift in Sources */, 0513100921CA1B39004EF1BE /* UINavigationItemExt.swift in Sources */, 0513106021CA1E53004EF1BE /* UIStoryboardExt.swift in Sources */, 0513100A21CA1B39004EF1BE /* UIBarButtonItemExt.swift in Sources */, 0513100B21CA1B39004EF1BE /* UIColorExt.swift in Sources */, 0513100C21CA1B39004EF1BE /* UINavigationControllerExt.swift in Sources */, 0513100D21CA1B39004EF1BE /* UISwitchExt.swift in Sources */, 0513100E21CA1B39004EF1BE /* UIButtonExt.swift in Sources */, 0513100F21CA1B39004EF1BE /* UIViewExt.swift in Sources */, 0513108721CA3907004EF1BE /* FFAnimationTransitioning.swift in Sources */, 0513109B21CA3915004EF1BE /* QRCodeConfiguration.swift in Sources */, 0513101021CA1B39004EF1BE /* UIViewControllerExt.swift in Sources */, 0513101121CA1B39004EF1BE /* UICollectionViewExt.swift in Sources */, 0513101221CA1B39004EF1BE /* UITextFieldExt.swift in Sources */, 0513108421CA3907004EF1BE /* FFAlertView.swift in Sources */, 0513108021CA3907004EF1BE /* FFSheetView.swift in Sources */, 0513101321CA1B39004EF1BE /* UIScrollerViewExt.swift in Sources */, 0513101421CA1B39004EF1BE /* UITextViewExt.swift in Sources */, 0513109921CA3915004EF1BE /* NotificationExt.swift in Sources */, 0513101521CA1B39004EF1BE /* UINavigationBarExt.swift in Sources */, 0513101621CA1B39004EF1BE /* UISegmentedControlExt.swift in Sources */, 0513101721CA1B39004EF1BE /* UIApplicationExt.swift in Sources */, 0513101821CA1B39004EF1BE /* UIStoryboardExt.swift in Sources */, 0513101921CA1B39004EF1BE /* UIImageExt.swift in Sources */, 0513101A21CA1B39004EF1BE /* UILabelExt.swift in Sources */, 0513109521CA3915004EF1BE /* QRCodeScanDelegate.swift in Sources */, 0513101B21CA1B39004EF1BE /* UIImageViewExt.swift in Sources */, 05130F5A21C94C12004EF1BE /* DisappearAnimatedTransitioning.swift in Sources */, 05130F5921C94C12004EF1BE /* AlertViewController.swift in Sources */, 0513109421CA3915004EF1BE /* QRCodeMaskView.swift in Sources */, 0513109721CA3915004EF1BE /* QRCodeScanner.swift in Sources */, 05130F5E21C94C12004EF1BE /* AppearAnimatedTransitioning.swift in Sources */, 0513107C21CA3907004EF1BE /* FFAlertController.swift in Sources */, 05130F5721C94C12004EF1BE /* AlertAnimator.swift in Sources */, 0513109321CA3915004EF1BE /* ColorQR.swift in Sources */, 05130F5C21C94C12004EF1BE /* ActionSheetAnimator.swift in Sources */, 05130F5B21C94C12004EF1BE /* AlertViewAnimatable.swift in Sources */, 0513107E21CA3907004EF1BE /* FFAlertControllerRepresentable.swift in Sources */, 05130F6321C94C7A004EF1BE /* SideViewController.swift in Sources */, 05130F6421C94C7A004EF1BE /* PageViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 05130F6621C95373004EF1BE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0513106521CA290B004EF1BE /* UserDefaultsExt.swift in Sources */, 0513106621CA290B004EF1BE /* StringExt.swift in Sources */, 0543E7F421CB911200A42807 /* UserInfoViewModel.swift in Sources */, 05C0D99621D22AA7000B7B2A /* PhotoDetailRepository.swift in Sources */, 0513106721CA290B004EF1BE /* DateExt.swift in Sources */, 0543E80D21D1E2EA00A42807 /* GroupDetailRepository.swift in Sources */, 0513102121CA1B67004EF1BE /* PhotoItem.swift in Sources */, 0543E7F621CC947D00A42807 /* Parsable.swift in Sources */, 0513102221CA1B67004EF1BE /* StatusModel.swift in Sources */, 0543E81121D2053F00A42807 /* Updatable.swift in Sources */, 0513102321CA1B67004EF1BE /* FileModel.swift in Sources */, 0513102421CA1B67004EF1BE /* Interfaces.swift in Sources */, 0513102521CA1B67004EF1BE /* NetworkApi.swift in Sources */, 0513102621CA1B67004EF1BE /* Resource.swift in Sources */, 0513102821CA1B67004EF1BE /* NetWorkCache.swift in Sources */, 0513102921CA1B67004EF1BE /* Result.swift in Sources */, 0543E7F821CC9E2D00A42807 /* Gettable.swift in Sources */, 0543E7FA21CCC64B00A42807 /* Repositorable.swift in Sources */, 0513102B21CA1B67004EF1BE /* HomePhotoRepository.swift in Sources */, 0513102C21CA1B67004EF1BE /* OrderRepository.swift in Sources */, 0513102D21CA1B67004EF1BE /* GroupPhotoRepository.swift in Sources */, 05C0D98E21D22119000B7B2A /* ZanUserItem.swift in Sources */, 0513102E21CA1B67004EF1BE /* GroupRepository.swift in Sources */, 0543E80021CCEBDA00A42807 /* Readable.swift in Sources */, 051310B821CB6958004EF1BE /* UserInfoStore.swift in Sources */, 0513102F21CA1B67004EF1BE /* GroupDetailModel.swift in Sources */, 0513103021CA1B67004EF1BE /* MessageRepository.swift in Sources */, 0543E80B21D1DF4000A42807 /* GroupUserItem.swift in Sources */, 0513103121CA1B67004EF1BE /* MessageTypeRepository.swift in Sources */, 0543E80721D0CDFA00A42807 /* FeedbackViewModel.swift in Sources */, 0513103221CA1B67004EF1BE /* DetailModel.swift in Sources */, 0513103321CA1B67004EF1BE /* UserInfoRepository.swift in Sources */, 0513103421CA1B67004EF1BE /* PhotoLocalStorage.swift in Sources */, 0513103521CA1B67004EF1BE /* RecentGroupInfo.swift in Sources */, 0543E7FC21CCD1FB00A42807 /* Layoutable.swift in Sources */, 0543E80921D0EDD300A42807 /* Submitable.swift in Sources */, 0513103921CA1B67004EF1BE /* HomeViewModel.swift in Sources */, 0543E80F21D1FD1100A42807 /* GroupDetail.swift in Sources */, 0513103A21CA1B67004EF1BE /* GroupPageViewModel.swift in Sources */, 05C0D99021D2219A000B7B2A /* CommentItem.swift in Sources */, 0513103B21CA1B67004EF1BE /* GroupDetailViewModel.swift in Sources */, 05C0D99221D223B0000B7B2A /* Quittable.swift in Sources */, 0513103C21CA1B67004EF1BE /* GroupMerberViewModel.swift in Sources */, 0513103D21CA1B67004EF1BE /* GroupViewModel.swift in Sources */, 0513103E21CA1B67004EF1BE /* OrderViewModel.swift in Sources */, 0513103F21CA1B67004EF1BE /* DetailPageViewModel.swift in Sources */, 0513104021CA1B67004EF1BE /* MessageViewModel.swift in Sources */, 0513104121CA1B67004EF1BE /* MessageTypeViewModel.swift in Sources */, 0513104221CA1B67004EF1BE /* CreateGroupConfirmViewModel.swift in Sources */, 0513104321CA1B67004EF1BE /* ScanQRViewModel.swift in Sources */, 05130FB721C9E80F004EF1BE /* MessageItem.swift in Sources */, 051310C021CB6EF4004EF1BE /* UserInfo.swift in Sources */, 0543E7FE21CCE51200A42807 /* Deletable.swift in Sources */, 05130FB521C9E7CE004EF1BE /* MessageTypeItem.swift in Sources */, 05130FB321C9E76A004EF1BE /* GroupItem.swift in Sources */, 05130FB021C9E6CD004EF1BE /* OrderItem.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 05130F8A21C9E5E8004EF1BE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 051310B621CB675A004EF1BE /* UIImageView+Kingfisher.swift in Sources */, 05130FDD21CA1B04004EF1BE /* GroupPageController.swift in Sources */, 05130FDF21CA1B04004EF1BE /* MeberCell.swift in Sources */, 05130FE021CA1B04004EF1BE /* GroupDetailController.swift in Sources */, 05130FE121CA1B04004EF1BE /* GroupUserController.swift in Sources */, 05130FE221CA1B04004EF1BE /* ChangeGroupNameController.swift in Sources */, 05130FE321CA1B04004EF1BE /* ShowGroupQRController.swift in Sources */, 05130FE421CA1B04004EF1BE /* CommentCell.swift in Sources */, 05130FE521CA1B04004EF1BE /* MessageCell.swift in Sources */, 05130FE621CA1B04004EF1BE /* MessageCoordinator.swift in Sources */, 05130FE721CA1B04004EF1BE /* MessageTypeViewController.swift in Sources */, 05130FE821CA1B04004EF1BE /* MessageViewController.swift in Sources */, 05130FE921CA1B04004EF1BE /* SystemMessageViewController.swift in Sources */, 0513106921CA34D6004EF1BE /* GroupDetailCoordinator.swift in Sources */, 05130FEA21CA1B04004EF1BE /* GroupCell.swift in Sources */, 05130FEB21CA1B04004EF1BE /* OrderCell.swift in Sources */, 05130FEC21CA1B04004EF1BE /* MineCoordinator.swift in Sources */, 05130FED21CA1B04004EF1BE /* MineViewController.swift in Sources */, 05130FEE21CA1B04004EF1BE /* GroupViewController.swift in Sources */, 05130FEF21CA1B04004EF1BE /* FeedbackViewController.swift in Sources */, 05130FF021CA1B04004EF1BE /* OrderViewController.swift in Sources */, 05130FF121CA1B04004EF1BE /* AboutViewController.swift in Sources */, 05130FF221CA1B04004EF1BE /* AboutWebViewController.swift in Sources */, 05130FF321CA1B04004EF1BE /* DetailPageHeadCell.swift in Sources */, 05130FF421CA1B04004EF1BE /* DetailPagePhotoCell.swift in Sources */, 05130FF521CA1B04004EF1BE /* DetailPageNameCell.swift in Sources */, 05130FF621CA1B04004EF1BE /* DetailZanImagesCell.swift in Sources */, 05130FF721CA1B04004EF1BE /* DetailCommentCell.swift in Sources */, 0513106B21CA3545004EF1BE /* PhotoDetailCoordinator.swift in Sources */, 05130FF821CA1B04004EF1BE /* ImageCell.swift in Sources */, 05130FF921CA1B04004EF1BE /* DetailPageController.swift in Sources */, 05130FFA21CA1B04004EF1BE /* ReportController.swift in Sources */, 05130FFB21CA1B04004EF1BE /* ShareController.swift in Sources */, 05130FFC21CA1B04004EF1BE /* ShowFullPicController.swift in Sources */, 05130FD721CA1ADF004EF1BE /* HomeCoordinator.swift in Sources */, 05130FD821CA1AE0004EF1BE /* HomeViewController.swift in Sources */, 05130FD921CA1AE0004EF1BE /* CreateGroupConfirmViewController.swift in Sources */, 05130FDA21CA1AE0004EF1BE /* CreateGroupViewController.swift in Sources */, 05130FDB21CA1AE0004EF1BE /* ScanQRViewController.swift in Sources */, 05130FD321CA1AD4004EF1BE /* PhotoCell.swift in Sources */, 05130FD421CA1AD4004EF1BE /* LoginViewController.swift in Sources */, 05130FD521CA1AD4004EF1BE /* AppCoordinator.swift in Sources */, 05130FD621CA1AD4004EF1BE /* ContainerViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 6CEBD0FB1CA8D680004DBDE0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 05130FD221CA1A8A004EF1BE /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 05130F4221C94B33004EF1BE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 05130F2D21C94B32004EF1BE /* PaiaiUIKit */; targetProxy = 05130F4121C94B33004EF1BE /* PBXContainerItemProxy */; }; 05130F7E21C95373004EF1BE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 05130F6921C95373004EF1BE /* PaiaiDataKit */; targetProxy = 05130F7D21C95373004EF1BE /* PBXContainerItemProxy */; }; 05130FA221C9E5E9004EF1BE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 05130F8D21C9E5E8004EF1BE /* Paiai_iOS */; targetProxy = 05130FA121C9E5E9004EF1BE /* PBXContainerItemProxy */; }; 051310A821CA451B004EF1BE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 05130F2D21C94B32004EF1BE /* PaiaiUIKit */; targetProxy = 051310A721CA451B004EF1BE /* PBXContainerItemProxy */; }; 051310AA21CA451B004EF1BE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 05130F6921C95373004EF1BE /* PaiaiDataKit */; targetProxy = 051310A921CA451B004EF1BE /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ A69FFB881E7018CC0006FEE0 /* Detail.storyboard */ = { isa = PBXVariantGroup; children = ( A69FFB891E7018CC0006FEE0 /* Base */, ); name = Detail.storyboard; sourceTree = "<group>"; }; A69FFB8A1E7018CC0006FEE0 /* GroupDetail.storyboard */ = { isa = PBXVariantGroup; children = ( A69FFB8B1E7018CC0006FEE0 /* Base */, ); name = GroupDetail.storyboard; sourceTree = "<group>"; }; A69FFB8C1E7018CC0006FEE0 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( A69FFB8D1E7018CC0006FEE0 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = "<group>"; }; A69FFB8E1E7018CC0006FEE0 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( A69FFB8F1E7018CC0006FEE0 /* Base */, ); name = Main.storyboard; sourceTree = "<group>"; }; A69FFB901E7018CC0006FEE0 /* Message.storyboard */ = { isa = PBXVariantGroup; children = ( A69FFB911E7018CC0006FEE0 /* Base */, ); name = Message.storyboard; sourceTree = "<group>"; }; A69FFB921E7018CC0006FEE0 /* Mine.storyboard */ = { isa = PBXVariantGroup; children = ( A69FFB931E7018CC0006FEE0 /* Base */, ); name = Mine.storyboard; sourceTree = "<group>"; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 05130F4621C94B33004EF1BE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = Q38447SL4M; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = PaiaiUIKit/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = FFIB.PaiaiUIKit; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 05130F4721C94B33004EF1BE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = Q38447SL4M; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = PaiaiUIKit/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = FFIB.PaiaiUIKit; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 05130F8221C95373004EF1BE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = Q38447SL4M; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = PaiaiDataKit/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/PaiaiDataKit/wxSDK", ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = FFIB.PaiaiDataKit; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 05130F8321C95373004EF1BE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = Q38447SL4M; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = PaiaiDataKit/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/PaiaiDataKit/wxSDK", ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = FFIB.PaiaiDataKit; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 05130FA621C9E5E9004EF1BE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = "iPhone Distribution: Beijing Jiayilai Trade Co., Ltd. (Q38447SL4M)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = Q38447SL4M; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Paiai_iOS/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.Paiai-iOS"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 05130FA721C9E5E9004EF1BE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = "iPhone Distribution: Beijing Jiayilai Trade Co., Ltd. (Q38447SL4M)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = Q38447SL4M; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = Paiai_iOS/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.Paiai-iOS"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 6CEBD10F1CA8D680004DBDE0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 10.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "-Objc", "-all_load", ); SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 6CEBD1101CA8D680004DBDE0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 10.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "-Objc", "-all_load", ); SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; 6CEBD1121CA8D680004DBDE0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; CLANG_ENABLE_MODULES = NO; CODE_SIGN_ENTITLEMENTS = PaiAi/PaiAi.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution: Beijing Jiayilai Trade Co., Ltd. (Q38447SL4M)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = Q38447SL4M; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", "$(PROJECT_DIR)/PaiAi", "$(PROJECT_DIR)/PaiAi/wxSDK", "$(PROJECT_DIR)/Utility", "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_PREFIX_HEADER = ""; GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; INFOPLIST_FILE = PaiAi/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/PaiAi/wxSDK", "$(PROJECT_DIR)/Paiai/wxSDK", ); ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ""; OTHER_SWIFT_FLAGS = "-DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Swift-bridge.h"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/**"; }; name = Debug; }; 6CEBD1131CA8D680004DBDE0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; CLANG_ENABLE_MODULES = NO; CODE_SIGN_ENTITLEMENTS = PaiAi/PaiAi.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution: Beijing Jiayilai Trade Co., Ltd. (Q38447SL4M)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = Q38447SL4M; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", "$(PROJECT_DIR)/PaiAi", "$(PROJECT_DIR)/PaiAi/wxSDK", "$(PROJECT_DIR)/Utility", "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = PaiAi/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/PaiAi/wxSDK", "$(PROJECT_DIR)/Paiai/wxSDK", ); ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ""; OTHER_SWIFT_FLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Swift-bridge.h"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/**"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 05130F4521C94B33004EF1BE /* Build configuration list for PBXNativeTarget "PaiaiUIKit" */ = { isa = XCConfigurationList; buildConfigurations = ( 05130F4621C94B33004EF1BE /* Debug */, 05130F4721C94B33004EF1BE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 05130F8121C95373004EF1BE /* Build configuration list for PBXNativeTarget "PaiaiDataKit" */ = { isa = XCConfigurationList; buildConfigurations = ( 05130F8221C95373004EF1BE /* Debug */, 05130F8321C95373004EF1BE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 05130FA521C9E5E9004EF1BE /* Build configuration list for PBXNativeTarget "Paiai_iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 05130FA621C9E5E9004EF1BE /* Debug */, 05130FA721C9E5E9004EF1BE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 6CEBD0FA1CA8D680004DBDE0 /* Build configuration list for PBXProject "Paiai" */ = { isa = XCConfigurationList; buildConfigurations = ( 6CEBD10F1CA8D680004DBDE0 /* Debug */, 6CEBD1101CA8D680004DBDE0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 6CEBD1111CA8D680004DBDE0 /* Build configuration list for PBXNativeTarget "Paiai" */ = { isa = XCConfigurationList; buildConfigurations = ( 6CEBD1121CA8D680004DBDE0 /* Debug */, 6CEBD1131CA8D680004DBDE0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 6CEBD0F71CA8D680004DBDE0 /* Project object */; } kodo - Gogs: Go Git Service

説明なし

models.py 32KB

    # -*- coding: utf-8 -*- from django.conf import settings from django.db import models from django.utils.translation import ugettext_lazy as _ from django_models_ext import (BaseModelMixin, ProvinceShortModelMixin, SexModelMixin, upload_file_path, upload_file_url, upload_path) from jsonfield import JSONField from shortuuidfield import ShortUUIDField from TimeConvert import TimeConvert as tc class AdministratorInfo(BaseModelMixin): ADMINISTRATOR = 0 MAINTENANCE = 1 USER_TYPE_TUPLE = ( (ADMINISTRATOR, u'管理员'), (MAINTENANCE, u'维修员'), ) ACTIVATED = 1 DISABLED = 2 DELETED = 3 USER_STATUS_TUPLE = ( (ACTIVATED, u'已激活'), (DISABLED, u'已禁用'), (DELETED, u'已删除'), ) admin_id = ShortUUIDField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'管理员唯一标识', db_index=True, unique=True) admin_type = models.IntegerField(_(u'admin_type'), choices=USER_TYPE_TUPLE, default=ADMINISTRATOR, help_text=u'管理员类型', db_index=True) phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'管理员电话', db_index=True) password = models.CharField(_(u'password'), max_length=255, blank=True, null=True, help_text=u'管理员密码') encryption = models.CharField(_(u'encryption'), max_length=255, blank=True, null=True, help_text=u'管理员密码') name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'管理员姓名') brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS_TUPLE, default=ACTIVATED, help_text=u'管理员状态', db_index=True) class Meta: verbose_name = _(u'管理员信息') verbose_name_plural = _(u'管理员信息') def __unicode__(self): return u'{}-{}'.format(self.name, self.phone) class OperatorInfo(BaseModelMixin): ACTIVATED = 1 DISABLED = 2 DELETED = 3 USER_STATUS_TUPLE = ( (ACTIVATED, u'已激活'), (DISABLED, u'已禁用'), (DELETED, u'已删除'), ) operator_id = ShortUUIDField(_(u'operator_id'), max_length=32, blank=True, null=True, help_text=u'操作员唯一标识', db_index=True, unique=True) phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'操作员电话', db_index=True) password = models.CharField(_(u'password'), max_length=255, blank=True, null=True, help_text=u'操作员密码') encryption = models.CharField(_(u'encryption'), max_length=255, blank=True, null=True, help_text=u'操作员密码') name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'操作员姓名') brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') brand_domain = models.CharField(_(u'brand_domain'), max_length=255, blank=True, null=True, help_text=u'品牌域名') user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS_TUPLE, default=ACTIVATED, help_text=u'操作员状态', db_index=True) class Meta: verbose_name = _(u'操作员信息') verbose_name_plural = _(u'操作员信息') def __unicode__(self): return u'{}-{}'.format(self.name, self.phone) @property def data(self): return { 'operator_id': self.operator_id, 'phone': self.phone, 'name': self.name, } @property def kododata(self): return { 'optor_id': self.operator_id, 'brand_domain': self.brand_domain or settings.KODO_DEFAULT_BRAND_DOMAIN, } class BrandInfo(BaseModelMixin): brand_id = ShortUUIDField(_(u'brand_id'), max_length=32, help_text=u'品牌唯一标识', db_index=True, unique=True) brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') brand_descr = models.TextField(_(u'brand_descr'), max_length=255, blank=True, null=True, help_text=u'品牌描述') tousername = models.CharField(_(u'tousername'), max_length=32, blank=True, null=True, help_text=u'微信公号(ToUserName)', db_index=True, unique=True) brand_logo = models.ImageField(_(u'brand_logo'), upload_to=upload_path, blank=True, null=True, help_text=u'品牌商标') brand_domain = models.CharField(_(u'brand_domain'), max_length=255, blank=True, null=True, help_text=u'品牌域名') position = models.IntegerField(_(u'position'), default=1, help_text=u'排序') class Meta: verbose_name = _(u'品牌信息') verbose_name_plural = _(u'品牌信息') def __unicode__(self): return unicode(self.pk) @property def brand_logo_url(self): return upload_file_url(self.brand_logo) @property def data(self): return { 'brand_id': str(self.pk), 'brand_name': self.brand_name, 'brand_descr': self.brand_descr, } class ModelInfo(BaseModelMixin): brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') jancode = models.CharField(_(u'jancode'), max_length=16, blank=True, null=True, help_text=u'JAN_CODE', db_index=True) model_id = ShortUUIDField(_(u'model_id'), max_length=32, help_text=u'型号唯一标识', db_index=True, unique=True) model_name = models.CharField(_(u'model_name'), max_length=32, blank=True, null=True, help_text=u'型号名称') model_uni_name = models.CharField(_(u'model_uni_name'), max_length=32, blank=True, null=True, help_text=u'型号统一名称') model_full_name = models.CharField(_(u'model_full_name'), max_length=255, blank=True, null=True, help_text=u'型号全名称') model_descr = models.TextField(_(u'model_descr'), max_length=255, blank=True, null=True, help_text=u'型号描述') category = models.CharField(_(u'category'), max_length=32, blank=True, null=True, help_text=u'型号类别', db_index=True) warehouse = models.CharField(_(u'warehouse'), max_length=32, blank=True, null=True, help_text=u'所属仓库', db_index=True) image = models.ImageField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'图片') url = models.CharField(_(u'url'), max_length=255, blank=True, null=True, help_text=u'链接') image2 = models.ImageField(_(u'image2'), upload_to=upload_path, blank=True, null=True, help_text=u'图片2') image3 = models.ImageField(_(u'image3'), upload_to=upload_path, blank=True, null=True, help_text=u'图片3') image4 = models.ImageField(_(u'image4'), upload_to=upload_path, blank=True, null=True, help_text=u'图片4') factory_yuan = models.FloatField(_(u'factory_yuan'), default=1000, help_text=u'出厂价(元)') factory_fee = models.IntegerField(_(u'factory_fee'), default=100000, help_text=u'出厂价(分)') integral = models.IntegerField(_(u'integral'), default=100, help_text=u'积分') position = models.IntegerField(_(u'position'), default=1, help_text=u'排序') display = models.BooleanField(_(u'display'), default=True, help_text=_(u'Display'), db_index=True) class Meta: verbose_name = _(u'型号信息') verbose_name_plural = _(u'型号信息') def __unicode__(self): return unicode(self.pk) @property def image_path(self): return upload_file_path(self.image) @property def image_url(self): return upload_file_url(self.image) @property def image2_path(self): return upload_file_path(self.image2) @property def image2_url(self): return upload_file_url(self.image2) @property def image3_path(self): return upload_file_path(self.image3) @property def image3_url(self): return upload_file_url(self.image3) @property def image4_path(self): return upload_file_path(self.image4) @property def image4_url(self): return upload_file_url(self.image4) @property def images(self): imgs = [] if self.image: imgs.append({ 'image_url': self.image_url, 'url': self.url or '', }) if self.image2: imgs.append({ 'image_url': self.image2_url, 'url': self.url or '', }) if self.image3: imgs.append({ 'image_url': self.image3_url, 'url': self.url or '', }) if self.image4: imgs.append({ 'image_url': self.image4_url, 'url': self.url or '', }) return imgs @property def images2(self): imgs = [] if self.image: imgs.append(self.image_url) if self.image2: imgs.append(self.image2_url) if self.image3: imgs.append(self.image3_url) if self.image4: imgs.append(self.image4_url) return imgs @property def data(self): return { 'jancode': self.jancode, 'model_id': str(self.pk), 'model_name': self.model_name, 'model_descr': self.model_descr, } @property def admindata(self): return { 'jancode': self.jancode, 'ModelID': self.pk, 'model_id': self.model_id, 'model_name': self.model_name, 'model_uni_name': self.model_uni_name, 'model_full_name': self.model_full_name, 'model_descr': self.model_descr, 'category': self.category, 'warehouse': self.warehouse, 'image_path': self.image_path, 'image_url': self.image_url, 'image2_path': self.image2_path, 'image2_url': self.image2_url, 'image3_path': self.image3_path, 'image3_url': self.image3_url, 'image4_path': self.image4_path, 'image4_url': self.image4_url, 'model_imgs2': self.images2, 'factory_yuan': self.factory_yuan, 'integral': self.integral, } fulldata = admindata class ModelImageInfo(BaseModelMixin): model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True) model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称') image = models.ImageField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'图片') url = models.CharField(_(u'url'), max_length=255, blank=True, null=True, help_text=u'链接') position = models.IntegerField(_(u'position'), default=1, help_text=u'排序') class Meta: verbose_name = _(u'型号图片信息') verbose_name_plural = _(u'型号图片信息') def __unicode__(self): return unicode(self.pk) @property def image_url(self): return upload_file_url(self.image) @property def data(self): return { 'image_url': self.image_url, 'url': self.url, } class DistributorInfo(BaseModelMixin): brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') distributor_id = ShortUUIDField(_(u'distributor_id'), max_length=32, help_text=u'经销商唯一标识', db_index=True, unique=True) distributor_name = models.CharField(_(u'distributor_name'), max_length=255, blank=True, null=True, help_text=u'经销商名称') distributor_short_name = models.CharField(_(u'distributor_short_name'), max_length=8, blank=True, null=True, help_text=u'经销商简称') distributor_descr = models.TextField(_(u'distributor_descr'), max_length=255, blank=True, null=True, help_text=u'经销商描述') distributor_province_code = models.CharField(_(u'distributor_province_code'), max_length=6, blank=True, null=True, help_text=u'经销商所在省份编码') distributor_province_name = models.CharField(_(u'distributor_province_name'), max_length=3, choices=ProvinceShortModelMixin.PROVINCE_NAME_TUPLE, default=ProvinceShortModelMixin.PROVINCE_DEFAULT_NAME, blank=True, null=True, help_text=u'经销商所在省份名称') position = models.IntegerField(_(u'position'), default=1, help_text=u'排序') class Meta: verbose_name = _(u'经销商信息') verbose_name_plural = _(u'经销商信息') def __unicode__(self): return unicode(self.pk) @property def data(self): return { 'distributor_id': str(self.pk), 'distributor_name': self.distributor_name, 'distributor_short_name': self.distributor_short_name, 'distributor_descr': self.distributor_descr, } @property def admindata(self): return { 'distributor_id': self.distributor_id, 'distributor_name': self.distributor_name, 'distributor_short_name': self.distributor_short_name, 'distributor_descr': self.distributor_descr, 'province_code': self.distributor_province_code, 'province_name': self.distributor_province_name, } class SaleclerkInfo(BaseModelMixin, SexModelMixin): REFUSED = -1 UNVERIFIED = 0 ACTIVATED = 1 DISABLED = 2 DELETED = 3 ASSIGN = 10 USER_STATUS = ( (REFUSED, u'已拒绝'), (UNVERIFIED, u'未验证'), (ACTIVATED, u'已激活'), (DISABLED, u'已禁用'), (DELETED, u'已删除'), (ASSIGN, u'已分配'), ) brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') distributor_id = models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True) distributor_name = models.CharField(_(u'distributor_name'), max_length=32, blank=True, null=True, help_text=u'经销商名称') clerk_id = ShortUUIDField(_(u'clerk_id'), max_length=32, help_text=u'店员唯一标识', db_index=True, unique=True) clerk_name = models.CharField(_(u'clerk_name'), max_length=32, blank=True, null=True, help_text=u'店员名称') clerk_sex = models.IntegerField(_(u'clerk_sex'), choices=SexModelMixin.SEX_TUPLE, default=SexModelMixin.MALE, help_text=u'店员性别', db_index=True) clerk_phone = models.CharField(_(u'clerk_phone'), max_length=11, blank=True, null=True, help_text=u'店员联系电话') unionid = models.CharField(_(u'unionid'), max_length=32, blank=True, null=True, help_text=u'微信 UnionID', db_index=True) openid = models.CharField(_(u'openid'), max_length=32, blank=True, null=True, help_text=u'微信 OpenID', db_index=True) num = models.IntegerField(_(u'num'), default=0, help_text=u'支数') integral = models.IntegerField(_(u'integral'), default=0, help_text=u'积分') total_integral = models.IntegerField(_(u'total_integral'), default=0, help_text=u'全部积分') user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED, help_text=u'用户状态', db_index=True) refused_reason = models.TextField(_(u'refused_reason'), blank=True, null=True, help_text=u'审核拒绝原因') is_auth = models.BooleanField(_(u'is_auth'), default=False, help_text=_(u'是否已授权'), db_index=True) test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True) class Meta: verbose_name = _(u'经销商销售员信息') verbose_name_plural = _(u'经销商销售员信息') unique_together = ( ('unionid', 'brand_id'), ) def __unicode__(self): return unicode(self.pk) @property def admindata(self): return { 'distributor_id': self.distributor_id, 'distributor_name': self.distributor_name, 'clerk_id': self.clerk_id, 'clerk_name': self.clerk_name, 'clerk_sex': self.clerk_sex, 'clerk_phone': self.clerk_phone, 'num': self.num, 'integral': self.integral, # TODO: 'month_integral': self.integral, 'total_integral': self.total_integral, 'status': self.user_status, 'refused_reason': self.refused_reason, 'is_auth': self.is_auth, } data = admindata class BrandModelDistributorPriceInfo(BaseModelMixin): brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True) model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称') distributor_id = models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True) distributor_name = models.CharField(_(u'distributor_name'), max_length=255, blank=True, null=True, help_text=u'经销商名称') factory_yuan = models.FloatField(_(u'factory_yuan'), default=1000, help_text=u'出厂价(元)') factory_fee = models.IntegerField(_(u'factory_fee'), default=100000, help_text=u'出厂价(分)') integral = models.IntegerField(_(u'integral'), default=100, help_text=u'积分') class Meta: verbose_name = _(u'品牌/型号/代理商价格信息') verbose_name_plural = _(u'品牌/型号/代理商价格信息') unique_together = ( ('brand_id', 'model_id', 'distributor_id'), ) def __unicode__(self): return unicode(self.pk) class LatestAppInfo(BaseModelMixin): brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) latest_adr_version_code = models.IntegerField(_(u'latest_adr_version_code'), default=0, help_text=u'最新安卓版本号') latest_adr_version_name = models.CharField(_(u'latest_adr_version_name'), max_length=16, blank=True, null=True, help_text=u'最新安卓版本名') latest_adr_app = models.FileField(_(u'latest_adr_app'), upload_to=upload_path, blank=True, null=True, help_text=u'最新版安卓 APP') latest_adr_url = models.URLField(_(u'latest_adr_url'), max_length=255, blank=True, null=True, help_text=u'最新版 APP 链接') latest_ios_version_code = models.IntegerField(_(u'latest_ios_version_code'), default=0, help_text=u'最新 iOS 版本号') latest_ios_version_name = models.CharField(_(u'latest_ios_version_name'), max_length=16, blank=True, null=True, help_text=u'最新 iOS 版本名') latest_ios_url = models.URLField(_(u'latest_ios_url'), max_length=255, blank=True, null=True, help_text=u'最新版 iOS 链接') class Meta: verbose_name = _(u'升级配置信息') verbose_name_plural = _(u'升级配置信息') def __unicode__(self): return u'{0.pk}'.format(self) @property def final_latest_adr_url(self): return self.latest_adr_url or upload_file_url(self.latest_adr_app) @property def data(self): return { 'latest_adr_version_code': self.latest_adr_version_code, 'latest_adr_version_name': self.latest_adr_version_name, 'latest_adr_url': self.final_latest_adr_url, 'latest_ios_version_code': self.latest_ios_version_code, 'latest_ios_version_name': self.latest_ios_version_name, 'latest_ios_url': self.latest_ios_url, } @property def adr(self): return { 'latest_adr_version_code': self.latest_adr_version_code, 'latest_adr_version_name': self.latest_adr_version_name, 'latest_adr_url': self.final_latest_adr_url, } class LatestAppScreenInfo(BaseModelMixin): brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) latest_adr_version_code = models.IntegerField(_(u'latest_adr_version_code'), default=0, help_text=u'最新安卓版本号') latest_adr_version_name = models.CharField(_(u'latest_adr_version_name'), max_length=16, blank=True, null=True, help_text=u'最新安卓版本名') latest_adr_app = models.FileField(_(u'latest_adr_app'), upload_to=upload_path, blank=True, null=True, help_text=u'最新版安卓 APP') latest_adr_url = models.URLField(_(u'latest_adr_url'), max_length=255, blank=True, null=True, help_text=u'最新版 APP 链接') latest_ios_version_code = models.IntegerField(_(u'latest_ios_version_code'), default=0, help_text=u'最新 iOS 版本号') latest_ios_version_name = models.CharField(_(u'latest_ios_version_name'), max_length=16, blank=True, null=True, help_text=u'最新 iOS 版本名') latest_ios_url = models.URLField(_(u'latest_ios_url'), max_length=255, blank=True, null=True, help_text=u'最新版 iOS 链接') class Meta: verbose_name = _(u'升级配置信息(数据大屏)') verbose_name_plural = _(u'升级配置信息(数据大屏)') def __unicode__(self): return u'{0.pk}'.format(self) @property def final_latest_adr_url(self): return self.latest_adr_url or upload_file_url(self.latest_adr_app) @property def data(self): return { 'latest_adr_version_code': self.latest_adr_version_code, 'latest_adr_version_name': self.latest_adr_version_name, 'latest_adr_url': self.final_latest_adr_url, 'latest_ios_version_code': self.latest_ios_version_code, 'latest_ios_version_name': self.latest_ios_version_name, 'latest_ios_url': self.latest_ios_url, } @property def adr(self): return { 'latest_adr_version_code': self.latest_adr_version_code, 'latest_adr_version_name': self.latest_adr_version_name, 'latest_adr_url': self.final_latest_adr_url, } class ConsumeImpressionInfo(BaseModelMixin): UNKNOWN = 0 MALE = 1 FEMALE = 2 SEX_TUPLE = ( (UNKNOWN, u'未知'), (MALE, u'男'), (FEMALE, u'女'), ) LT20 = 1 GTE20LT40 = 2 GTE40LT60 = 3 GTE60 = 4 AGE_RANGE_TUPLE = ( (UNKNOWN, u'未知'), (LT20, u'20岁以下'), (GTE20LT40, u'20-40岁'), (GTE40LT60, u'40-60岁'), (GTE60, u'60岁以上'), ) clerk_id = models.CharField(_(u'clerk_id'), max_length=32, blank=True, null=True, help_text=u'店员唯一标识', db_index=True) brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True) serialNo = models.CharField(_(u'serialNo'), max_length=16, blank=True, null=True, help_text=u'序列号', db_index=True) sex = models.IntegerField(_(u'sex'), choices=SEX_TUPLE, default=UNKNOWN, help_text=u'性别') rage = models.IntegerField(_(u'rage'), choices=AGE_RANGE_TUPLE, default=UNKNOWN, help_text=u'年龄段') identity = models.CharField(_(u'identity'), max_length=255, blank=True, null=True, help_text=u'身份') purpose = models.CharField(_(u'purpose'), max_length=255, blank=True, null=True, help_text=u'用途') class Meta: verbose_name = _(u'客户印象') verbose_name_plural = _(u'客户印象') def __unicode__(self): return unicode(self.pk) @property def data(self): return { 'sex': self.sex, 'rage': self.rage, 'identity': self.identity, 'purpose': self.purpose, } class ConsumeInfoSubmitLogInfo(BaseModelMixin): user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户手机', db_index=True) iv = models.CharField(_(u'iv'), max_length=255, blank=True, null=True, help_text=u'iv') encryptedData = models.CharField(_(u'encryptedData'), max_length=255, blank=True, null=True, help_text=u'encryptedData') lat = models.FloatField(_(u'lat'), default=1.0, help_text=u'纬度') lon = models.FloatField(_(u'lon'), default=1.0, help_text=u'经度') brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True) model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称') distributor_id = models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True) distributor_name = models.CharField(_(u'distributor_name'), max_length=255, blank=True, null=True, help_text=u'经销商名称') serialNo = models.CharField(_(u'serialNo'), max_length=16, blank=True, null=True, help_text=u'序列号', db_index=True) verifyResult = models.IntegerField(_(u'verifyResult'), default=0, help_text=u'验证结果', db_index=True) dupload = models.BooleanField(_(u'dupload'), default=False, help_text=_(u'是否为重复提交'), db_index=True) submit_during_activity = models.BooleanField(_(u'submit_during_activity'), default=False, help_text=_(u'是否为活动期间上传'), db_index=True) activity_id = models.IntegerField(_(u'activity_id'), default=0, help_text=_(u'活动唯一标识')) coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'维修券过期时间')) coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=_(u'维修券金额(单位:分)')) has_used = models.BooleanField(_(u'has_used'), default=False, help_text=_(u'是否已核销'), db_index=True) admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'核销员唯一标识', db_index=True) used_at = models.DateTimeField(_(u'used_at'), blank=True, null=True, help_text=_(u'维修券核销时间')) test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True) class Meta: verbose_name = _(u'消费者信息提交记录') verbose_name_plural = _(u'消费者信息提交记录') def __unicode__(self): return unicode(self.pk) @property def final_coupon_expire_at(self): if not self.coupon_expire_at: return '' y = tc.local_string(self.coupon_expire_at, format='%Y') m = tc.local_string(self.coupon_expire_at, format='%m') d = tc.local_string(self.coupon_expire_at, format='%d') return u'{}年{}月{}日'.format(y, m, d) @property def model_info(self): try: info = ModelInfo.objects.get(model_id=self.model_id).fulldata except ModelInfo.DoesNotExist: info = {} return info @property def coupon_info(self): return { 'coupon_expire_at': '', 'coupon_value': 0, 'coupon_has_expired': True, } @property def coupon_info2(self): return self.coupon_info, @property def data(self): if self.submit_during_activity: try: act = ActivityInfo.objects.get(pk=self.activity_id) except ActivityInfo.DoesNotExist: act = None else: act = None return { 'lat': self.lat, 'lon': self.lon, 'brand_id': self.brand_id, 'brand_name': self.brand_name, 'model_id': self.model_id, 'model_name': self.model_name, 'model_info': self.model_info, 'serialNo': self.serialNo, 'verifyResult': self.verifyResult, 'submit_during_activity': self.submit_during_activity, 'coupon_info': act.coupon_info2(created_at=self.created_at) if act else self.coupon_info2, 'final_coupon_info': act.coupon_info(created_at=self.created_at) if act else self.coupon_info, 'has_used': self.has_used, 'used_at': self.used_at, } class ActivityInfo(BaseModelMixin): FIXED_EXPIRED_TIME = 0 CHANGED_EXPIRED_TIME = 1 COUPON_EXPIRED_TIME_TUPLE = ( (FIXED_EXPIRED_TIME, u'固定结束时间'), (CHANGED_EXPIRED_TIME, u'可变结束时间'), ) brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) activity_name = models.CharField(_(u'activity_name'), max_length=255, blank=True, null=True, help_text=u'活动名称') model_uni_names = JSONField(_(u'model_uni_names'), default=[], blank=True, null=True, help_text=u'型号统一名称列表') start_at = models.DateTimeField(_(u'start_at'), help_text=_(u'start_at')) end_at = models.DateTimeField(_(u'end_at'), help_text=_(u'end_at')) coupon_expire_type = models.IntegerField(_(u'coupon_expire_type'), choices=COUPON_EXPIRED_TIME_TUPLE, default=FIXED_EXPIRED_TIME, help_text=_(u'维修券类型')) coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=_(u'维修券有效时间(单位:天)')) coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'维修券过期时间')) coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=_(u'维修券金额(单位:分)')) class Meta: verbose_name = _(u'活动信息') verbose_name_plural = _(u'活动信息') def __unicode__(self): return unicode(self.pk) def final_expire_at(self, created_at=None): if self.coupon_expire_type == ActivityInfo.FIXED_EXPIRED_TIME: return self.coupon_expire_at return tc.utc_datetime(dt=created_at, days=self.coupon_valid_period) def final_coupon_expire_at(self, created_at=None): final_expire_at = self.final_expire_at(created_at=created_at) if not final_expire_at: return '' y = tc.local_string(final_expire_at, format='%Y') m = tc.local_string(final_expire_at, format='%m') d = tc.local_string(final_expire_at, format='%d') return u'{}年{}月{}日'.format(y, m, d) def has_unexpired_activity(self, model_name): return (self.model_uni_names and model_name in self.model_uni_names) and (self.start_at <= tc.utc_datetime() < self.end_at) def coupon_info(self, created_at=None): return { 'coupon_expire_at': self.final_coupon_expire_at(created_at=created_at), 'coupon_value': self.coupon_value, 'coupon_has_expired': tc.utc_datetime() >= self.final_expire_at(created_at=created_at), } def coupon_info2(self, created_at=None): return self.coupon_info(created_at=created_at),