Commit 50404ff8 authored by Steven杜宇's avatar Steven杜宇

// 活动

parent ede3b0aa
......@@ -10,10 +10,12 @@ import UIKit
class YHActivitySignSuccessViewController: YHBaseViewController {
var activityId: String = "75"
let viewModel: YHActivityViewModel = YHActivityViewModel()
private let tableView = UITableView(frame: .zero, style: .grouped)
private var hasPrize: Bool = false
private var prize: Prize?
private var event: CheckInEvent?
private var result: YHSignSuccessActivity?
lazy var backImgV: UIImageView = {
let v = UIImageView()
......@@ -74,7 +76,7 @@ class YHActivitySignSuccessViewController: YHBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
setupWithPrize() // 切换到 setupWithoutPrize() 查看无奖品情况
requestData()
}
private func setupUI() {
......@@ -111,38 +113,20 @@ class YHActivitySignSuccessViewController: YHBaseViewController {
}
}
// 有奖品的情况
private func setupWithPrize() {
hasPrize = true
prize = Prize(
greeting: "你好,侯林先生",
instruction: "请联系现场工作人员领取您的奖品",
image: "prize_sofa"
)
event = CheckInEvent(
title: "翱翔云端·探索无限2025无人机创新科技沙龙2025无人机创新科技沙龙2025无人机创新科技沙龙2025无人机创新科技沙龙2025无人机创新科技沙龙2025无人机创新科技沙龙2025无人机创新科技沙龙2025无人机创新科技沙龙2025无人机创新科技沙龙",
subtitle: "2025无人机创新科技沙龙",
date: "2025-09-13 周六 09:30",
location: "银河集团香港体验中心(香港湾仔港湾道26号华润大厦27楼2705室)",
subLocation: "请于机导航至银河集团香港体验中心",
thumbnailImage: "event_thumb"
)
tableView.reloadData()
}
// 无奖品的情况
private func setupWithoutPrize() {
hasPrize = false
prize = nil
event = CheckInEvent(
title: "翱翔云端·探索无限",
subtitle: "2025无人机创新科技沙龙",
date: "2024-08-06 周日 09:30",
location: "本元大厦26A银河集团体验中心",
subLocation: "距地铁10号线亮马站D口步行62",
thumbnailImage: "event_thumb"
)
tableView.reloadData()
func requestData() {
self.viewModel.getActivitySign(id: self.activityId) { [weak self] success in
guard let self = self else {
return
}
self.tableView.isHidden = !success
self.signFailBgView.isHidden = success
self.result = self.viewModel.signActivityModel
self.hasPrize = false
if let gift = self.viewModel.signActivityModel?.gift {
self.hasPrize = true
}
self.tableView.reloadData()
}
}
}
......@@ -168,17 +152,24 @@ extension YHActivitySignSuccessViewController: UITableViewDelegate, UITableViewD
guard let cell = tableView.dequeueReusableCell(withIdentifier: YHSignPrizeCell.cellReuseIdentifier, for: indexPath) as? YHSignPrizeCell else {
return UITableViewCell()
}
if let prize = prize {
cell.configure(with: prize)
if let result = self.result {
cell.configure(with: result)
cell.onImageHeightChanged = { [weak self] in
guard let self = self else { return }
UIView.performWithoutAnimation {
self.tableView.reloadRows(at: [indexPath], with: .none)
}
}
}
return cell
} else {
// 活动信息 Cell
guard let cell = tableView.dequeueReusableCell(withIdentifier: YHSignActivityInfoCell.cellReuseIdentifier, for: indexPath) as? YHSignActivityInfoCell else {
return UITableViewCell()
}
if let event = event {
cell.configure(with: event)
if let result = self.result {
cell.configure(with: result)
}
return cell
}
......@@ -187,8 +178,8 @@ extension YHActivitySignSuccessViewController: UITableViewDelegate, UITableViewD
guard let cell = tableView.dequeueReusableCell(withIdentifier: YHSignActivityInfoCell.cellReuseIdentifier, for: indexPath) as? YHSignActivityInfoCell else {
return UITableViewCell()
}
if let event = event {
cell.configure(with: event)
if let result = self.result {
cell.configure(with: result)
}
return cell
}
......
......@@ -74,19 +74,3 @@ class YHActivityModel: SmartCodable {
}
}
// MARK: - 数据模型
struct CheckInEvent {
let title: String
let subtitle: String
let date: String
let location: String
let subLocation: String
let thumbnailImage: String?
}
struct Prize {
let greeting: String
let instruction: String
let image: String
}
......@@ -37,10 +37,59 @@ class YHSignSuccessActivity: SmartCodable {
var cover: String = ""
var beginTime: String = ""
var endTime: String = ""
var gift: YHSignGift = YHSignGift()
var user: YHSignUser = YHSignUser()
var gift: YHSignGift?
var user: YHSignUser?
var formatTime: String = ""
required init() {
}
func getDateString(format: String = "MM/dd") -> String {
if formatTime.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)
if titmeString.contains(titmeString2) {
formatTime = dateString + " " + weekdayName + " " + titmeString
} else {
formatTime = dateString + " " + weekdayName + " " + titmeString + "-" + titmeString2
}
}
}
}
}
return formatTime
}
}
......@@ -46,7 +46,6 @@ class YHSignActivityInfoCell: UITableViewCell {
thumbnailImageView.contentMode = .scaleAspectFit
thumbnailImageView.layer.cornerRadius = 4
thumbnailImageView.clipsToBounds = true
thumbnailImageView.backgroundColor = .red
containerView.addSubview(thumbnailImageView)
timeLabel.text = "时间"
......@@ -127,14 +126,12 @@ class YHSignActivityInfoCell: UITableViewCell {
}
}
func configure(with event: CheckInEvent) {
titleLabel.text = event.title
timeValueLabel.text = event.date
locationValueLabel.text = event.location
subLocationLabel.text = event.subLocation
func configure(with model: YHSignSuccessActivity) {
titleLabel.text = model.name
timeValueLabel.text = model.getDateString(format: "yyyy-MM-dd")
locationValueLabel.text = model.place
subLocationLabel.text = model.guidance
thumbnailImageView.sd_setImage(with: URL(string: model.cover), placeholderImage: UIImage(named: "global_default_image"), context: nil)
if let imageName = event.thumbnailImage, let image = UIImage(named: imageName) {
thumbnailImageView.image = image
}
}
}
......@@ -9,7 +9,11 @@
import UIKit
class YHSignPrizeCell: UITableViewCell {
static let cellReuseIdentifier = "YHSignPrizeCell"
static let img_ratio = 1.0
var onImageHeightChanged: (() -> Void)?
private let containerView = UIView()
private let greetingLabel = UILabel()
......@@ -40,12 +44,12 @@ class YHSignPrizeCell: UITableViewCell {
instructionLabel.font = .PFSC_R(ofSize: 14)
instructionLabel.textColor = .brandGrayColor7
instructionLabel.text = "请联系现场工作人员领取您的奖品"
containerView.addSubview(instructionLabel)
prizeImageView.contentMode = .scaleAspectFill
prizeImageView.clipsToBounds = true
prizeImageView.layer.cornerRadius = 6
prizeImageView.backgroundColor = .red
containerView.addSubview(prizeImageView)
containerView.snp.makeConstraints { make in
......@@ -76,11 +80,29 @@ class YHSignPrizeCell: UITableViewCell {
}
}
func configure(with prize: Prize) {
greetingLabel.text = prize.greeting
instructionLabel.text = prize.instruction
if let image = UIImage(named: prize.image) {
prizeImageView.image = image
func configure(with model: YHSignSuccessActivity) {
greetingLabel.text = "你好," + (model.user?.name ?? "")
if let gift = model.gift {
if let url = URL(string: gift.url) {
prizeImageView.sd_setImage(with: url, placeholderImage: UIImage(named: "global_default_image")) { [weak self] image, _, _, _ in
guard let self = self else {
return
}
guard let image = image, image.size.width > 0, image.size.height > 0 else {
return
}
let ratio = image.size.height / image.size.width
self.prizeImageView.snp.updateConstraints { make in
make.height.equalTo(ratio * (KScreenWidth-40.0*2))
}
self.onImageHeightChanged?()
}
} else {
self.prizeImageView.snp.updateConstraints { make in
make.height.equalTo(YHSignPrizeCell.img_ratio * (KScreenWidth-40.0*2))
}
}
}
}
}
......@@ -45,6 +45,9 @@ class YHActivityViewModel: YHBaseViewModel {
// 4.活动行程单
var activityTravelModel: YHActivityTravelModel?
// 签到活动
var signActivityModel: YHSignSuccessActivity?
}
extension YHActivityViewModel {
......@@ -283,4 +286,36 @@ extension YHActivityViewModel {
}
}
func getActivitySign(id: String, callback: @escaping (Bool) -> Void) {
let params: [String: Any] = [
"activityId": id,
"appId": 1
]
var strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Activity.sign
_ = YHNetRequest.postRequest(url: strUrl, params: params) { [weak self] json, _ in
guard let self = self else { return }
// 1. json字符串 转 对象
if json.code == 200 {
guard let dic = json.data?.peel as? [String: Any], let result = YHSignSuccessActivity.deserialize(from: dic) else {
self.signActivityModel = nil
callback(false)
return
}
self.signActivityModel = result
callback(true)
} else {
self.signActivityModel = nil
let error: YHErrorModel = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg)
callback(false)
}
} failBlock: { _ in
self.signActivityModel = nil
callback(false)
}
}
}
......@@ -71,6 +71,9 @@ class YHAllApiName {
// 取消活动报名
static let cancelApi = "super-app/activity/cancel"
// 活动签到
static let sign = "super-app/activity/sign-in"
}
// 首页界面相关接口
......
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