Commit 0575448e authored by David黄金龙's avatar David黄金龙

Merge branch '630-dev'

* 630-dev: (274 commits)
  人脉背景图替换
  处理一处首页的zhans
  处理一处启动跳转的问题
  图片替换
  //  活动图片
  UI 修改
  //  tab
  OSS 上传基类修改
  行 间距
  //  头像
  我的文书和我的签字上传逻辑
  图片替换
  //
  修改版本号
  1、修改一处可能的bug 2、处理一处
  文书 签字OSS失败逻辑添加
  头像链接地址
  删除 测试代码
  //  首页消息展示
  1、 添加测试代码 2、修改版本号
  ...

# Conflicts:
#	galaxy/galaxy.xcodeproj/project.pbxproj
#	galaxy/galaxy/Classes/Modules/IntelligentService(服务中心)/ServiceProcess(我的信息流程)/FamilyMember(家庭成员信息表)/M/YHFamilyInitialInfo.swift
parents 34dc664c b17b30d5
......@@ -166,7 +166,7 @@ GEM
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-plugin-pgyer (0.2.8)
fastlane-plugin-pgyer (0.2.9)
ffi (1.16.3)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
......
......@@ -87,6 +87,8 @@ target 'galaxy' do
pod 'lottie-ios', '4.4.0'
#GIF图播放
pod 'YYImage', '1.0.4'
#滑动卡片
pod 'DragCardContainer', '1.2.0'
end
......
......@@ -17,7 +17,7 @@ platform :ios do
youhua_branch = "youhua-dev"
#打包正使用的分支
myPack_branch = "main"
myPack_branch = "630-dev"
# 打adhoc包 执行命令 fastlane galaxyTest
lane :galaxyTest do
......@@ -27,9 +27,9 @@ platform :ios do
# 拉取最新代码
sh "git pull origin #{myPack_branch}"
# 显示git当前分支最新submit id
sh "git rev-parse HEAD"
# sh "git rev-parse HEAD"
# 更新pod第三方库
cocoapods(use_bundle_exec: true)
# cocoapods(use_bundle_exec: true)
gym(
workspace: 'galaxy.xcworkspace',
......
This diff is collapsed.
......@@ -163,14 +163,14 @@ extension AppDelegate {
tabBarController.delegate = homeVC
let v0 = YHNavigationController(rootVC:homeVC)
let v1 = YHNavigationController(rootVC:YHServiceCenterMainViewController())
let v2 = YHNavigationController(rootVC:YHMessageListVC())
let v2 = YHNavigationController(rootVC:YHCommunityViewController())
let v3 = YHNavigationController(rootVC:YHMyViewController())
v0.tabBarItem = ESTabBarItem.init(YHBasicContentView(),title: "首页", image: UIImage(named: "home"), selectedImage: UIImage(named: "home_1"))
v1.tabBarItem = ESTabBarItem.init(YHBasicContentView(),title: "服务", image: UIImage(named: "service"), selectedImage: UIImage(named: "service_1"))
v2.tabBarItem = ESTabBarItem.init(YHBasicContentView(),title: "消息", image: UIImage(named: "msg"), selectedImage: UIImage(named: "msg_1"))
v2.tabBarItem = ESTabBarItem.init(YHBasicContentView(),title: "社区", image: UIImage(named: "msg"), selectedImage: UIImage(named: "msg_1"))
v3.tabBarItem = ESTabBarItem.init(YHBasicContentView(),title: "我的", image: UIImage(named: "me"), selectedImage: UIImage(named: "me_1"))
......@@ -183,7 +183,7 @@ extension AppDelegate {
if YHLoginManager.shared.needJumpToMsgTabFlag {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: {
goTabBarBy(tabType: .message)
goToMessagePage()
})
}
}
......
......@@ -79,7 +79,7 @@ extension AppDelegate: JPUSHRegisterDelegate {
// 转换到消息tab
YHLoginManager.shared.needJumpToMsgTabFlag = true
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: {
goTabBarBy(tabType: .message)
goToMessagePage()
})
}
......@@ -107,6 +107,8 @@ extension AppDelegate: JPUSHRegisterDelegate {
NotificationCenter.default.post(name: YhConstant.YhNotification.didRequestUnreadMsgTotalCountNotification, object: nil)
// 请求消息列表通知
NotificationCenter.default.post(name: YhConstant.YhNotification.didRequestUnreadMsgListNotification, object: nil)
//更新首页消息
NotificationCenter.default.post(name: YhConstant.YhNotification.didRevMsgNotifiction, object: nil)
}
}
......@@ -121,7 +123,8 @@ extension AppDelegate: JPUSHRegisterDelegate {
// 转换到消息tab
YHLoginManager.shared.needJumpToMsgTabFlag = true
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: {
goTabBarBy(tabType: .message)
// NotificationCenter.default.post(name: YhConstant.YhNotification.didRevMsgNotifiction, object: nil)
goToMessagePage()
})
}
......
......@@ -22,7 +22,7 @@ class YHBaseViewController: UIViewController {
gk_navLineHidden = true
gk_navBarAlpha = 0
gk_backImage = UIImage(named: "nav_back_icon")
gk_backImage = UIImage(named: "back_icon")
#if DEBUG
......
......@@ -12,7 +12,7 @@ import Alamofire
class YHBaseViewModel {
// 上传方法
func uploadImage(_ image: UIImage, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) {
func uploadImage(_ image: UIImage, _ isPublic: Bool = false, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) {
#if DEBUG
let size = image.imageSize()
YHHUD.flash(message: "\(Float(size/1024/1024))M")
......@@ -44,7 +44,7 @@ class YHBaseViewModel {
return
}
YHOSSManager.share.updateToken {
YHOSSManager.share.putObject(image: image) {[weak self] success, error in
YHOSSManager.share.putObject(image: image, isPublic) {[weak self] success, error in
guard let _ = self else { return }
DispatchQueue.main.async {
// 在这里执行需要在主线程上完成的任务
......@@ -54,8 +54,7 @@ class YHBaseViewModel {
}
}
//换取一张
func getPublicImageUrl(_ url: String, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) {
func getPublicImageUrl(_ url: String, _ isPublic: Bool = false, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) {
// let strUrl = YHBaseUrlManager.shared.curOssURL() + YHAllApiName.OSS.getPublicApi
// let param: [String: Any] = ["fileUrl": url]
// let _ = YHNetRequest.getRequest(url: strUrl, params: param) { [weak self] json, code in
......@@ -109,7 +108,7 @@ class YHBaseViewModel {
}
// 上传方法
func uploadFile(_ url: String, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) {
func uploadFile(_ url: String, _ isPublic: Bool = false, callBackBlock:@escaping (_ success: String?, _ error:YHErrorModel?)->()) {
// let strUrl = YHBaseUrlManager.shared.curOssURL() + YHAllApiName.OSS.uploadApi
// printLog("\(url)")
// let boundary = UUID().uuidString
......@@ -138,7 +137,7 @@ class YHBaseViewModel {
return
}
YHOSSManager.share.updateToken {
YHOSSManager.share.putFile(file: url, callBackBlock: {[weak self] success, error in
YHOSSManager.share.putFile(file: url, isPublic, callBackBlock: {[weak self] success, error in
guard let _ = self else { return }
DispatchQueue.main.async {
// 在这里执行需要在主线程上完成的任务
......
......@@ -21,7 +21,6 @@ class YHTabBarViewController: ESTabBarController {
handleTabBarLine()
addObservers()
if YHLoginManager.shared.isLogin() {
getTotalUnreadMsgCount()
reportDeviceInfo()
}
}
......@@ -30,7 +29,6 @@ class YHTabBarViewController: ESTabBarController {
NotificationCenter.default.addObserver(self, selector: #selector(loginSuccess), name: YhConstant.YhNotification.didLoginSuccessNotifiction, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(logoutSuccess), name: YhConstant.YhNotification.didLogoutSuccessNotifiction, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(clearAllUnreadBadge), name: YhConstant.YhNotification.didMarkAllMessagesReadedNotifiction, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(getTotalUnreadMsgCount), name: YhConstant.YhNotification.didRequestUnreadMsgTotalCountNotification, object: nil)
}
}
......@@ -46,7 +44,6 @@ extension YHTabBarViewController {
@objc func loginSuccess() {
printLog("登录成功,进行相应的 UI刷新操作")
getTotalUnreadMsgCount()
}
@objc func logoutSuccess() {
......@@ -56,36 +53,9 @@ extension YHTabBarViewController {
@objc func clearAllUnreadBadge() {
DispatchQueue.main.async {
if let vcs = self.viewControllers, let msgListVC = vcs[safe: 2] {
msgListVC.tabBarItem.badgeValue = nil
UIApplication.shared.applicationIconBadgeNumber = 0
}
}
}
// 请求未读消息总数
@objc func getTotalUnreadMsgCount() {
if !YHLoginManager.shared.isLogin() {
return
}
self.viewModel.requestTotalUnreadMsgCount {
[weak self] success, error in
guard let self = self else { return }
DispatchQueue.main.async {
if let vcs = self.viewControllers, let msgListVC = vcs[safe: 2] {
let count = self.viewModel.unreadTotalCount
var unreadText:String? = nil
if 0 < count && count <= 99 {
unreadText = String(count)
} else if count > 99 {
unreadText = "99+"
}
msgListVC.tabBarItem.badgeValue = unreadText
}
}
}
}
func reportDeviceInfo() {
if !YHLoginManager.shared.isLogin() {
......
......@@ -18,7 +18,8 @@ let kEmptyMessageBgName = "no_data_bg_msg"
let kEmptyOrderBgName = "no_data_bg_order"
// 无网络空视图
let kNotNetWorkBgName = "no_network_bg"
// 人脉无好友空视图
let kNoFriendsBgName = "people_no_friend_bg"
class YHEmptyDataView: UIView {
......
......@@ -107,8 +107,13 @@ extension YHOneKeyLoginManager {
YHHUD.hide()
if success {
YHLoginManager.shared.loginSuccessActionBlock?()
YHHUD.flash(message: "登录成功")
if YHLoginManager.shared.userModel?.is_first_login == 1 {
let vc = YHUserInfoSettingViewController()
vc.modalPresentationStyle = .fullScreen
UIViewController.current?.navigationController?.pushViewController(vc)
} else {
TXCommonHandler.sharedInstance().cancelLoginVC(animated: true)
}
return
}
if let err = error {
......@@ -264,7 +269,7 @@ extension YHOneKeyLoginManager {
}
// 登录按钮自定义UI
model.loginBtnText = NSAttributedString(string: "本机号码一键登录", attributes: [NSAttributedString.Key.foregroundColor : UIColor.init(hex: 0x121A26), NSAttributedString.Key.font: UIFont.PFSC_M(ofSize: 16)])
model.loginBtnText = NSAttributedString(string: "本机号码一键登录", attributes: [NSAttributedString.Key.foregroundColor : UIColor.mainTextColor, NSAttributedString.Key.font: UIFont.PFSC_M(ofSize: 16)])
let enableLoginBgImg = TXCommonUtils.image(with: .white, size: CGSize(width: KScreenWidth-20*2, height: 48), isRoundedCorner: true, radius: kCornerRadius3)!
let disableLoginBgImg = TXCommonUtils.image(with: .white, size: CGSize(width: KScreenWidth-20*2, height: 48), isRoundedCorner: true, radius: kCornerRadius3)!
......
//
// YHActivityListViewController.swift
// galaxy
//
// Created by EDY on 2024/6/17.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import JXSegmentedView
enum YHActivityStatus: Int {
//活动的状态 1:立即报名 2:已报名 3:活动结束 4:已取消报名
case unknow = 0 // 未知
case notApply = 1 // 立即报名
case applied = 2 // 已报名
case end = 3 // 活动结束
case canceled = 4 // 已取消报名
var titleForList : String {
switch self {
case .notApply:
return "立即报名"
case .applied:
return "已报名"
case .end:
return "活动结束"
case .canceled:
return "立即报名"
default:
return ""
}
}
var titleForMyApplyList : String {
switch self {
case .notApply:
return "立即报名"
case .applied:
return "已报名"
case .end:
return "活动结束"
case .canceled:
return "已取消"
default:
return ""
}
}
var titleForDetail : String {
switch self {
case .notApply:
return "立即报名"
case .applied:
return "查看行程单"
case .end:
return "活动结束"
case .canceled:
return "立即报名"
default:
return ""
}
}
var activityColor : UIColor {
switch self {
case .notApply:
return UIColor.brandMainColor
case .applied:
return UIColor.successColor
case .end:
return UIColor.mainTextColor30
case .canceled:
return UIColor.brandMainColor
default:
return UIColor.clear
}
}
var activityColorForMyApplyList : UIColor {
switch self {
case .notApply:
return UIColor.brandMainColor
case .applied:
return UIColor.successColor
case .end:
return UIColor.mainTextColor30
case .canceled:
return UIColor.mainTextColor30
default:
return UIColor.clear
}
}
}
/*
活动列表 或 我的报名活动
*/
class YHActivityListViewController: YHBaseViewController {
var type : Int = 0 //0-活动列表 1-我的报名活动
lazy var viewModel: YHActivityViewModel = {
let vm = YHActivityViewModel()
return vm
}()
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
tableView.showsVerticalScrollIndicator = false
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.backgroundColor = UIColor.white
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
tableView.register(YHActivityListCell.self, forCellReuseIdentifier: YHActivityListCell.cellReuseIdentifier)
tableView.backgroundView = self.emptyDataTipsView
return tableView
}()
lazy var emptyDataTipsView: YHEmptyDataView = {
let view = YHEmptyDataView.createView("暂无活动", kEmptyCommonBgName)
view.topMargin = 222
view.isHidden = true
return view
}()
// MARK: - 生命周期方法
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
gk_navigationBar.isHidden = true
gk_navigationBar.backgroundColor = .white
view.addSubview(tableView)
if type == 1 {
gk_navTitle = "我的活动"
gk_navigationBar.isHidden = false
gk_navigationBar.backgroundColor = .clear
tableView.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.bottom.equalToSuperview()
make.top.equalToSuperview().offset(k_Height_NavigationtBarAndStatuBar)
}
} else {
tableView.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.bottom.equalToSuperview()
make.top.equalToSuperview()
}
}
tableView.es.addYHPullToRefresh {
self.loadFirstData()
}
tableView.es.addInfiniteScrolling {
self.loadMoreData()
}
emptyDataTipsView.isHidden = viewModel.arrActivityListData.count > 0 ? true : false
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loadFirstData()
}
}
extension YHActivityListViewController {
func loadMoreData() {
self.viewModel.getActivityList(firstFlag : false,type : type) {[weak self] success, error in
guard let self = self else { return }
self.tableView.reloadData()
self.emptyDataTipsView.isHidden = self.viewModel.arrActivityListData.count > 0 ? true : false
// DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.35, execute: {
self.tableView.es.stopLoadingMore()
if self.viewModel.hasMoreForActivityList == false {
self.tableView.es.noticeNoMoreData()
self.tableView.footer?.alpha = 1
}
// })
self.tableView.reloadData()
}
}
func loadFirstData() {
self.viewModel.getActivityList(firstFlag : true,type: type) {[weak self] success, error in
guard let self = self else { return }
self.tableView.reloadData()
self.emptyDataTipsView.isHidden = self.viewModel.arrActivityListData.count > 0 ? true : false
// DispatchQueue.main.asyncAfter(deadline: .now()+0.5, execute: {
self.tableView.es.stopPullToRefresh()
self.emptyDataTipsView.isHidden = self.viewModel.arrActivityListData.count > 0 ? true : false
if self.viewModel.hasMoreForActivityList == false {
self.tableView.es.noticeNoMoreData()
if self.viewModel.arrActivityListData.count > 0 {
self.tableView.footer?.alpha = 1
} else {
self.tableView.footer?.alpha = 0
}
}
// })
}
}
}
extension YHActivityListViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
if viewModel.arrActivityListData.count > 0 {
return viewModel.arrActivityListData.count
}
return 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: YHActivityListCell.cellReuseIdentifier, for: indexPath) as! YHActivityListCell
cell.sessionIndex = indexPath.section
cell.type = type
if indexPath.section < viewModel.arrActivityListData.count {
cell.dataModel = viewModel.arrActivityListData[indexPath.section]
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 185.0
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.section < viewModel.arrActivityListData.count {
let model = viewModel.arrActivityListData[indexPath.section]
if type == 1 && model.status.int == 2 {
let vc = YHActivityTravelViewController()
vc.travelId = model.checkId
navigationController?.pushViewController(vc)
return
}
let vc = YHActivityDetailViewController()
vc.activityId = String(model.id)
vc.activityName = model.name
navigationController?.pushViewController(vc)
}
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
var height : CGFloat = 16.0
if section != 0 {
height = 20.0
}
return height
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
var height : CGFloat = 16.0
if section != 0 {
height = 20.0
}
let view = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth-16.0*2, height: height))
view.backgroundColor = .clear
return view
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth-16.0*2, height: 0.001))
view.backgroundColor = .clear
return view
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.001
}
}
extension YHActivityListViewController: JXSegmentedListContainerViewListDelegate {
func listView() -> UIView {
return view
}
}
//
// YHActivityTravelViewController.swift
// galaxy
//
// Created by davidhuangA on 2024/6/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityTravelViewController: YHBaseViewController {
//vm对象
lazy var viewModel: YHActivityViewModel = {
let vm = YHActivityViewModel()
return vm
}()
//活动行程单Id
var travelId : String = ""
//tableView
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.plain)
tableView.showsVerticalScrollIndicator = false
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.backgroundColor = UIColor.clear
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
tableView.register(YHActivityTravelCell.self, forCellReuseIdentifier: YHActivityTravelCell.cellReuseIdentifier)
tableView.tableHeaderView = nil
tableView.tableFooterView = nil
tableView.estimatedSectionHeaderHeight = 0
tableView.estimatedSectionFooterHeight = 0
return tableView
}()
lazy var topBkgImageV : UIImageView = {
let view = UIImageView()
view.contentMode = .scaleAspectFill
view.image = UIImage(named: "activity_travel_bkg")
return view
}()
lazy var topView : UIView = {
let view = UIView()
return view
}()
lazy var bottomView : YHActivityDetailBottomView = {
let view = YHActivityDetailBottomView()
return view
}()
// MARK: - 生命周期方法
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loadData()
}
}
extension YHActivityTravelViewController {
func setupUI() {
gk_navigationBar.isHidden = false
gk_navigationBar.backgroundColor = .clear
gk_navBarAlpha = 0
gk_navTitle = "活动行程单"
view.backgroundColor = UIColor.pageBkgColor
//1.
view.addSubview(topBkgImageV)
view.addSubview(tableView)
topBkgImageV.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(332)
}
tableView.contentInsetAdjustmentBehavior = .never
tableView.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.left.equalTo(20)
make.right.equalTo(-20)
make.bottom.equalToSuperview()
}
}
func loadData() {
if !travelId.isEmpty {
viewModel.getActivityTravelDetail(travelId: travelId) { success, error in
if success {
self.tableView.reloadData()
} else {
let msg = error?.errorMsg ?? "获取数据出错"
YHHUD.flash(message: msg)
self.navigationController?.popViewController()
}
}
} else {
YHHUD.flash(message: "参数错误")
navigationController?.popViewController()
}
}
func cancelActivityApply() {
viewModel.cancelActivityTravel(travelId:travelId) { [weak self] (success, error) in
if success {
YHHUD.flash(message: "已取消报名")
self?.loadData()
} else {
let msg = error?.errorMsg ?? "取消失败"
YHHUD.flash(message: msg)
}
}
}
func clickBottomButton() {
if self.viewModel.activityTravelModel?.status.int == 2 {
//取消
YHCommonAlertView.show("", "是否取消报名?", "是", "否",fullGuestureEnable: false) {
self.cancelActivityApply()
} callBack: {
}
} else if self.viewModel.activityTravelModel?.status.int == 4 {
if let nav = self.navigationController {
let rrr = nav.viewControllers.contains { $0.isKind(of: YHActivityDetailViewController.self) }
if rrr {
var targetVc : UIViewController?
for(_,value) in nav.viewControllers.enumerated() {
if value.isKind(of: YHActivityDetailViewController.self) {
targetVc = value
break
}
}
if let vc = targetVc {
navigationController?.popToViewController(vc, animated: true)
}
return
}
}
let vc = YHActivityDetailViewController()
vc.activityId = String(self.viewModel.activityTravelModel?.id ?? 0)
vc.activityName = self.viewModel.activityDetailModel?.name ?? ""
navigationController?.pushViewController(vc)
}
}
// func showApplyUI() {
// YHApplyActivityAlert.showApplyActivityAlertView { (tag,name,number,phone) in
// if tag {
// printLog(tag)
// printLog(name)
// printLog(number)
// printLog(phone)
// if tag {
// if let model = self.viewModel.activityTravelModel,model.id > 0 {
// let param = ["id" : model.id,
// "name":name,
// "mobile":phone,
// "number":number]
// self.applyActivity(param: param)
// }
// }
// }
// }
// }
// func applyActivity(param : [String : Any]) {
//
// viewModel.applyActivity(param: param) { success, error in
// if success {
// YHHUD.flash(message: "报名成功")
// self.loadData()
// DispatchQueue.main.async {
// let vc = YHApplyActivityResultViewController()
// vc.activityTravelId = String(self.viewModel.activityTravelModel?.id ?? 0)
//
// self.navigationController?.pushViewController(vc)
// }
// } else {
// let msg = error?.errorMsg ?? "报名失败,请重试"
// YHHUD.flash(message: msg)
// }
// }
// }
}
extension YHActivityTravelViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: YHActivityTravelCell.cellReuseIdentifier, for: indexPath) as! YHActivityTravelCell
cell.dataModel = viewModel.activityTravelModel
cell.block = {[weak self] in
self?.clickBottomButton()
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
}
//
// YHApplyActivityResultViewController.swift
// galaxy
//
// Created by davidhuangA on 2024/6/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
/*
报名结果页
*/
class YHApplyActivityResultViewController: YHBaseViewController {
var isSuccessFlag : Bool = false
var messageTips : String = ""
var activityTravelId : String = ""
var activityName : String = ""
lazy var statusImageV:UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "activity_apply_result_success")
view.contentMode = .scaleAspectFill
return view
}()
lazy var titleLabel:UILabel = {
let lable = UILabel()
lable.textColor = UIColor.mainTextColor
lable.textAlignment = .center
lable.font = UIFont.PFSC_M(ofSize:18)
lable.text = "报名成功"
lable.numberOfLines = 0
return lable
}()
lazy var nameLabel:UILabel = {
let lable = UILabel()
lable.textColor = UIColor.mainTextColor30
lable.textAlignment = .center
lable.font = UIFont.PFSC_R(ofSize:14)
lable.text = "已报名成功活动【哈佛爸爸线下教育沙龙】,记得准时参加哦"
lable.numberOfLines = 0
return lable
}()
lazy var submitButton:UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_R(ofSize: 16)
button.contentHorizontalAlignment = .center
button.setTitle("查看行程单", for: .normal)
button.setTitle("查看行程单", for: .highlighted)
button.setTitleColor( UIColor(hex:0xffffff), for: .normal)
button.setTitleColor( UIColor(hex:0xffffff), for: .highlighted)
button.layer.cornerRadius = kCornerRadius3
button.addTarget(self, action: #selector(clickSubmitBtn), for: .touchUpInside)
button.layer.cornerRadius = kCornerRadius3
button.clipsToBounds = true
button.backgroundColor = .brandMainColor
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
}
extension YHApplyActivityResultViewController {
func setupUI() {
gk_navigationBar.isHidden = false
gk_navigationBar.backgroundColor = .clear
gk_navTitle = "报名结果"
// view.backgroundColor = UIColor.pageBkgColor
view.backgroundColor = UIColor.white
view.addSubview(statusImageV)
statusImageV.snp.makeConstraints { make in
make.top.equalTo(180)
make.centerX.equalToSuperview()
make.height.width.equalTo(128)
}
view.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.top.equalTo(statusImageV.snp.bottom)
make.centerX.equalToSuperview()
make.height.equalTo(25)
}
view.addSubview(nameLabel)
nameLabel.snp.makeConstraints { make in
make.top.equalTo(titleLabel.snp.bottom).offset(12)
make.centerX.equalToSuperview()
make.left.equalTo(46)
make.right.equalTo(-46)
}
view.addSubview(submitButton)
submitButton.snp.makeConstraints { make in
make.top.equalTo(nameLabel.snp.bottom).offset(42)
make.centerX.equalToSuperview()
make.width.equalTo(142)
make.height.equalTo(42)
}
if isSuccessFlag {
titleLabel.text = "报名成功"
statusImageV.image = UIImage(named: "activity_apply_result_success")
nameLabel.text = "已报名成功活动【" + activityName + "】,记得准时参加哦"
submitButton.setTitle("查看行程单", for: .normal)
} else {
titleLabel.text = "报名失败"
statusImageV.image = UIImage(named: "activity_apply_result_fail")
nameLabel.text = "活动【" + activityName + "】,活动时间已结束,请您看看其他活动~"
submitButton.setTitle("返回活动列表", for: .normal)
}
}
@objc func clickSubmitBtn() {
if isSuccessFlag {
//行程单详情
let vc = YHActivityTravelViewController()
vc.travelId = activityTravelId
self.navigationController?.pushViewController(vc)
} else {
//返回活动列表
navigationController?.popToRootViewController(animated: true)
}
}
}
//
// YHActivityDetailModel.swift
// galaxy
//
// Created by davidhuangA on 2024/6/25.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityDetailModel: YHActivityModel {
// var cover : String = "" //活动封面
// var name : String = "" //活动标题
// var tag : Int = 0 //活动标签枚举 1:V专享
// var beginTime : String = "" //开始时间戳
// var endTime : String = "" //结束时间戳
// var place : String = "" //活动地点
// var id : Int = 0 //活动ID
// var status : String = "" //活动的状态 1:立即报名 2:已报名 3:活动结束 4:已取消报名
var tips : String = "" //温馨提示
var guidance : String = "" //交通引导
var introduce : String = "" //活动介绍
var posters : [String] = [] //活动海报
var businessCardName : String = "" //报名人姓名
// 自定义
var coverItems:[YHActivityCoverItem] = []
func getImageInfo() {
self.coverItems.removeAll()
coverItems.removeAll()
for (_, url) in self.posters.enumerated() {
let item = YHActivityCoverItem()
item.url = url
coverItems.append(item)
}
}
}
//
// YHActivityListModel.swift
// galaxy
//
// Created by davidhuangA on 2024/6/25.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityListModel : YHBaseModel {
var total : String = ""
var data : [YHActivityModel] = []
required init() {
}
}
//
// YHActivityModel.swift
// galaxy
//
// Created by davidhuangA on 2024/6/25.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityModel: YHBaseModel {
var id : Int = 0 //活动ID
var tag : Int = 0 //活动标签枚举 1:V专享
var name : String = "" //活动标题
var cover : String = "" //活动封面
var beginTime : String = "" //开始时间戳
var endTime : String = "" //结束时间戳
var place : String = "" //活动地点
var status : String = "" //活动的状态 1:立即报名 2:已报名 3:活动结束 4:已取消报名
var checkId : String = "" //活动行程ID 仅当活动状态为2(已报名)时才大于0
private var beginTimeForUI : String = ""
func getDateString(format : String = "MM-dd") -> String {
if beginTimeForUI.isEmpty {
if let tttt = beginTime.double() {
//1.
// 将时间戳转换为Date对象
let date = Date(timeIntervalSince1970: TimeInterval(tttt))
// 创建一个DateFormatter实例
let dateFormatter = DateFormatter()
// 设置日期格式,这里设置为"年-月-日 时:分:秒"
dateFormatter.dateFormat = format // HH:mm:ss
// 使用DateFormatter将Date对象转换为字符串
let dateString = dateFormatter.string(from: date)
dateFormatter.dateFormat = "HH:mm"
let titmeString = dateFormatter.string(from: date)
// 获取Calendar的当前实例
let calendar = Calendar.current
// 使用Calendar来获取星期几
let weekday = calendar.component(.weekday, from: date)
// 星期几的名称,根据weekday的值,1到7分别代表周一到周日
if weekday > 0 && weekday < 8 {
let weekdayName = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"][weekday - 1]
if let tttt = endTime.double() {
// 将时间戳转换为Date对象
let date2 = Date(timeIntervalSince1970: TimeInterval(tttt))
let titmeString2 = dateFormatter.string(from: date2)
beginTimeForUI = dateString + " " + weekdayName + " " + titmeString + "-" + titmeString2
}
}
}
}
return beginTimeForUI
}
}
//
// YHActivityTravelModel.swift
// galaxy
//
// Created by davidhuangA on 2024/6/25.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityApplyInfoModel : YHBaseModel {
var name : String = "" //用户姓名
var mobile : String = "" //手机号码
var number : Int32 = 0 //报名人数
}
class YHActivityTravelModel: YHActivityModel {
var statusCn : String = "" //行程状态
var user : YHActivityApplyInfoModel?
var tips : String = "" //温馨提示
var guidance : String = "" //交通引导
}
//
// YHTravelModel.swift
// galaxy
//
// Created by davidhuangA on 2024/6/25.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHTravelModel : YHBaseModel {
var id : String = ""
}
//
// YHActivityApplyInfoView.swift
// galaxy
//
// Created by davidhuangA on 2024/6/21.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityApplyInfoItemView: UIView {
var dataModel : YHActivityApplyInfoModel? {
didSet {
updateUI()
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
lazy var titleLable:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.textAlignment = .left
label.font = UIFont.PFSC_M(ofSize:17)
label.text = "报名信息"
return label
}()
lazy var nameItem:YHActivityTwoItemView = {
let view = YHActivityTwoItemView()
return view
}()
lazy var numberItem:YHActivityTwoItemView = {
let view = YHActivityTwoItemView()
return view
}()
lazy var phoneItem:YHActivityTwoItemView = {
let view = YHActivityTwoItemView()
return view
}()
}
extension YHActivityApplyInfoItemView {
func updateUI() {
guard let model = dataModel else {
return
}
nameItem.updateItem(title: "您的姓名", value: model.name)
numberItem.updateItem(title: "报名人数", value: "\(model.number)人")
phoneItem.updateItem(title: "手机号码", value: model.mobile)
}
func setupUI() {
addSubview(titleLable)
addSubview(nameItem)
addSubview(numberItem)
addSubview(phoneItem)
titleLable.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(24)
}
nameItem.snp.makeConstraints { make in
make.top.equalTo(titleLable.snp.bottom).offset(16)
make.left.right.equalToSuperview()
}
numberItem.snp.makeConstraints { make in
make.top.equalTo(nameItem.snp.bottom).offset(16)
make.left.right.equalToSuperview()
}
phoneItem.snp.makeConstraints { make in
make.top.equalTo(numberItem.snp.bottom).offset(16)
make.left.right.equalToSuperview()
make.bottom.equalToSuperview()
}
}
}
//
// YHActivityDetailBottomView.swift
// galaxy
//
// Created by davidhuangA on 2024/6/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityDetailBottomView: UIView {
static let viewH : CGFloat = 98.0
var dataModel : YHActivityDetailModel? {
didSet {
updateUI()
}
}
override init(frame: CGRect) {
super.init(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: YHBasicInfoFillBottomView.viewH))
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
typealias Block = (Int) -> ()
var block: Block?
var saveButton: UIButton!
private lazy var bottomLine : UIView = {
let view = UIView()
view.backgroundColor = UIColor.separatorColor
return view
}()
}
private extension YHActivityDetailBottomView {
func updateUI() {
guard let model = dataModel else {
return
}
if let status = Int(model.status) {
isHidden = false
saveButton.setTitle(YHActivityStatus.init(rawValue: status)?.titleForDetail, for: .normal)
saveButton.backgroundColor = YHActivityStatus.init(rawValue: status)?.activityColor
} else {
isHidden = true
}
}
func setupUI() {
backgroundColor = .white
addSubview(bottomLine)
bottomLine.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(1)
}
saveButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.brandMainColor
button.titleLabel?.font = UIFont.PFSC_R(ofSize: 15)
button.contentHorizontalAlignment = .center
button.setTitle("立即报名", for: .normal)
button.setTitleColor(UIColor.white, for: .normal)
button.layer.cornerRadius = kCornerRadius3
button.addTarget(self, action: #selector(save), for: .touchUpInside)
return button
}()
addSubview(saveButton)
saveButton.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.top.equalTo(bottomLine.snp.bottom).offset(8)
make.height.equalTo(48)
}
}
@objc func save() {
block?(0)
}
}
//
// YHActivityDetailCell.swift
// galaxy
//
// Created by davidhuangA on 2024/6/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityDetailCell: UITableViewCell {
static let cellReuseIdentifier = "YHActivityDetailCell"
var dataModel : YHActivityDetailModel? {
didSet {
updateUI()
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
lazy var topImgV:UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "global_default_image")
view.contentMode = .scaleAspectFill
view.clipsToBounds = true
return view
}()
//活动名称地址
lazy var acitivityTitle:YHActivityTitleItemView = {
let view = YHActivityTitleItemView()
return view
}()
//活动详情
lazy var acitivityDetail:YHActivityDetailItemView = {
let view = YHActivityDetailItemView()
return view
}()
//活动温馨提示
lazy var acitivityTips:YHActivityTipsItemView = {
let view = YHActivityTipsItemView()
return view
}()
//活动温馨提示
lazy var fakeView:UIView = {
let view = UIView()
view.backgroundColor = .clear
return view
}()
}
extension YHActivityDetailCell {
func updateUI() {
guard let model = dataModel else {
return
}
contentView.removeSubviews()
contentView.addSubview(topImgV)
contentView.addSubview(acitivityTitle)
contentView.addSubview(acitivityDetail)
contentView.addSubview(acitivityTips)
contentView.addSubview(fakeView)
topImgV.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(KScreenWidth)
}
if let url = URL(string: model.cover) {
topImgV.kf.setImage(with: url, placeholder: UIImage(named: "global_default_image"))
} else {
topImgV.image = UIImage(named: "global_default_image")
}
acitivityTitle.dataModel = model
acitivityTitle.snp.makeConstraints { make in
make.top.equalTo(topImgV.snp.bottom).offset(24)
make.left.equalTo(20)
make.right.equalTo(-20)
}
var lastView : UIView = acitivityTitle
//acitivityDetail
if model.introduce.isEmpty && model.posters.count < 1 {
//隐藏
acitivityDetail.isHidden = true
} else {
//展示
acitivityDetail.isHidden = false
acitivityDetail.dataModel = model
acitivityDetail.snp.makeConstraints { make in
make.top.equalTo(lastView.snp.bottom).offset(24)
make.left.equalTo(20)
make.right.equalTo(-20)
}
lastView = acitivityDetail
}
//acitivityTips
if model.tips.isEmpty {
acitivityTips.isHidden = true
} else {
acitivityTips.isHidden = false
acitivityTips.dataModel = model
acitivityTips.snp.makeConstraints { make in
make.top.equalTo(lastView.snp.bottom).offset(24)
make.left.equalTo(20)
make.right.equalTo(-20)
}
lastView = acitivityTips
}
fakeView.snp.makeConstraints { make in
make.top.equalTo(lastView.snp.bottom).offset(24)
make.left.equalTo(20)
make.right.equalTo(-20)
make.height.equalTo(1)
make.bottom.equalToSuperview().offset(-42)
}
}
func setupUI() {
backgroundColor = .clear
contentView.backgroundColor = .pageBkgColor
selectionStyle = .none
}
}
//
// YHActivityDetailCell0.swift
// galaxy
//
// Created by davidhuangA on 2024/7/1.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityDetailCell0: UITableViewCell {
static let cellReuseIdentifier = "YHActivityDetailCell0"
var dataModel : YHActivityDetailModel? {
didSet {
updateUI()
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
lazy var topImgV:UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "global_default_image")
view.contentMode = .scaleAspectFill
view.clipsToBounds = true
return view
}()
//活动名称地址
lazy var acitivityTitle:YHActivityTitleItemView = {
let view = YHActivityTitleItemView()
return view
}()
// //活动详情
// lazy var acitivityDetail:YHActivityDetailItemView = {
// let view = YHActivityDetailItemView()
// return view
// }()
//
// //活动温馨提示
// lazy var acitivityTips:YHActivityTipsItemView = {
// let view = YHActivityTipsItemView()
// return view
// }()
//
//
// //活动温馨提示
// lazy var fakeView:UIView = {
// let view = UIView()
// view.backgroundColor = .clear
// return view
// }()
}
extension YHActivityDetailCell0 {
func updateUI() {
guard let model = dataModel else {
return
}
contentView.removeSubviews()
contentView.addSubview(topImgV)
contentView.addSubview(acitivityTitle)
// contentView.addSubview(acitivityDetail)
// contentView.addSubview(acitivityTips)
// contentView.addSubview(fakeView)
topImgV.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(KScreenWidth)
}
if let url = URL(string: model.cover) {
topImgV.kf.setImage(with: url, placeholder: UIImage(named: "global_default_image"))
} else {
topImgV.image = UIImage(named: "global_default_image")
}
acitivityTitle.dataModel = model
acitivityTitle.snp.makeConstraints { make in
make.top.equalTo(topImgV.snp.bottom).offset(24)
make.left.equalTo(20)
make.right.equalTo(-20)
make.bottom.equalToSuperview().offset(-24)
}
// var lastView : UIView = acitivityTitle
//
//
//
// //acitivityDetail
// if model.introduce.isEmpty && model.posters.count < 1 {
// //隐藏
// acitivityDetail.isHidden = true
// } else {
// //展示
// acitivityDetail.isHidden = false
// acitivityDetail.dataModel = model
//
//
// acitivityDetail.snp.makeConstraints { make in
// make.top.equalTo(lastView.snp.bottom).offset(24)
// make.left.equalTo(20)
// make.right.equalTo(-20)
// }
//
// lastView = acitivityDetail
// }
//
// //acitivityTips
// if model.tips.isEmpty {
// acitivityTips.isHidden = true
// } else {
// acitivityTips.isHidden = false
// acitivityTips.dataModel = model
//
// acitivityTips.snp.makeConstraints { make in
// make.top.equalTo(lastView.snp.bottom).offset(24)
// make.left.equalTo(20)
// make.right.equalTo(-20)
// }
// lastView = acitivityTips
// }
//
// fakeView.snp.makeConstraints { make in
// make.top.equalTo(lastView.snp.bottom).offset(24)
// make.left.equalTo(20)
// make.right.equalTo(-20)
// make.height.equalTo(1)
// make.bottom.equalToSuperview().offset(-42)
// }
}
func setupUI() {
backgroundColor = .clear
contentView.backgroundColor = .clear
selectionStyle = .none
}
}
//
// YHActivityDetailCell1.swift
// galaxy
//
// Created by davidhuangA on 2024/7/1.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityCoverItem {
var url: String = ""
let width: CGFloat = KScreenWidth-40.0
var height: CGFloat = KScreenWidth-40.0
lazy var imgView: UIImageView = {
let view = UIImageView(image: UIImage(named:"global_default_image"))
view.contentMode = .scaleAspectFill
view.clipsToBounds = true
return view
}()
}
class YHActivityDetailCell1: UITableViewCell {
static let cellReuseIdentifier = "YHActivityDetailCell1"
var dataModel : YHActivityDetailModel = YHActivityDetailModel() {
didSet {
updateUI()
}
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private lazy var bottomLine : UIView = {
let view = UIView()
view.backgroundColor = UIColor.separatorColor
return view
}()
lazy var nameLabel:UILabel = {
let lable = UILabel()
lable.textColor = UIColor.mainTextColor
lable.textAlignment = .left
lable.font = UIFont.PFSC_M(ofSize:17)
lable.text = "活动详情"
lable.numberOfLines = 0
return lable
}()
lazy var describeLable:UILabel = {
let lable = UILabel()
lable.textColor = UIColor.mainTextColor70
lable.textAlignment = .left
lable.lineBreakMode = .byCharWrapping
lable.font = UIFont.PFSC_R(ofSize:14)
lable.numberOfLines = 0
return lable
}()
lazy var imgsContentView:UIView = {
let view = UIView()
view.clipsToBounds = true
return view
}()
}
extension YHActivityDetailCell1 {
func updateUI() {
describeLable.text = dataModel.introduce
// 创建NSMutableAttributedString实例
let attributedText = NSMutableAttributedString(string: dataModel.introduce)
// 设置行距,这里设置为10.0
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 6.0 // 设置行距
// 将段落样式添加到NSMutableAttributedString
attributedText.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attributedText.length))
// 设置UILabel的attributedText属性
describeLable.attributedText = attributedText
describeLable.snp.updateConstraints { make in
let topMargin = dataModel.introduce.isEmpty ? 0.0 : 24.0
make.top.equalTo(nameLabel.snp.bottom).offset(topMargin)
}
imgsContentView.removeSubviews()
var theLastView: UIView? = nil
var totalImgHeight = 0.0
for (index, item) in dataModel.coverItems.enumerated() {
totalImgHeight += item.height
self.imgsContentView.addSubview(item.imgView)
item.imgView.snp.remakeConstraints { make in
var gap = 0.0
if index == 0 {
gap = item.height > 0 ? 24.0 : 0.0
make.top.equalTo(self.imgsContentView.snp.top).offset(gap)
} else {
if let lastView = theLastView {
gap = item.height > 0 ? 24.0 : 0.0
make.top.equalTo(lastView.snp.bottom).offset(gap)
}
}
totalImgHeight += gap
make.height.equalTo(item.height)
make.left.right.equalToSuperview()
}
theLastView = item.imgView
}
imgsContentView.snp.updateConstraints { make in
let top2Margin = self.dataModel.coverItems.count > 0 ? 24.0 : 0.0
make.top.equalTo(describeLable.snp.bottom).offset(top2Margin)
let imgsHeight = self.dataModel.coverItems.count <= 0 ? 0.0 : totalImgHeight
make.height.equalTo(imgsHeight)
}
self.setNeedsLayout()
self.layoutIfNeeded()
}
func setupUI() {
backgroundColor = .clear
contentView.backgroundColor = .clear
selectionStyle = .none
self.contentView.addSubview(bottomLine)
self.contentView.addSubview(nameLabel)
self.contentView.addSubview(describeLable)
self.contentView.addSubview(imgsContentView)
nameLabel.setContentCompressionResistancePriority(.required, for: .vertical)
nameLabel.setContentHuggingPriority(.required, for: .vertical)
describeLable.setContentCompressionResistancePriority(.required, for: .vertical)
describeLable.setContentHuggingPriority(.required, for: .vertical)
bottomLine.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.top.equalToSuperview()
make.height.equalTo(1)
}
nameLabel.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.top.equalTo(bottomLine.snp.bottom).offset(24)
}
describeLable.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.top.equalTo(nameLabel.snp.bottom).offset(24)
}
imgsContentView.snp.makeConstraints { make in
make.left.equalTo(20)
make.right.equalTo(-20)
make.top.equalTo(describeLable.snp.bottom).offset(24)
make.height.equalTo(0.0)
// make.bottom.equalTo(-24)
make.bottom.equalToSuperview()
}
}
}
//
// YHActivityDetailCell2.swift
// galaxy
//
// Created by davidhuangA on 2024/7/1.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityDetailCell2: UITableViewCell {
static let cellReuseIdentifier = "YHActivityDetailCell2"
var dataModel : YHActivityDetailModel? {
didSet {
updateUI()
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
// lazy var topImgV:UIImageView = {
// let view = UIImageView()
// view.image = UIImage(named: "global_default_image")
// view.contentMode = .scaleAspectFill
// view.clipsToBounds = true
// return view
// }()
//
//
// //活动名称地址
// lazy var acitivityTitle:YHActivityTitleItemView = {
// let view = YHActivityTitleItemView()
// return view
// }()
//
//
// //活动详情
// lazy var acitivityDetail:YHActivityDetailItemView = {
// let view = YHActivityDetailItemView()
// return view
// }()
//活动温馨提示
lazy var acitivityTips:YHActivityTipsItemView = {
let view = YHActivityTipsItemView()
return view
}()
//活动温馨提示
lazy var fakeView:UIView = {
let view = UIView()
view.backgroundColor = .clear
return view
}()
}
extension YHActivityDetailCell2 {
func updateUI() {
guard let model = dataModel else {
return
}
contentView.removeSubviews()
// contentView.addSubview(topImgV)
// contentView.addSubview(acitivityTitle)
// contentView.addSubview(acitivityDetail)
contentView.addSubview(acitivityTips)
contentView.addSubview(fakeView)
// topImgV.snp.makeConstraints { make in
// make.top.left.right.equalToSuperview()
// make.height.equalTo(KScreenWidth)
// }
//
// if let url = URL(string: model.cover) {
// topImgV.kf.setImage(with: url, placeholder: UIImage(named: "global_default_image"))
// } else {
// topImgV.image = UIImage(named: "global_default_image")
// }
//
// acitivityTitle.dataModel = model
// acitivityTitle.snp.makeConstraints { make in
// make.top.equalTo(topImgV.snp.bottom).offset(24)
// make.left.equalTo(20)
// make.right.equalTo(-20)
// }
//
//
// var lastView : UIView = acitivityTitle
//
//
//
// //acitivityDetail
// if model.introduce.isEmpty && model.posters.count < 1 {
// //隐藏
// acitivityDetail.isHidden = true
// } else {
// //展示
// acitivityDetail.isHidden = false
// acitivityDetail.dataModel = model
//
//
// acitivityDetail.snp.makeConstraints { make in
// make.top.equalTo(lastView.snp.bottom).offset(24)
// make.left.equalTo(20)
// make.right.equalTo(-20)
// }
//
// lastView = acitivityDetail
// }
//
// //acitivityTips
// if model.tips.isEmpty {
// acitivityTips.isHidden = true
// } else {
// acitivityTips.isHidden = false
// acitivityTips.dataModel = model
//
// acitivityTips.snp.makeConstraints { make in
// make.top.equalTo(lastView.snp.bottom).offset(24)
// make.left.equalTo(20)
// make.right.equalTo(-20)
// }
// lastView = acitivityTips
// }
acitivityTips.dataModel = model
acitivityTips.snp.makeConstraints { make in
make.top.equalToSuperview().offset(24)
make.left.equalTo(20)
make.right.equalTo(-20)
}
fakeView.snp.makeConstraints { make in
make.top.equalTo(acitivityTips.snp.bottom).offset(24)
make.left.equalTo(20)
make.right.equalTo(-20)
make.height.equalTo(1)
make.bottom.equalToSuperview().offset(-42)
}
}
func setupUI() {
backgroundColor = .clear
contentView.backgroundColor = .clear
selectionStyle = .none
}
}
//
// YHActivityDetailItemView.swift
// galaxy
//
// Created by davidhuangA on 2024/6/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityDetailItemView: UIView {
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
var dataModel : YHActivityDetailModel? {
didSet {
updateUI()
}
}
private lazy var bottomLine : UIView = {
let view = UIView()
view.backgroundColor = UIColor.separatorColor
return view
}()
lazy var nameLabel:UILabel = {
let lable = UILabel()
lable.textColor = UIColor.mainTextColor
lable.textAlignment = .left
lable.font = UIFont.PFSC_M(ofSize:17)
lable.text = "活动详情"
lable.numberOfLines = 0
return lable
}()
lazy var describeLable:UILabel = {
let lable = UILabel()
lable.textColor = UIColor.mainTextColor70
lable.textAlignment = .left
lable.lineBreakMode = .byCharWrapping
lable.font = UIFont.PFSC_R(ofSize:14)
lable.text = " "
lable.numberOfLines = 0
lable.isHidden = true
return lable
}()
}
extension YHActivityDetailItemView {
func updateUI() {
guard let model = dataModel else {
return
}
describeLable.text = model.introduce
nameLabel.snp.remakeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(bottomLine.snp.bottom).offset(24)
}
var lastView : UIView = nameLabel
if model.introduce.isEmpty {
} else {
describeLable.isHidden = false
if model.posters.count > 0 {
describeLable.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(nameLabel.snp.bottom).offset(24)
}
} else {
describeLable.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(nameLabel.snp.bottom).offset(24)
make.bottom.equalToSuperview()
}
}
lastView = describeLable
}
if model.posters.count > 0 {
for (index, value) in model.posters.enumerated() {
print("Index: \(index), Value: \(value)")
let imageV : UIImageView = UIImageView()
imageV.contentMode = .scaleAspectFill
imageV.clipsToBounds = true
if let url = URL(string: value) {
imageV.kf.setImage(with: url, placeholder: UIImage(named: "global_default_image"))
}
addSubview(imageV)
if model.posters.count - 1 == index {
if index == 0 {
imageV.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(lastView.snp.bottom).offset(24)
make.height.equalTo(376)
make.bottom.equalToSuperview()
}
} else {
imageV.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(lastView.snp.bottom).offset(20)
make.height.equalTo(376)
make.bottom.equalToSuperview()
}
}
} else {
imageV.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(lastView.snp.bottom).offset(20)
make.height.equalTo(376)
}
}
lastView = imageV
}
}
}
func setupUI() {
addSubview(bottomLine)
addSubview(nameLabel)
addSubview(describeLable)
bottomLine.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(1)
}
nameLabel.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(bottomLine.snp.bottom).offset(24)
make.bottom.equalToSuperview()
}
}
}
//
// YHActivityListCell.swift
// galaxy
//
// Created by davidhuangA on 2024/6/19.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityListCell: UITableViewCell {
static let cellReuseIdentifier = "YHActivityListCell"
var dataModel : YHActivityModel? {
didSet {
updateUI()
}
}
var type : Int = 0
var sessionIndex : Int = 0 {
didSet {
let tmp = sessionIndex % 3
let name = "activity_cell_bkg_" + String(tmp)
bkgImgV.image = UIImage(named: name)
}
}
lazy var bkgImgV:UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "activity_cell_bkg_0")
view.contentMode = .scaleAspectFill
view.clipsToBounds = true
return view
}()
lazy var vipImgV:UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "activity_vip_icon")
view.contentMode = .scaleAspectFill
view.isHidden = true
return view
}()
lazy var nameLabel:UILabel = {
let nameLabel = UILabel()
nameLabel.textColor = UIColor.mainTextColor
nameLabel.textAlignment = .left
nameLabel.font = UIFont.PFSC_M(ofSize:18)
nameLabel.text = "银河APP发布会"
nameLabel.numberOfLines = 2
return nameLabel
}()
lazy var activityImgV:UIImageView = {
let view = UIImageView()
view.contentMode = .scaleAspectFill
view.image = UIImage(named: "global_default_image")
return view
}()
lazy var lineView:UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
lazy var dateLabel:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor70
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:12)
label.text = "08/08 周五 18:00-20:00"
return label
}()
lazy var detailLabel:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor70
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:12)
label.text = "深圳深南大道本元大厦26A银河体验中心"
return label
}()
lazy var statusLabel:UILabel = {
let label = UILabel()
label.textColor = UIColor.brandMainColor
label.textAlignment = .right
label.font = UIFont.PFSC_R(ofSize:12)
label.text = "立即报名"
return label
}()
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
}
extension YHActivityListCell {
func updateUI() {
guard let model = dataModel else {
return
}
if model.tag == 1 {
vipImgV.isHidden = false
} else {
vipImgV.isHidden = true
}
nameLabel.text = model.name
if let url = URL(string: model.cover) {
activityImgV.kf.setImage(with: url, placeholder: UIImage(named: "global_default_image"))
} else {
activityImgV.image = UIImage(named: "global_default_image")
}
//
dateLabel.text = model.getDateString()//String(model.beginTime)
//
detailLabel.text = model.place
if let status = Int(model.status) {
if type == 0 {
statusLabel.text = YHActivityStatus.init(rawValue: status)?.titleForList
statusLabel.textColor = YHActivityStatus.init(rawValue: status)?.activityColor
} else {
statusLabel.text = YHActivityStatus.init(rawValue: status)?.titleForMyApplyList
statusLabel.textColor = YHActivityStatus.init(rawValue: status)?.activityColorForMyApplyList
}
} else {
statusLabel.text = ""
}
}
func setupUI() {
backgroundColor = .clear
selectionStyle = .none
contentView.addSubview(bkgImgV)
contentView.addSubview(vipImgV)
contentView.addSubview(nameLabel)
contentView.addSubview(activityImgV)
contentView.addSubview(lineView)
contentView.addSubview(dateLabel)
contentView.addSubview(detailLabel)
contentView.addSubview(statusLabel)
bkgImgV.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
vipImgV.snp.makeConstraints { make in
make.top.left.equalToSuperview()
make.width.equalTo(44)
make.height.equalTo(18)
}
activityImgV.snp.makeConstraints { make in
make.right.equalTo(-20)
make.top.equalTo(20)
make.width.height.equalTo(72)
}
nameLabel.snp.makeConstraints { make in
make.top.equalTo(28)
make.left.equalTo(18)
make.right.equalTo(activityImgV.snp.left).offset(-20)
}
lineView.snp.makeConstraints { make in
make.top.equalTo(activityImgV.snp.bottom).offset(20)
make.left.equalTo(nameLabel.snp.left)
make.right.equalTo(activityImgV.snp.right)
make.height.equalTo(1)
}
dateLabel.snp.makeConstraints { make in
make.top.equalTo(lineView.snp.bottom).offset(14)
make.left.equalTo(lineView.snp.left)
make.right.equalTo(lineView.snp.right)
make.height.equalTo(17)
}
statusLabel.snp.makeConstraints { make in
make.top.equalTo(dateLabel.snp.bottom).offset(8)
make.right.equalTo(dateLabel.snp.right)
make.height.equalTo(17)
make.width.equalTo(48)
}
detailLabel.snp.makeConstraints { make in
make.top.equalTo(statusLabel.snp.top)
make.left.equalTo(dateLabel.snp.left)
make.height.equalTo(17)
make.right.equalTo(statusLabel.snp.left).offset(-16)
}
}
}
//
// YHActivityTipsItemView.swift
// galaxy
//
// Created by davidhuangA on 2024/6/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityTipsItemView: UIView {
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
var tipsText : String? {
didSet {
updateUI2()
}
}
var showLineFlag : Bool = true
var dataModel : YHActivityDetailModel? {
didSet {
updateUI()
}
}
private lazy var bottomLine : UIView = {
let view = UIView()
view.backgroundColor = UIColor.separatorColor
return view
}()
lazy var nameLabel:UILabel = {
let nameLabel = UILabel()
nameLabel.textColor = UIColor.mainTextColor
nameLabel.textAlignment = .left
nameLabel.font = UIFont.PFSC_M(ofSize:17)
nameLabel.text = "温馨提示"
nameLabel.numberOfLines = 0
return nameLabel
}()
lazy var describeLable:UILabel = {
let nameLabel = UILabel()
nameLabel.textColor = UIColor.mainTextColor70
nameLabel.textAlignment = .left
nameLabel.lineBreakMode = .byCharWrapping
nameLabel.font = UIFont.PFSC_R(ofSize:14)
nameLabel.text = ""
nameLabel.numberOfLines = 0
return nameLabel
}()
override func layoutSubviews() {
super.layoutSubviews()
bottomLine.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(1)
}
if showLineFlag {
bottomLine.isHidden = false
nameLabel.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(bottomLine.snp.bottom).offset(24)
}
} else {
bottomLine.isHidden = true
nameLabel.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
}
}
describeLable.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(nameLabel.snp.bottom).offset(24)
make.bottom.equalToSuperview()
}
}
}
extension YHActivityTipsItemView {
func updateUI2() {
guard let txt = tipsText else {
return
}
describeLable.text = txt
// 创建NSMutableAttributedString实例
let attributedText = NSMutableAttributedString(string: txt)
// 设置行距,这里设置为10.0
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 6.0 // 设置行距
// 将段落样式添加到NSMutableAttributedString
attributedText.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attributedText.length))
// 设置UILabel的attributedText属性
describeLable.attributedText = attributedText
layoutIfNeeded()
}
func updateUI() {
guard let model = dataModel else {
return
}
describeLable.text = model.tips
// 创建NSMutableAttributedString实例
let attributedText = NSMutableAttributedString(string: model.tips)
// 设置行距,这里设置为10.0
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 6.0 // 设置行距
// 将段落样式添加到NSMutableAttributedString
attributedText.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attributedText.length))
// 设置UILabel的attributedText属性
describeLable.attributedText = attributedText
layoutIfNeeded()
}
func setupUI() {
addSubview(bottomLine)
addSubview(nameLabel)
addSubview(describeLable)
layoutIfNeeded()
}
}
//
// YHActivityTitleItemView.swift
// galaxy
//
// Created by davidhuangA on 2024/6/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityTitleItemView: UIView {
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
var dataModel : YHActivityDetailModel? {
didSet {
updateUI()
}
}
private lazy var nameTextView : UITextView = {
let lable0 = UITextView()
lable0.textColor = UIColor.mainTextColor
lable0.textAlignment = .left
lable0.font = UIFont.PFSC_B(ofSize:24)
lable0.isScrollEnabled = false
lable0.isEditable = false
lable0.isSelectable = false
lable0.backgroundColor = .clear
lable0.textContainerInset = UIEdgeInsets.zero // 消除文本容器的内边距
lable0.textContainer.lineFragmentPadding = 0
return lable0
}()
lazy var timeStaticLable:UILabel = {
let nameLabel = UILabel()
nameLabel.textColor = UIColor.mainTextColor50
nameLabel.textAlignment = .left
nameLabel.font = UIFont.PFSC_R(ofSize:14)
nameLabel.text = "时间"
return nameLabel
}()
lazy var timeLable:UILabel = {
let nameLabel = UILabel()
nameLabel.textColor = UIColor.mainTextColor
nameLabel.textAlignment = .left
nameLabel.font = UIFont.PFSC_R(ofSize:14)
nameLabel.text = "08-06 周五 09:30"
return nameLabel
}()
lazy var addressStaticLable:UILabel = {
let nameLabel = UILabel()
nameLabel.textColor = UIColor.mainTextColor50
nameLabel.textAlignment = .left
nameLabel.font = UIFont.PFSC_R(ofSize:14)
nameLabel.text = "地址"
return nameLabel
}()
lazy var addressLable:UILabel = {
let nameLabel = UILabel()
nameLabel.textColor = UIColor.mainTextColor
nameLabel.textAlignment = .left
nameLabel.font = UIFont.PFSC_R(ofSize:14)
nameLabel.text = "深圳市本元大厦26A银河集团体验中心"
nameLabel.numberOfLines = 0
return nameLabel
}()
lazy var navAddressLable:UILabel = {
let nameLabel = UILabel()
nameLabel.textColor = UIColor.mainTextColor50
nameLabel.textAlignment = .left
nameLabel.font = UIFont.PFSC_R(ofSize:14)
nameLabel.text = "距地铁10号线亮马站D口步行62"
nameLabel.numberOfLines = 0
return nameLabel
}()
}
extension YHActivityTitleItemView {
func updateUI() {
guard let model = dataModel else {
return
}
nameTextView.text = model.name
if model.tag == 1 {
nameTextView.attributed.text = """
\(model.name + " ", .foreground(UIColor.mainTextColor), .font(UIFont.PFSC_B(ofSize:22)))\(.image(UIImage(named: "activity_vip_icon2")!,.custom(.offset(CGPoint(x: 0, y: -9.0)), size: .init(width: 44, height: 34))))
"""
} else {
nameTextView.attributed.text = """
\(model.name, .foreground(UIColor.mainTextColor), .font(UIFont.PFSC_B(ofSize:22)))
"""
}
timeLable.text = model.getDateString(format: "yyyy-MM-dd")
addressLable.text = model.place
navAddressLable.text = model.guidance
}
func setupUI() {
addSubview(nameTextView)
addSubview(timeStaticLable)
addSubview(timeLable)
addSubview(addressStaticLable)
addSubview(addressLable)
addSubview(navAddressLable)
nameTextView.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
}
timeStaticLable.snp.makeConstraints { make in
make.left.equalToSuperview()
make.top.equalTo(nameTextView.snp.bottom).offset(24)
make.height.equalTo(20)
make.width.equalTo(28)
}
timeLable.snp.makeConstraints { make in
make.left.equalTo(timeStaticLable.snp.right).offset(16)
make.top.equalTo(timeStaticLable.snp.top)
make.right.equalToSuperview()
}
addressStaticLable.snp.makeConstraints { make in
make.left.equalTo(timeStaticLable.snp.left)
make.top.equalTo(timeLable.snp.bottom).offset(13)
make.height.equalTo(timeStaticLable.snp.height)
make.width.equalTo(timeStaticLable.snp.width)
}
addressLable.snp.makeConstraints { make in
make.left.equalTo(timeLable.snp.left)
make.top.equalTo(addressStaticLable.snp.top)
make.right.equalToSuperview()
}
navAddressLable.snp.makeConstraints { make in
make.left.equalTo(addressLable.snp.left)
make.top.equalTo(addressLable.snp.bottom).offset(8)
make.right.equalToSuperview()
make.bottom.equalToSuperview()
}
// nameTextView.attributed.text = """
// \("", .foreground(UIColor.mainTextColor), .font(UIFont.PFSC_B(ofSize:24)))\(.image(UIImage(named: "activity_vip_icon2")!,.custom(.offset(CGPoint(x: 0, y: -7)), size: .init(width: 44, height: 34))))
// """
}
}
//
// YHActivityTravelCell.swift
// galaxy
//
// Created by davidhuangA on 2024/6/21.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityTravelCell: UITableViewCell {
static let cellReuseIdentifier = "YHActivityTravelCell"
private var isApplyFlag : Bool = true
var dataModel : YHActivityTravelModel? {
didSet {
updateUI()
}
}
typealias Block = () -> ()
var block: Block?
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
lazy var statusLable:UILabel = {
let lable = UILabel()
lable.textColor = UIColor.mainTextColor
lable.textAlignment = .left
lable.font = UIFont.PFSC_M(ofSize:28)
lable.text = "已报名"
return lable
}()
//活动名称地址
lazy var acitivityTitle:YHActivityTravelitemView = {
let view = YHActivityTravelitemView()
return view
}()
//报名人数
lazy var acitivityApplyInfo:YHActivityApplyInfoItemView = {
let view = YHActivityApplyInfoItemView()
return view
}()
//活动温馨提示
lazy var acitivityTips:YHActivityTipsItemView = {
let view = YHActivityTipsItemView()
view.showLineFlag = false
return view
}()
//取消活动
lazy var cancelButton:UIButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.brandMainColor
button.titleLabel?.font = UIFont.PFSC_R(ofSize: 15)
button.contentHorizontalAlignment = .center
button.setTitle("取消报名", for: .normal)
button.setTitleColor(UIColor.white, for: .normal)
button.layer.cornerRadius = kCornerRadius3
button.addTarget(self, action: #selector(clickCancelBtn), for: .touchUpInside)
button.layer.cornerRadius = kCornerRadius3
button.clipsToBounds = true
return button
}()
}
extension YHActivityTravelCell {
func updateUI() {
guard let model = dataModel else {
return
}
if model.status.int == 2 {
cancelButton.isHidden = false
cancelButton.setTitle("取消报名", for: .normal)
cancelButton.setTitle("取消报名", for: .highlighted)
cancelButton.setTitleColor(UIColor.mainTextColor, for: .normal)
cancelButton.setTitleColor(UIColor.mainTextColor, for: .highlighted)
cancelButton.backgroundColor = .clear
cancelButton.layer.borderWidth = 1
cancelButton.layer.borderColor = UIColor.mainTextColor50.cgColor
statusLable.text = "已报名"
} else if model.status.int == 4 || model.status.int == 1 {
cancelButton.isHidden = false
cancelButton.setTitle("重新报名", for: .normal)
cancelButton.setTitle("重新报名", for: .highlighted)
cancelButton.setTitleColor(UIColor.white, for: .normal)
cancelButton.setTitleColor(UIColor.white, for: .highlighted)
cancelButton.backgroundColor = .brandMainColor
cancelButton.layer.borderWidth = 0
cancelButton.layer.borderColor = UIColor.clear.cgColor
statusLable.text = "已取消"
} else if model.status.int == 3 {
cancelButton.isHidden = true
statusLable.text = "活动结束"
}
else {
cancelButton.isHidden = true
}
acitivityTitle.dataModel = model
acitivityTitle.snp.remakeConstraints { make in
make.top.equalTo(statusLable.snp.bottom).offset(20)
make.left.right.equalToSuperview()
}
acitivityApplyInfo.dataModel = model.user
acitivityApplyInfo.snp.remakeConstraints { make in
make.top.equalTo(acitivityTitle.snp.bottom).offset(32)
make.left.right.equalToSuperview()
}
var lastView : UIView = acitivityApplyInfo
if !model.tips.isEmpty {
acitivityTips.isHidden = false
acitivityTips.tipsText = model.tips
acitivityTips.snp.remakeConstraints { make in
make.top.equalTo(acitivityApplyInfo.snp.bottom).offset(32)
make.left.right.equalToSuperview()
}
acitivityTips.layoutIfNeeded()
lastView = acitivityTips
} else {
acitivityTips.isHidden = true
}
cancelButton.snp.remakeConstraints { make in
make.top.equalTo(lastView.snp.bottom).offset(32)
make.width.equalTo(178)
make.height.equalTo(42)
make.centerX.equalToSuperview()
make.bottom.equalToSuperview().offset(-46)
}
}
@objc func clickCancelBtn() {
self.block?()
}
func setupUI() {
backgroundColor = .clear
contentView.backgroundColor = .clear
selectionStyle = .none
contentView.addSubview(statusLable)
contentView.addSubview(acitivityTitle)
contentView.addSubview(acitivityApplyInfo)
contentView.addSubview(acitivityTips)
contentView.addSubview(cancelButton)
statusLable.snp.makeConstraints { make in
make.top.equalToSuperview().offset(20)
make.left.right.equalToSuperview()
make.height.equalTo(40)
}
acitivityTitle.snp.makeConstraints { make in
make.top.equalTo(statusLable.snp.bottom).offset(20)
make.left.right.equalToSuperview()
}
acitivityApplyInfo.snp.makeConstraints { make in
make.top.equalTo(acitivityTitle.snp.bottom).offset(32)
make.left.right.equalToSuperview()
}
acitivityTips.snp.makeConstraints { make in
make.top.equalTo(acitivityApplyInfo.snp.bottom).offset(32)
make.left.right.equalToSuperview()
}
acitivityTips.layoutIfNeeded()
cancelButton.snp.makeConstraints { make in
make.top.equalTo(acitivityTips.snp.bottom).offset(32)
make.width.equalTo(178)
make.height.equalTo(42)
make.centerX.equalToSuperview()
make.bottom.equalToSuperview().offset(-46)
}
}
}
//
// YHActivityTravelitemView.swift
// galaxy
//
// Created by davidhuangA on 2024/6/21.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityTravelitemView: UIView {
var dataModel : YHActivityTravelModel? {
didSet {
updateUI()
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
lazy var activityImgV:UIImageView = {
let view = UIImageView()
view.contentMode = .scaleAspectFill
view.image = UIImage(named: "global_default_image")
return view
}()
lazy var nameLabel:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.textAlignment = .left
label.font = UIFont.PFSC_M(ofSize:18)
label.text = ""
label.numberOfLines = 0
label.lineBreakMode = .byCharWrapping
return label
}()
lazy var timeStaticLable:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor50
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:14)
label.text = "时间"
return label
}()
lazy var timeLable:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:14)
label.text = "2024-08-06 周五 09:30"
label.numberOfLines = 0
return label
}()
lazy var addressStaticLable:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor50
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:14)
label.text = "地址"
return label
}()
lazy var addressLable:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:14)
label.text = ""
label.numberOfLines = 0
return label
}()
lazy var navAddressLable:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor50
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:14)
label.text = ""
label.numberOfLines = 0
return label
}()
}
extension YHActivityTravelitemView {
func updateUI() {
guard let model = dataModel else {
return
}
nameLabel.text = model.name
if let url = URL(string: model.cover) {
activityImgV.kf.setImage(with: url, placeholder: UIImage(named: "global_default_image"))
} else {
activityImgV.image = UIImage(named: "global_default_image")
}
timeLable.text = model.getDateString(format: "yyyy-MM-dd")
addressLable.text = model.place
navAddressLable.text = model.guidance
let hhhh = nameLabel.requiredHeight
timeStaticLable.snp.removeConstraints()
if hhhh > 72 {
timeStaticLable.snp.remakeConstraints { make in
make.left.equalTo(nameLabel.snp.left)
make.top.equalTo(nameLabel.snp.bottom).offset(24)
make.height.equalTo(20)
make.width.equalTo(28)
}
} else {
timeStaticLable.snp.remakeConstraints { make in
make.left.equalTo(nameLabel.snp.left)
make.top.equalTo(activityImgV.snp.bottom).offset(24)
make.height.equalTo(20)
make.width.equalTo(28)
}
}
timeLable.snp.remakeConstraints { make in
make.left.equalTo(timeStaticLable.snp.right).offset(16)
make.top.equalTo(timeStaticLable.snp.top)
make.right.equalToSuperview().offset(-20)
}
addressStaticLable.snp.remakeConstraints { make in
make.left.equalTo(timeStaticLable.snp.left)
make.top.equalTo(timeLable.snp.bottom).offset(13)
make.height.equalTo(timeStaticLable.snp.height)
make.width.equalTo(timeStaticLable.snp.width)
}
addressLable.snp.remakeConstraints { make in
make.left.equalTo(timeLable.snp.left)
make.top.equalTo(addressStaticLable.snp.top)
make.right.equalToSuperview().offset(-20)
}
navAddressLable.snp.remakeConstraints { make in
make.left.equalTo(addressLable.snp.left)
make.top.equalTo(addressLable.snp.bottom).offset(8)
make.right.equalToSuperview().offset(-20)
make.bottom.equalToSuperview().offset(-20)
}
}
func setupUI() {
backgroundColor = .white
layer.cornerRadius = kCornerRadius6
clipsToBounds = true
addSubview(activityImgV)
addSubview(nameLabel)
addSubview(timeStaticLable)
addSubview(timeLable)
addSubview(addressStaticLable)
addSubview(addressLable)
addSubview(navAddressLable)
activityImgV.snp.makeConstraints { make in
make.top.equalTo(20)
make.right.equalTo(-20)
make.height.width.equalTo(72)
}
nameLabel.snp.makeConstraints { make in
make.top.equalTo(24)
make.left.equalTo(20)
make.right.equalTo(activityImgV.snp.left).offset(-42)
}
timeStaticLable.snp.makeConstraints { make in
make.left.equalTo(nameLabel.snp.left)
make.top.equalTo(activityImgV.snp.bottom).offset(24)
make.height.equalTo(20)
make.width.equalTo(28)
}
timeLable.snp.makeConstraints { make in
make.left.equalTo(timeStaticLable.snp.right).offset(16)
make.top.equalTo(timeStaticLable.snp.top)
make.right.equalToSuperview().offset(-20)
}
addressStaticLable.snp.makeConstraints { make in
make.left.equalTo(timeStaticLable.snp.left)
make.top.equalTo(timeLable.snp.bottom).offset(13)
make.height.equalTo(timeStaticLable.snp.height)
make.width.equalTo(timeStaticLable.snp.width)
}
addressLable.snp.makeConstraints { make in
make.left.equalTo(timeLable.snp.left)
make.top.equalTo(addressStaticLable.snp.top)
make.right.equalToSuperview().offset(-20)
}
navAddressLable.snp.makeConstraints { make in
make.left.equalTo(addressLable.snp.left)
make.top.equalTo(addressLable.snp.bottom).offset(8)
make.right.equalToSuperview().offset(-20)
make.bottom.equalToSuperview().offset(-20)
}
}
}
//
// YHActivityTwoItemView.swift
// galaxy
//
// Created by davidhuangA on 2024/6/21.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHActivityTwoItemView: UIView {
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
lazy var titleLable:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor50
label.textAlignment = .left
label.font = UIFont.PFSC_R(ofSize:14)
label.text = ""
// label.numberOfLines = 0
return label
}()
lazy var detailLable:UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.textAlignment = .right
label.font = UIFont.PFSC_R(ofSize:14)
label.text = ""
label.numberOfLines = 0
return label
}()
func updateItem(title : String, value : String) {
titleLable.text = title
detailLable.text = value
}
}
extension YHActivityTwoItemView {
func setupUI() {
addSubview(titleLable)
addSubview(detailLable)
titleLable.snp.makeConstraints { make in
make.top.left.equalToSuperview()
make.width.equalTo(56)
}
detailLable.snp.makeConstraints { make in
make.top.equalTo(titleLable.snp.top)
make.left.equalTo(titleLable.snp.right).offset(20)
make.right.equalToSuperview()
make.bottom.equalToSuperview()
}
}
}
//
// YHInformationAuthorizationStepTwoViewController.swift
// galaxy
//
// Created by EDY on 2024/6/18.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHInformationAuthorizationStepTwoViewController: YHBaseViewController {
var stepOneView: UIView!
var stepTwoView: UIView!
var nextButton: UIButton!
var tableView: UITableView!
var items: [YHSettingItem] = [YHSettingItem(type: .normal, title: "允许您的信息在名片中使用", subTitle: "开启后,您的信息将自动同步至您的个人名片,并对您的好友公开可见", isSelect: true, isShowAlert: false)]
var viewModel: YHInformationAuthorizeViewModel = YHInformationAuthorizeViewModel()
var stepFlag: Bool = true
var name: String = ""
override func viewDidLoad() {
super.viewDidLoad()
setView()
getData()
}
func getData() {
if stepFlag {
items = viewModel.getBaseSetDataSource()
tableView.reloadData()
} else {
viewModel.requestUserAuthorization {[weak self] success, error in
guard let self = self else { return }
items = viewModel.getBaseSetDataSource()
tableView.reloadData()
}
}
}
func setView() {
gk_navTitle = "信息授权"
view.backgroundColor = .white
stepOneView = {
let view = UIView()
view.backgroundColor = UIColor.brandMainColor
return view
}()
view.addSubview(stepOneView)
stepOneView.snp.makeConstraints { make in
make.left.equalTo(21)
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 16)
make.height.equalTo(3)
make.right.equalTo(view.snp.centerX).offset(-3)
}
stepTwoView = {
let view = UIView()
view.backgroundColor = UIColor.brandMainColor
return view
}()
view.addSubview(stepTwoView)
stepTwoView.snp.makeConstraints { make in
make.right.equalTo(-21)
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 16)
make.height.equalTo(3)
make.left.equalTo(view.snp.centerX).offset(3)
}
nextButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.brandMainColor
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 16)
button.contentHorizontalAlignment = .center
button.setTitle("完成", for: .normal)
button.setTitleColor( UIColor(hex:0xffffff), for: .normal)
button.layer.cornerRadius = kCornerRadius3
button.addTarget(self, action: #selector(nextStep), for: .touchUpInside)
return button
}()
view.addSubview(nextButton)
nextButton.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.bottom.equalTo(-8 - k_Height_safeAreaInsetsBottom())
make.height.equalTo(48)
}
tableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
}
tableView.backgroundColor = .white
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.register(cellWithClass: YHAllowSettingTableViewCell.self)
return tableView
}()
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.top.equalTo(35 + k_Height_NavigationtBarAndStatuBar)
make.bottom.equalTo(-k_Height_safeAreaInsetsBottom() - 64)
make.left.right.equalTo(view)
}
if !stepFlag {
tableView.snp.remakeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.bottom.equalTo(-k_Height_safeAreaInsetsBottom() - 64)
make.left.right.equalTo(view)
}
nextButton.setTitle("保存", for: .normal)
}
}
@objc func nextStep() {
viewModel.requestAuthorizationSubmit {[weak self] success, error in
guard let self = self else { return }
if self.stepFlag {
self.navigationController?.popToRootViewController(animated: true)
let view = YHPeopleSuccessView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: KScreenHeight))
view.titleLabel.text = "Hi,\(self.name)\n您的人脉网络已激活"
let window = UIApplication.shared.yhKeyWindow()
window?.addSubview(view)
} else {
self.navigationController?.popViewController(animated: true)
}
}
}
}
extension YHInformationAuthorizationStepTwoViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withClass: YHAllowSettingTableViewCell.self)
cell.item = items[indexPath.row]
cell.block = { [weak self] model in
guard let self = self else { return }
self.viewModel.updateSetModel(model)
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 98.0
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 0.01))
return view
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0.01
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.01
}
}
......@@ -270,9 +270,9 @@ class YHSearchInfomationVC: YHBaseViewController {
emptyDataTipsView.isHidden = (items.count > 0)
searchHistoryView.isHidden = true
self.tableView.reloadData()
DispatchQueue.main.asyncAfter(deadline: .now()+0.5, execute: {
// DispatchQueue.main.asyncAfter(deadline: .now()+0.5, execute: {
self.tableView.es.stopPullToRefresh()
})
// })
// 只有一页的时候不展示没有更多数据了
if self.viewModel.totalCount < self.viewModel.searchPageSize { // 不足一页
tableView.footer?.isHidden = true
......
......@@ -16,7 +16,7 @@ class YHBannerModel: YHBaseModel {
var create_at: String = ""
var skip_type: Int = 0
var id: Int = 0
var img_url_compress: String = ""
//是否为本地
var isLocalItemFlag : Bool = false
......
......@@ -24,7 +24,7 @@ class YHHomeListModel: YHBaseModel {
var is_like : Bool = false
var media_url : String = ""
var like_count : Int = 0 //点赞梳理
var img_url_compress : String = ""
//网络返回的图片宽高
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment