个人主页开发
@ -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 = "<group>"; };
|
||||
BF5E75D42DE56B2000DE9DFE /* VPHomeCagetoryRecommandContentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPHomeCagetoryRecommandContentCell.swift; sourceTree = "<group>"; };
|
||||
BF5E75DA2DE5B8B700DE9DFE /* VPMarqueeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMarqueeView.swift; sourceTree = "<group>"; };
|
||||
BFF5AFA32DE6F15E0044227A /* VPMeVipCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeVipCell.swift; sourceTree = "<group>"; };
|
||||
BFF5AFA52DE700420044227A /* VPMeVipPrivilegeItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeVipPrivilegeItemView.swift; sourceTree = "<group>"; };
|
||||
BFF5AFA72DE704DC0044227A /* VPMeCoinCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeCoinCell.swift; sourceTree = "<group>"; };
|
||||
BFF5AFA92DE7070A0044227A /* VPMeCoinItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeCoinItemView.swift; sourceTree = "<group>"; };
|
||||
BFF5AFAB2DE70CE20044227A /* VPMeToolCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeToolCell.swift; sourceTree = "<group>"; };
|
||||
BFF5AFAD2DE717BB0044227A /* VPVipViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPVipViewController.swift; sourceTree = "<group>"; };
|
||||
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 = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
@ -836,6 +848,7 @@
|
||||
BF0FA7AE2DE443E000C9E5F2 /* VPMeViewController.swift */,
|
||||
BF5E75AE2DE4632200DE9DFE /* VPAboutUsViewController.swift */,
|
||||
BF5E75B02DE4656600DE9DFE /* VPCampaignWebViewController.swift */,
|
||||
BFF5AFAD2DE717BB0044227A /* VPVipViewController.swift */,
|
||||
);
|
||||
path = Controller;
|
||||
sourceTree = "<group>";
|
||||
@ -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 = "<group>";
|
||||
@ -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 */,
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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?()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
25
Veloria/Class/Me/Controller/VPVipViewController.swift
Normal file
@ -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()
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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?
|
||||
|
79
Veloria/Class/Me/View/VPMeCoinCell.swift
Normal file
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
93
Veloria/Class/Me/View/VPMeCoinItemView.swift
Normal file
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
77
Veloria/Class/Me/View/VPMeToolCell.swift
Normal file
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
173
Veloria/Class/Me/View/VPMeVipCell.swift
Normal file
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
69
Veloria/Class/Me/View/VPMeVipPrivilegeItemView.swift
Normal file
@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
22
Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/金币 2@2x.png
vendored
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/coin_icon_01.imageset/金币 2@3x.png
vendored
Normal file
After Width: | Height: | Size: 7.9 KiB |
22
Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Favorites@2x.png
vendored
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/favorites_icon_01.imageset/Favorites@3x.png
vendored
Normal file
After Width: | Height: | Size: 40 KiB |
22
Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Frame@2x.png
vendored
Normal file
After Width: | Height: | Size: 965 B |
BIN
Veloria/Source/Assets.xcassets/icon/me_item_icon_05.imageset/Frame@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.5 KiB |
22
Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/组 343@2x.png
vendored
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/privilege_icon_01.imageset/组 343@3x.png
vendored
Normal file
After Width: | Height: | Size: 8.4 KiB |
22
Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/组 344@2x.png
vendored
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/privilege_icon_02.imageset/组 344@3x.png
vendored
Normal file
After Width: | Height: | Size: 6.4 KiB |
22
Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Frame@2x.png
vendored
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/privilege_icon_03.imageset/Frame@3x.png
vendored
Normal file
After Width: | Height: | Size: 9.3 KiB |
22
Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Settings@2x.png
vendored
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/rewards_icon_01.imageset/Settings@3x.png
vendored
Normal file
After Width: | Height: | Size: 39 KiB |
22
Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Store@2x.png
vendored
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/store_icon_01.imageset/Store@3x.png
vendored
Normal file
After Width: | Height: | Size: 39 KiB |
22
Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Frame@2x.png
vendored
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/vip_icon_01.imageset/Frame@3x.png
vendored
Normal file
After Width: | Height: | Size: 18 KiB |
22
Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/资源 1@2x 1@2x.png
vendored
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/vip_icon_02.imageset/资源 1@2x 1@3x.png
vendored
Normal file
After Width: | Height: | Size: 18 KiB |
22
Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Wallet@2x.png
vendored
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
Veloria/Source/Assets.xcassets/icon/wallet_icon_01.imageset/Wallet@3x.png
vendored
Normal file
After Width: | Height: | Size: 39 KiB |
@ -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";
|
||||
|
BIN
资料/授权文件.zip
Normal file
BIN
资料/授权文件/160落魄女友竟是首富千金.jpg
Normal file
After Width: | Height: | Size: 149 KiB |
BIN
资料/授权文件/189被甩后,首富千金身份曝光了.jpg
Normal file
After Width: | Height: | Size: 149 KiB |
BIN
资料/授权文件/204震惊,穷酸女友竟是财阀千金!.jpg
Normal file
After Width: | Height: | Size: 150 KiB |
BIN
资料/授权文件/206醉后爱上你.jpg
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
资料/授权文件/208我的豪门前妻.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
资料/授权文件/210恋恋长空.jpg
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
资料/授权文件/217沈太太,你马甲掉了.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
资料/授权文件/242佳许未至.jpg
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
资料/授权文件/24他似繁星入我梦.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
资料/授权文件/262晚来揽星归.jpg
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
资料/授权文件/267总裁夫人,身兼多职.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
资料/授权文件/280温柔沦陷.jpg
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
资料/授权文件/32许你一世情深.jpg
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
资料/授权文件/38陪你到时光尽头.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
资料/授权文件/65爱你,绝非临时起意.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
资料/授权文件/95裴太太,你跑不掉了.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
Before Width: | Height: | Size: 6.8 MiB After Width: | Height: | Size: 6.8 MiB |
BIN
资料/授权文件/骄宠.jpg
Normal file
After Width: | Height: | Size: 147 KiB |