feat: add AI retouch task center
This commit is contained in:
@@ -12,6 +12,7 @@ final class MessageDetailViewController: BaseViewController {
|
||||
|
||||
private let viewModel: MessageDetailViewModel
|
||||
private let api: any MessageCenterServing
|
||||
private let travelAlbumAPI: any TravelAlbumServing
|
||||
|
||||
private let scrollView = UIScrollView()
|
||||
private let contentView = UIView()
|
||||
@@ -20,13 +21,19 @@ final class MessageDetailViewController: BaseViewController {
|
||||
private let timeContainer = UIView()
|
||||
private let timeLabel = UILabel()
|
||||
private let bodyLabel = UILabel()
|
||||
private let taskDetailButton = UIButton(type: .system)
|
||||
private let bottomBar = UIView()
|
||||
private let deleteButton = UIButton(type: .system)
|
||||
|
||||
/// 初始化消息详情页。
|
||||
init(message: MessageItem, api: (any MessageCenterServing)? = nil) {
|
||||
init(
|
||||
message: MessageItem,
|
||||
api: (any MessageCenterServing)? = nil,
|
||||
travelAlbumAPI: (any TravelAlbumServing)? = nil
|
||||
) {
|
||||
viewModel = MessageDetailViewModel(message: message)
|
||||
self.api = api ?? NetworkServices.shared.messageCenterAPI
|
||||
self.travelAlbumAPI = travelAlbumAPI ?? NetworkServices.shared.travelAlbumAPI
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
@@ -67,6 +74,15 @@ final class MessageDetailViewController: BaseViewController {
|
||||
bodyLabel.numberOfLines = 0
|
||||
bodyLabel.textAlignment = .left
|
||||
|
||||
taskDetailButton.setTitle("查看任务详情", for: .normal)
|
||||
taskDetailButton.setTitleColor(.white, for: .normal)
|
||||
taskDetailButton.titleLabel?.font = .systemFont(ofSize: 16, weight: .semibold)
|
||||
taskDetailButton.backgroundColor = AppColor.primary
|
||||
taskDetailButton.layer.cornerRadius = 10
|
||||
taskDetailButton.clipsToBounds = true
|
||||
taskDetailButton.isHidden = !viewModel.showsAIRetouchTaskAction
|
||||
taskDetailButton.accessibilityLabel = "查看AI修图任务详情"
|
||||
|
||||
bottomBar.backgroundColor = .white
|
||||
deleteButton.setTitle("删除并返回", for: .normal)
|
||||
deleteButton.setTitleColor(.white, for: .normal)
|
||||
@@ -77,7 +93,7 @@ final class MessageDetailViewController: BaseViewController {
|
||||
|
||||
view.addSubview(scrollView)
|
||||
scrollView.addSubview(contentView)
|
||||
[typeImageView, titleLabel, timeContainer, bodyLabel].forEach(contentView.addSubview)
|
||||
[typeImageView, titleLabel, timeContainer, bodyLabel, taskDetailButton].forEach(contentView.addSubview)
|
||||
timeContainer.addSubview(timeLabel)
|
||||
view.addSubview(bottomBar)
|
||||
bottomBar.addSubview(deleteButton)
|
||||
@@ -121,12 +137,23 @@ final class MessageDetailViewController: BaseViewController {
|
||||
bodyLabel.snp.makeConstraints { make in
|
||||
make.top.equalTo(timeContainer.snp.bottom).offset(24)
|
||||
make.leading.trailing.equalToSuperview().inset(32)
|
||||
make.bottom.lessThanOrEqualToSuperview().inset(24)
|
||||
if !viewModel.showsAIRetouchTaskAction {
|
||||
make.bottom.lessThanOrEqualToSuperview().inset(24)
|
||||
}
|
||||
}
|
||||
if viewModel.showsAIRetouchTaskAction {
|
||||
taskDetailButton.snp.makeConstraints { make in
|
||||
make.top.equalTo(bodyLabel.snp.bottom).offset(24)
|
||||
make.leading.trailing.equalToSuperview().inset(32)
|
||||
make.height.equalTo(52)
|
||||
make.bottom.lessThanOrEqualToSuperview().inset(24)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override func bindActions() {
|
||||
deleteButton.addTarget(self, action: #selector(deleteTapped), for: .touchUpInside)
|
||||
taskDetailButton.addTarget(self, action: #selector(taskDetailTapped), for: .touchUpInside)
|
||||
viewModel.onStateChange = { [weak self] in
|
||||
Task { @MainActor in
|
||||
self?.applyState()
|
||||
@@ -145,6 +172,16 @@ final class MessageDetailViewController: BaseViewController {
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func taskDetailTapped() {
|
||||
let target: UIViewController
|
||||
if let batchId = viewModel.aiRetouchBatchId {
|
||||
target = TravelAlbumAIJobDetailViewController(batchId: batchId, api: travelAlbumAPI)
|
||||
} else {
|
||||
target = TravelAlbumAIJobListViewController(api: travelAlbumAPI)
|
||||
}
|
||||
navigationController?.pushViewController(target, animated: true)
|
||||
}
|
||||
|
||||
@objc private func deleteTapped() {
|
||||
let alert = UIAlertController(title: "删除消息", message: "确定要删除这条消息吗?", preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: "取消", style: .cancel))
|
||||
|
||||
Reference in New Issue
Block a user