diff --git a/Veloria.xcodeproj/project.pbxproj b/Veloria.xcodeproj/project.pbxproj index 00ed4bc..7e7a17e 100644 --- a/Veloria.xcodeproj/project.pbxproj +++ b/Veloria.xcodeproj/project.pbxproj @@ -146,6 +146,12 @@ BF5E75D32DE5692D00DE9DFE /* JXBaseAnimatedTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5E75C12DE5692D00DE9DFE /* JXBaseAnimatedTransition.swift */; }; BF5E75D52DE56B2000DE9DFE /* VPHomeCagetoryRecommandContentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5E75D42DE56B2000DE9DFE /* VPHomeCagetoryRecommandContentCell.swift */; }; BF5E75DB2DE5B8B700DE9DFE /* VPMarqueeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5E75DA2DE5B8B700DE9DFE /* VPMarqueeView.swift */; }; + BFF5AFA42DE6F15E0044227A /* VPMeVipCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5AFA32DE6F15E0044227A /* VPMeVipCell.swift */; }; + BFF5AFA62DE700420044227A /* VPMeVipPrivilegeItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5AFA52DE700420044227A /* VPMeVipPrivilegeItemView.swift */; }; + BFF5AFA82DE704DC0044227A /* VPMeCoinCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5AFA72DE704DC0044227A /* VPMeCoinCell.swift */; }; + BFF5AFAA2DE7070A0044227A /* VPMeCoinItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5AFA92DE7070A0044227A /* VPMeCoinItemView.swift */; }; + BFF5AFAC2DE70CE20044227A /* VPMeToolCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5AFAB2DE70CE20044227A /* VPMeToolCell.swift */; }; + BFF5AFAE2DE717BB0044227A /* VPVipViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5AFAD2DE717BB0044227A /* VPVipViewController.swift */; }; F939C04AD4003BA127F15C28 /* Pods_Veloria.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F57E87E765BF8D72A43DCA /* Pods_Veloria.framework */; }; /* End PBXBuildFile section */ @@ -298,6 +304,12 @@ BF5E75C92DE5692D00DE9DFE /* UIViewController+JXTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+JXTransition.swift"; sourceTree = ""; }; BF5E75D42DE56B2000DE9DFE /* VPHomeCagetoryRecommandContentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPHomeCagetoryRecommandContentCell.swift; sourceTree = ""; }; BF5E75DA2DE5B8B700DE9DFE /* VPMarqueeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMarqueeView.swift; sourceTree = ""; }; + BFF5AFA32DE6F15E0044227A /* VPMeVipCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeVipCell.swift; sourceTree = ""; }; + BFF5AFA52DE700420044227A /* VPMeVipPrivilegeItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeVipPrivilegeItemView.swift; sourceTree = ""; }; + BFF5AFA72DE704DC0044227A /* VPMeCoinCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeCoinCell.swift; sourceTree = ""; }; + BFF5AFA92DE7070A0044227A /* VPMeCoinItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeCoinItemView.swift; sourceTree = ""; }; + BFF5AFAB2DE70CE20044227A /* VPMeToolCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeToolCell.swift; sourceTree = ""; }; + BFF5AFAD2DE717BB0044227A /* VPVipViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPVipViewController.swift; sourceTree = ""; }; E0BDA3570E00C90877E45AA0 /* Pods-VideoPlayer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer.debug.xcconfig"; path = "Target Support Files/Pods-VideoPlayer/Pods-VideoPlayer.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -836,6 +848,7 @@ BF0FA7AE2DE443E000C9E5F2 /* VPMeViewController.swift */, BF5E75AE2DE4632200DE9DFE /* VPAboutUsViewController.swift */, BF5E75B02DE4656600DE9DFE /* VPCampaignWebViewController.swift */, + BFF5AFAD2DE717BB0044227A /* VPVipViewController.swift */, ); path = Controller; sourceTree = ""; @@ -847,6 +860,11 @@ BF0FA7BB2DE4563300C9E5F2 /* VPMeUserInfoCell.swift */, BF5E75BB2DE546AD00DE9DFE /* VPAboutUsCell.swift */, BF5E75BD2DE54B2800DE9DFE /* VPAboutUsHeaderView.swift */, + BFF5AFA32DE6F15E0044227A /* VPMeVipCell.swift */, + BFF5AFA52DE700420044227A /* VPMeVipPrivilegeItemView.swift */, + BFF5AFA72DE704DC0044227A /* VPMeCoinCell.swift */, + BFF5AFA92DE7070A0044227A /* VPMeCoinItemView.swift */, + BFF5AFAB2DE70CE20044227A /* VPMeToolCell.swift */, ); path = View; sourceTree = ""; @@ -1078,6 +1096,7 @@ BF0FA7832DE1533E00C9E5F2 /* VPGradientLabel.swift in Sources */, BF0FA7B12DE447EB00C9E5F2 /* VPMeItem.swift in Sources */, 1B056E2C2DDAC0FD007EE38D /* SceneDelegate.swift in Sources */, + BFF5AFA42DE6F15E0044227A /* VPMeVipCell.swift in Sources */, BF0FA75D2DDF208400C9E5F2 /* VPExplorePlayerControlView.swift in Sources */, BF5E75CB2DE5692D00DE9DFE /* UINavigationController+JXTransition.swift in Sources */, BF5E75CC2DE5692D00DE9DFE /* JXTransitionDefine.swift in Sources */, @@ -1085,10 +1104,12 @@ BF5E75CE2DE5692D00DE9DFE /* JXPushAnimatedTransition.swift in Sources */, BF5E75CF2DE5692D00DE9DFE /* UIViewController+JXTransition.swift in Sources */, BF5E75D02DE5692D00DE9DFE /* UIGestureRecognizer+JXTransition.swift in Sources */, + BFF5AFA62DE700420044227A /* VPMeVipPrivilegeItemView.swift in Sources */, BF5E75D12DE5692D00DE9DFE /* JXPopAnimatedTransition.swift in Sources */, BF5E75D22DE5692D00DE9DFE /* JXNavigationInteractiveTransition.swift in Sources */, BF5E75D32DE5692D00DE9DFE /* JXBaseAnimatedTransition.swift in Sources */, 1B056E462DDAC370007EE38D /* UIScreen+VPAdd.swift in Sources */, + BFF5AFAA2DE7070A0044227A /* VPMeCoinItemView.swift in Sources */, BF0FA7692DE0502900C9E5F2 /* VPEpisodeCell.swift in Sources */, BF5E75BE2DE54B2800DE9DFE /* VPAboutUsHeaderView.swift in Sources */, BF0FA73D2DDED2D000C9E5F2 /* VPVideoAPI.swift in Sources */, @@ -1119,6 +1140,8 @@ BF0FA7912DE16CBF00C9E5F2 /* VPSearchHistoryView.swift in Sources */, BF0FA7992DE1951A00C9E5F2 /* VPMyListViewController.swift in Sources */, BF0FA7452DDF027900C9E5F2 /* VPPlayer.swift in Sources */, + BFF5AFA82DE704DC0044227A /* VPMeCoinCell.swift in Sources */, + BFF5AFAE2DE717BB0044227A /* VPVipViewController.swift in Sources */, BF0FA70E2DDC6ACC00C9E5F2 /* VPHomeItemContentCell.swift in Sources */, BF0FA6D72DDC5BE100C9E5F2 /* VPURLPath.swift in Sources */, 1B056E5B2DDACD80007EE38D /* UIColor+VPAdd.swift in Sources */, @@ -1146,6 +1169,7 @@ BF0FA73F2DDEF26E00C9E5F2 /* VPHomeSearchButton.swift in Sources */, 1B056E512DDACBE5007EE38D /* VPViewController.swift in Sources */, BF0FA7122DDC6D2C00C9E5F2 /* VPHomeModuleItem.swift in Sources */, + BFF5AFAC2DE70CE20044227A /* VPMeToolCell.swift in Sources */, BF5E75B32DE465EC00DE9DFE /* Dictionary+SPAdd.swift in Sources */, BF0FA7162DDC78FF00C9E5F2 /* ZKCycleScrollViewFlowLayout.swift in Sources */, BF0FA7172DDC78FF00C9E5F2 /* ZKCycleScrollView.swift in Sources */, diff --git a/Veloria/Base/Extension/UIColor+VPAdd.swift b/Veloria/Base/Extension/UIColor+VPAdd.swift index 6e05cda..a36ff5e 100644 --- a/Veloria/Base/Extension/UIColor+VPAdd.swift +++ b/Veloria/Base/Extension/UIColor+VPAdd.swift @@ -105,4 +105,16 @@ extension UIColor { static func colorC4C4C4(alpha: CGFloat = 1) -> UIColor { return UIColor(rgb: 0xC4C4C4, alpha: alpha) } + + static func color06DEAD(alpha: CGFloat = 1) -> UIColor { + return UIColor(rgb: 0x06DEAD, alpha: alpha) + } + + static func colorE5E5E5(alpha: CGFloat = 1) -> UIColor { + return UIColor(rgb: 0xE5E5E5, alpha: alpha) + } + + static func colorD3D3D3(alpha: CGFloat = 1) -> UIColor { + return UIColor(rgb: 0xD3D3D3, alpha: alpha) + } } diff --git a/Veloria/Class/Me/Controller/VPMeViewController.swift b/Veloria/Class/Me/Controller/VPMeViewController.swift index 2fc66d2..0a026de 100644 --- a/Veloria/Class/Me/Controller/VPMeViewController.swift +++ b/Veloria/Class/Me/Controller/VPMeViewController.swift @@ -15,6 +15,16 @@ class VPMeViewController: VPViewController { VPMeItem(cellKey: .userInfo), ], [ + VPMeItem(cellKey: .vip) + ], + [ + VPMeItem(cellKey: .coin) + ], + [ + VPMeItem(cellKey: .tool) + ], + [ + VPMeItem(icon: UIImage(named: "me_item_icon_05"), title: "Language".localized, type: .language, cellKey: .normal), VPMeItem(icon: UIImage(named: "me_item_icon_01"), title: "Privacy Policy".localized, type: .privacyPolicy, cellKey: .normal), VPMeItem(icon: UIImage(named: "me_item_icon_02"), title: "User Agreement".localized, type: .userAgreement, cellKey: .normal), // VPMeItem(icon: UIImage(named: "me_item_icon_04"), title: "Help Center".localized, type: .feedback, cellKey: .normal), @@ -31,11 +41,15 @@ class VPMeViewController: VPViewController { tableView.delegate = self tableView.dataSource = self tableView.separatorStyle = .none + tableView.contentInset = .init(top: 0, left: 0, bottom: UIScreen.customTabBarHeight, right: 0) tableView.vp_addRefreshHeader { [weak self] in self?.handleHeaderRefresh(nil) } tableView.register(VPMeCell.self, forCellReuseIdentifier: VPMeItem.CellKey.normal.rawValue) tableView.register(VPMeUserInfoCell.self, forCellReuseIdentifier: VPMeItem.CellKey.userInfo.rawValue) + tableView.register(VPMeVipCell.self, forCellReuseIdentifier: VPMeItem.CellKey.vip.rawValue) + tableView.register(VPMeCoinCell.self, forCellReuseIdentifier: VPMeItem.CellKey.coin.rawValue) + tableView.register(VPMeToolCell.self, forCellReuseIdentifier: VPMeItem.CellKey.tool.rawValue) return tableView }() @@ -61,7 +75,9 @@ class VPMeViewController: VPViewController { } override func handleHeaderRefresh(_ completer: (() -> Void)?) { - self.requestUserInfo() + self.requestUserInfo { [weak self] in + self?.tableView.vp_endHeaderRefreshing() + } } } @@ -89,6 +105,8 @@ extension VPMeViewController: UITableViewDelegate, UITableViewDataSource { cell.item = item } else if let cell = cell as? VPMeUserInfoCell { cell.userInfo = VPLoginManager.manager.userInfo + } else if let cell = cell as? VPMeCoinCell { + cell.userInfo = VPLoginManager.manager.userInfo } return cell @@ -104,14 +122,14 @@ extension VPMeViewController: UITableViewDelegate, UITableViewDataSource { func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { if section == 0 { - return 0.1 + return CGFLOAT_MIN } else { return 14 } } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { - return 0.1 + return CGFLOAT_MIN } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { @@ -144,9 +162,11 @@ extension VPMeViewController { ///获取用户信息 - private func requestUserInfo() { + private func requestUserInfo(completer: (() -> Void)? = nil) { VPLoginManager.manager.updateUserInfo { [weak self] in self?.tableView.reloadData() + + completer?() } } } diff --git a/Veloria/Class/Me/Controller/VPVipViewController.swift b/Veloria/Class/Me/Controller/VPVipViewController.swift new file mode 100644 index 0000000..4eb45c7 --- /dev/null +++ b/Veloria/Class/Me/Controller/VPVipViewController.swift @@ -0,0 +1,25 @@ +// +// VPVipViewController.swift +// Veloria +// +// Created by 湖南秦九 on 2025/5/28. +// + +import UIKit + +class VPVipViewController: VPViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + setNavigationNormalStyle() + } + + +} diff --git a/Veloria/Class/Me/Model/VPMeItem.swift b/Veloria/Class/Me/Model/VPMeItem.swift index 912340d..7c86c08 100644 --- a/Veloria/Class/Me/Model/VPMeItem.swift +++ b/Veloria/Class/Me/Model/VPMeItem.swift @@ -17,11 +17,15 @@ struct VPMeItem { case civizatioConvention case informationSharing case persoInforDisclosure + case language } enum CellKey: String { case normal case userInfo + case vip + case coin + case tool } var icon: UIImage? diff --git a/Veloria/Class/Me/View/VPMeCoinCell.swift b/Veloria/Class/Me/View/VPMeCoinCell.swift new file mode 100644 index 0000000..4ce509d --- /dev/null +++ b/Veloria/Class/Me/View/VPMeCoinCell.swift @@ -0,0 +1,79 @@ +// +// VPMeCoinCell.swift +// Veloria +// +// Created by 湖南秦九 on 2025/5/28. +// + +import UIKit + +class VPMeCoinCell: VPTableViewCell { + + var userInfo: VPUserInfo? { + didSet { + coinView1.count = userInfo?.coin_left_total ?? 0 + coinView2.count = userInfo?.send_coin_left_total ?? 0 + } + } + + private lazy var lineView: UIView = { + let view = UIView() + view.backgroundColor = .colorFFFFFF(alpha: 0.27) + return view + }() + + private lazy var coinView1: VPMeCoinItemView = { + let view = VPMeCoinItemView() + view.title = "Conins".localized + return view + }() + + private lazy var coinView2: VPMeCoinItemView = { + let view = VPMeCoinItemView() + view.title = "Donate".localized + return view + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + backgroundColor = .colorFFFFFF(alpha: 0.1) + + vp_setupUI() + } + + @MainActor required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +extension VPMeCoinCell { + + private func vp_setupUI() { + addSubview(lineView) + addSubview(coinView1) + addSubview(coinView2) + + lineView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalToSuperview().offset(15) + make.bottom.equalToSuperview().offset(-17) + make.width.equalTo(1) + make.height.equalTo(20) + } + + coinView1.snp.makeConstraints { make in + make.centerY.equalTo(lineView) + make.left.equalToSuperview().offset(10) + make.right.equalTo(lineView.snp.left).offset(-10) + } + + coinView2.snp.makeConstraints { make in + make.centerY.equalTo(lineView) + make.left.equalTo(lineView.snp.right).offset(10) + make.right.equalToSuperview().offset(-10) + } + + } + +} diff --git a/Veloria/Class/Me/View/VPMeCoinItemView.swift b/Veloria/Class/Me/View/VPMeCoinItemView.swift new file mode 100644 index 0000000..628ff02 --- /dev/null +++ b/Veloria/Class/Me/View/VPMeCoinItemView.swift @@ -0,0 +1,93 @@ +// +// VPMeCoinItemView.swift +// Veloria +// +// Created by 湖南秦九 on 2025/5/28. +// + +import UIKit + +class VPMeCoinItemView: UIView { + + + var title: String? { + didSet { + titleLabel.text = title + } + } + + var count: Int = 0 { + didSet { + countLabel.text = "\(count)" + } + } + + private lazy var contentView: UIView = { + let view = UIView() + return view + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = .fontRegular(ofSize: 14) + label.textColor = .colorD3D3D3() + return label + }() + + private lazy var iconImageView: UIImageView = { + let imageView = UIImageView(image: UIImage(named: "coin_icon_01")) + return imageView + }() + + private lazy var countLabel: UILabel = { + let label = UILabel() + label.font = .fontBold(ofSize: 15) + label.textColor = .colorFFFFFF() + label.text = "0" + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + + vp_setupUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + +} + +extension VPMeCoinItemView { + + private func vp_setupUI() { + addSubview(contentView) + contentView.addSubview(titleLabel) + contentView.addSubview(iconImageView) + contentView.addSubview(countLabel) + + contentView.snp.makeConstraints { make in + make.center.equalToSuperview() + } + + titleLabel.snp.makeConstraints { make in + make.left.equalToSuperview() + make.centerY.equalToSuperview() + } + + iconImageView.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.left.equalTo(titleLabel.snp.right).offset(17) + } + + countLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.right.equalToSuperview() + make.left.equalTo(iconImageView.snp.right).offset(4) + } + + } + +} diff --git a/Veloria/Class/Me/View/VPMeToolCell.swift b/Veloria/Class/Me/View/VPMeToolCell.swift new file mode 100644 index 0000000..66b40bd --- /dev/null +++ b/Veloria/Class/Me/View/VPMeToolCell.swift @@ -0,0 +1,77 @@ +// +// VPMeToolCell.swift +// Veloria +// +// Created by 湖南秦九 on 2025/5/28. +// + +import UIKit + +class VPMeToolCell: VPTableViewCell { + + + private lazy var stackView: UIStackView = { + let view = UIStackView(arrangedSubviews: [walletButton, storeButton, rewardsButton, favoritesButton]) + view.axis = .horizontal + view.distribution = .fillEqually + view.alignment = .center + return view + }() + + private lazy var walletButton: UIButton = { + let button = self.createButton(icon: UIImage(named: "wallet_icon_01"), title: "Wallet".localized) + return button + }() + + private lazy var storeButton: UIButton = { + let button = self.createButton(icon: UIImage(named: "store_icon_01"), title: "Store".localized) + return button + }() + + private lazy var rewardsButton: UIButton = { + let button = self.createButton(icon: UIImage(named: "rewards_icon_01"), title: "Rewards".localized) + return button + }() + + private lazy var favoritesButton: UIButton = { + let button = self.createButton(icon: UIImage(named: "favorites_icon_01"), title: "Favorites".localized) + return button + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + contentView.backgroundColor = .colorFFFFFF(alpha: 0.1) + + vp_setupUI() + } + + @MainActor required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func createButton(icon: UIImage?, title: String) -> UIButton { + let button = JXButton(type: .custom) + button.setTitle(title, for: .normal) + button.jx_font = .fontRegular(ofSize: 12) + button.setTitleColor(.colorFFFFFF(), for: .normal) + button.titleDirection = .down + button.setImage(icon, for: .normal) + button.space = 0 + return button + } + +} + +extension VPMeToolCell { + + private func vp_setupUI() { + contentView.addSubview(stackView) + + stackView.snp.makeConstraints { make in + make.left.right.top.bottom.equalToSuperview() + make.height.equalTo(105) + } + + } + +} diff --git a/Veloria/Class/Me/View/VPMeVipCell.swift b/Veloria/Class/Me/View/VPMeVipCell.swift new file mode 100644 index 0000000..39e44fc --- /dev/null +++ b/Veloria/Class/Me/View/VPMeVipCell.swift @@ -0,0 +1,173 @@ +// +// VPMeVipCell.swift +// Veloria +// +// Created by 湖南秦九 on 2025/5/28. +// + +import UIKit + +class VPMeVipCell: VPTableViewCell { + + private lazy var bgView: UIView = { + let view = VPGradientView() + view.colors = [UIColor.color06DEAD(alpha: 0.32).cgColor, UIColor.colorFFFFFF(alpha: 0.05).cgColor] + view.locations = [0, 1] + view.startPoint = .init(x: 0, y: 0.5) + view.endPoint = .init(x: 1, y: 0.5) + let tap = UITapGestureRecognizer(target: self, action: #selector(handleBgView)) + view.addGestureRecognizer(tap) + return view + }() + + private lazy var bgIconImageView: UIImageView = { + let imageView = UIImageView(image: UIImage(named: "vip_icon_01")) + return imageView + }() + + private lazy var vipIconImageView: UIImageView = { + let imageView = UIImageView(image: UIImage(named: "vip_icon_02")) + imageView.setContentHuggingPriority(.required, for: .horizontal) + imageView.setContentCompressionResistancePriority(.required, for: .horizontal) + return imageView + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = .fontBold(ofSize: 15) + label.textColor = .colorFFFFFF() + label.text = "Join VIP".localized + return label + }() + + private lazy var subtitleLabel: UILabel = { + let label = UILabel() + label.font = .fontRegular(ofSize: 12) + label.textColor = .colorFFFFFF() + label.text = "kVipTipText1".localized + return label + }() + + private lazy var itemView1: VPMeVipPrivilegeItemView = { + let view = VPMeVipPrivilegeItemView() + view.icon = UIImage(named: "privilege_icon_01") + view.title = "kVipPrivilegeText1".localized + return view + }() + + private lazy var itemView2: VPMeVipPrivilegeItemView = { + let view = VPMeVipPrivilegeItemView() + view.icon = UIImage(named: "privilege_icon_02") + view.title = "kVipPrivilegeText2".localized + return view + }() + + private lazy var itemView3: VPMeVipPrivilegeItemView = { + let view = VPMeVipPrivilegeItemView() + view.icon = UIImage(named: "privilege_icon_03") + view.title = "kVipPrivilegeText3".localized + return view + }() + + private lazy var lineView1: UIView = { + let view = UIView() + view.backgroundColor = .colorFFFFFF(alpha: 0.27) + return view + }() + + private lazy var lineView2: UIView = { + let view = UIView() + view.backgroundColor = .colorFFFFFF(alpha: 0.27) + return view + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + vp_setupUI() + } + + @MainActor required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + @objc private func handleBgView() { + let vc = VPVipViewController() + self.viewController?.navigationController?.pushViewController(vc, animated: true) + } + +} + +extension VPMeVipCell { + + private func vp_setupUI() { + contentView.addSubview(bgView) + bgView.addSubview(bgIconImageView) + bgView.addSubview(vipIconImageView) + bgView.addSubview(titleLabel) + bgView.addSubview(subtitleLabel) + bgView.addSubview(itemView1) + bgView.addSubview(itemView2) + bgView.addSubview(itemView3) + bgView.addSubview(lineView1) + bgView.addSubview(lineView2) + + bgView.snp.makeConstraints { make in + make.left.right.top.bottom.equalToSuperview() + make.height.equalTo(152) + } + + bgIconImageView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(5) + make.right.equalToSuperview() + } + + vipIconImageView.snp.makeConstraints { make in + make.left.equalToSuperview().offset(19) + make.top.equalToSuperview().offset(14) + } + + titleLabel.snp.makeConstraints { make in + make.left.equalTo(vipIconImageView.snp.right).offset(10) + make.top.equalToSuperview().offset(21) + } + + subtitleLabel.snp.makeConstraints { make in + make.left.equalTo(titleLabel) + make.top.equalTo(titleLabel.snp.bottom).offset(2) + make.right.lessThanOrEqualToSuperview().offset(-20) + } + + itemView1.snp.makeConstraints { make in + make.left.equalToSuperview() + make.top.equalToSuperview().offset(73) + } + + itemView2.snp.makeConstraints { make in + make.left.equalTo(itemView1.snp.right).offset(1) + make.top.equalTo(itemView1) + make.width.equalTo(itemView1) + } + + itemView3.snp.makeConstraints { make in + make.left.equalTo(itemView2.snp.right).offset(1) + make.top.equalTo(itemView1) + make.right.equalToSuperview() + make.width.equalTo(itemView1) + } + + lineView1.snp.makeConstraints { make in + make.top.equalTo(itemView1).offset(16) + make.left.equalTo(itemView1.snp.right) + make.width.equalTo(1) + make.height.equalTo(42) + } + + lineView2.snp.makeConstraints { make in + make.top.width.height.equalTo(lineView1) + make.left.equalTo(itemView2.snp.right) + } + + } + +} diff --git a/Veloria/Class/Me/View/VPMeVipPrivilegeItemView.swift b/Veloria/Class/Me/View/VPMeVipPrivilegeItemView.swift new file mode 100644 index 0000000..1120f4c --- /dev/null +++ b/Veloria/Class/Me/View/VPMeVipPrivilegeItemView.swift @@ -0,0 +1,69 @@ +// +// VPMeVipPrivilegeItemView.swift +// Veloria +// +// Created by 湖南秦九 on 2025/5/28. +// + +import UIKit + +class VPMeVipPrivilegeItemView: UIView { + + var icon: UIImage? { + didSet { + iconImageView.image = icon + } + } + + var title: String? { + didSet { + titleLabel.text = title + } + } + + + private lazy var iconImageView: UIImageView = { + let imageView = UIImageView() + return imageView + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 0 + label.font = .fontRegular(ofSize: 12) + label.textColor = .colorE5E5E5() + label.textAlignment = .center + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + + vp_setupUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} + +extension VPMeVipPrivilegeItemView { + + private func vp_setupUI() { + addSubview(iconImageView) + addSubview(titleLabel) + + iconImageView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalToSuperview() + } + + titleLabel.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalTo(iconImageView.snp.bottom) + make.bottom.equalToSuperview() + } + + } + +} diff --git a/Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/Contents.json new file mode 100644 index 0000000..e197cfa --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "金币 2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "金币 2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/金币 2@2x.png b/Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/金币 2@2x.png new file mode 100644 index 0000000..8575f21 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/金币 2@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/金币 2@3x.png b/Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/金币 2@3x.png new file mode 100644 index 0000000..a69037e Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/金币 2@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Contents.json new file mode 100644 index 0000000..dd0db90 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Favorites@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Favorites@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Favorites@2x.png b/Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Favorites@2x.png new file mode 100644 index 0000000..b69ee79 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Favorites@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Favorites@3x.png b/Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Favorites@3x.png new file mode 100644 index 0000000..e0f5899 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Favorites@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Frame@2x.png b/Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Frame@2x.png new file mode 100644 index 0000000..3c794b7 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Frame@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Frame@3x.png b/Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Frame@3x.png new file mode 100644 index 0000000..d4e2422 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Frame@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/Contents.json new file mode 100644 index 0000000..f9621bc --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "组 343@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "组 343@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/组 343@2x.png b/Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/组 343@2x.png new file mode 100644 index 0000000..f2450c2 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/组 343@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/组 343@3x.png b/Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/组 343@3x.png new file mode 100644 index 0000000..55c68e5 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/组 343@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/Contents.json new file mode 100644 index 0000000..7af4418 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "组 344@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "组 344@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/组 344@2x.png b/Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/组 344@2x.png new file mode 100644 index 0000000..e45b67c Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/组 344@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/组 344@3x.png b/Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/组 344@3x.png new file mode 100644 index 0000000..043f69c Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/组 344@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Frame@2x.png b/Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Frame@2x.png new file mode 100644 index 0000000..e4290ce Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Frame@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Frame@3x.png b/Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Frame@3x.png new file mode 100644 index 0000000..686ce4a Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Frame@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Contents.json new file mode 100644 index 0000000..2ea1fc8 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Settings@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Settings@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Settings@2x.png b/Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Settings@2x.png new file mode 100644 index 0000000..8149e1a Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Settings@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Settings@3x.png b/Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Settings@3x.png new file mode 100644 index 0000000..e1029b3 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Settings@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Contents.json new file mode 100644 index 0000000..1331e58 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Store@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Store@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Store@2x.png b/Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Store@2x.png new file mode 100644 index 0000000..8dc5862 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Store@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Store@3x.png b/Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Store@3x.png new file mode 100644 index 0000000..bfe4a4d Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Store@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Frame@2x.png b/Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Frame@2x.png new file mode 100644 index 0000000..8f53648 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Frame@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Frame@3x.png b/Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Frame@3x.png new file mode 100644 index 0000000..f0a01be Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Frame@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/Contents.json new file mode 100644 index 0000000..4671e74 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "资源 1@2x 1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "资源 1@2x 1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/资源 1@2x 1@2x.png b/Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/资源 1@2x 1@2x.png new file mode 100644 index 0000000..35b10ae Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/资源 1@2x 1@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/资源 1@2x 1@3x.png b/Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/资源 1@2x 1@3x.png new file mode 100644 index 0000000..06b9499 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/资源 1@2x 1@3x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Contents.json b/Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Contents.json new file mode 100644 index 0000000..8e7c295 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Wallet@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Wallet@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Wallet@2x.png b/Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Wallet@2x.png new file mode 100644 index 0000000..70c988b Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Wallet@2x.png differ diff --git a/Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Wallet@3x.png b/Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Wallet@3x.png new file mode 100644 index 0000000..3f81333 Binary files /dev/null and b/Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Wallet@3x.png differ diff --git a/Veloria/Source/en.lproj/Localizable.strings b/Veloria/Source/en.lproj/Localizable.strings index d7379fa..0bfbf94 100644 --- a/Veloria/Source/en.lproj/Localizable.strings +++ b/Veloria/Source/en.lproj/Localizable.strings @@ -34,12 +34,24 @@ "Feedback" = "Feedback"; "Feedback Details" = "Feedback Details"; "Rewards" = "Rewards"; +"Join VIP" = "Join VIP"; +"Conins" = "Conins"; +"Donate" = "Donate"; +"Wallet" = "Wallet"; +"Store" = "Store"; +"Rewards" = "Rewards"; +"Favorites" = "Favorites"; +"Language" = "Language"; "kHomeTitleText" = "10,000+ addictive shorts await!"; "kSearchPlaceholderText1" = "Search dramas"; "kSearchPlaceholderText2" = "#Recersal of fate"; "kHomeMenuTitle" = "Select Categories"; +"kVipTipText1" = "unlock 1000+ exclusive dramas"; +"kVipPrivilegeText1" = "Ad-Free\nStreaming"; +"kVipPrivilegeText2" = "Exclusive\nEpisodes"; +"kVipPrivilegeText3" = "Daily free\ncoins"; //请选择需要删除的短剧 "kToastText1" = "Please select the short plays that need to be deleted"; diff --git a/资料/授权文件.zip b/资料/授权文件.zip new file mode 100644 index 0000000..750a6c5 Binary files /dev/null and b/资料/授权文件.zip differ diff --git a/资料/授权文件/160落魄女友竟是首富千金.jpg b/资料/授权文件/160落魄女友竟是首富千金.jpg new file mode 100644 index 0000000..be590f9 Binary files /dev/null and b/资料/授权文件/160落魄女友竟是首富千金.jpg differ diff --git a/资料/授权文件/189被甩后,首富千金身份曝光了.jpg b/资料/授权文件/189被甩后,首富千金身份曝光了.jpg new file mode 100644 index 0000000..7c4904d Binary files /dev/null and b/资料/授权文件/189被甩后,首富千金身份曝光了.jpg differ diff --git a/资料/授权文件/204震惊,穷酸女友竟是财阀千金!.jpg b/资料/授权文件/204震惊,穷酸女友竟是财阀千金!.jpg new file mode 100644 index 0000000..004deb1 Binary files /dev/null and b/资料/授权文件/204震惊,穷酸女友竟是财阀千金!.jpg differ diff --git a/资料/授权文件/206醉后爱上你.jpg b/资料/授权文件/206醉后爱上你.jpg new file mode 100644 index 0000000..76c3e34 Binary files /dev/null and b/资料/授权文件/206醉后爱上你.jpg differ diff --git a/资料/授权文件/208我的豪门前妻.jpg b/资料/授权文件/208我的豪门前妻.jpg new file mode 100644 index 0000000..26ced0b Binary files /dev/null and b/资料/授权文件/208我的豪门前妻.jpg differ diff --git a/资料/授权文件/210恋恋长空.jpg b/资料/授权文件/210恋恋长空.jpg new file mode 100644 index 0000000..42a0c19 Binary files /dev/null and b/资料/授权文件/210恋恋长空.jpg differ diff --git a/资料/授权文件/217沈太太,你马甲掉了.jpg b/资料/授权文件/217沈太太,你马甲掉了.jpg new file mode 100644 index 0000000..aa6ef61 Binary files /dev/null and b/资料/授权文件/217沈太太,你马甲掉了.jpg differ diff --git a/资料/授权文件/242佳许未至.jpg b/资料/授权文件/242佳许未至.jpg new file mode 100644 index 0000000..ef801a9 Binary files /dev/null and b/资料/授权文件/242佳许未至.jpg differ diff --git a/资料/授权文件/24他似繁星入我梦.jpg b/资料/授权文件/24他似繁星入我梦.jpg new file mode 100644 index 0000000..3be3b56 Binary files /dev/null and b/资料/授权文件/24他似繁星入我梦.jpg differ diff --git a/资料/授权文件/262晚来揽星归.jpg b/资料/授权文件/262晚来揽星归.jpg new file mode 100644 index 0000000..a812683 Binary files /dev/null and b/资料/授权文件/262晚来揽星归.jpg differ diff --git a/资料/授权文件/267总裁夫人,身兼多职.jpg b/资料/授权文件/267总裁夫人,身兼多职.jpg new file mode 100644 index 0000000..579f5ec Binary files /dev/null and b/资料/授权文件/267总裁夫人,身兼多职.jpg differ diff --git a/资料/授权文件/280温柔沦陷.jpg b/资料/授权文件/280温柔沦陷.jpg new file mode 100644 index 0000000..0331a5c Binary files /dev/null and b/资料/授权文件/280温柔沦陷.jpg differ diff --git a/资料/授权文件/32许你一世情深.jpg b/资料/授权文件/32许你一世情深.jpg new file mode 100644 index 0000000..422d0e7 Binary files /dev/null and b/资料/授权文件/32许你一世情深.jpg differ diff --git a/资料/授权文件/38陪你到时光尽头.jpg b/资料/授权文件/38陪你到时光尽头.jpg new file mode 100644 index 0000000..1f5bf97 Binary files /dev/null and b/资料/授权文件/38陪你到时光尽头.jpg differ diff --git a/资料/授权文件/65爱你,绝非临时起意.jpg b/资料/授权文件/65爱你,绝非临时起意.jpg new file mode 100644 index 0000000..bd7b611 Binary files /dev/null and b/资料/授权文件/65爱你,绝非临时起意.jpg differ diff --git a/资料/授权文件/95裴太太,你跑不掉了.jpg b/资料/授权文件/95裴太太,你跑不掉了.jpg new file mode 100644 index 0000000..a8737ae Binary files /dev/null and b/资料/授权文件/95裴太太,你跑不掉了.jpg differ diff --git a/资料/授权文件/WechatIMG1.jpg b/资料/授权文件/授权文件.jpg similarity index 100% rename from 资料/授权文件/WechatIMG1.jpg rename to 资料/授权文件/授权文件.jpg diff --git a/资料/授权文件/骄宠.jpg b/资料/授权文件/骄宠.jpg new file mode 100644 index 0000000..148e0f4 Binary files /dev/null and b/资料/授权文件/骄宠.jpg differ