Files
suixinkan_ios_uikit/suixinkan_ios/Features/MessageCenter/ViewControllers/MessageCenterViewController.swift
2026-06-26 14:33:31 +08:00

70 lines
2.2 KiB
Swift

//
// MessageCenterViewController.swift
// suixinkan
//
// Created by Codex on 2026/6/26.
//
import UIKit
///
final class MessageCenterViewController: ModuleTableViewController {
private let viewModel = MessageCenterViewModel()
override func viewDidLoad() {
title = "消息中心"
navigationItem.rightBarButtonItem = UIBarButtonItem(
title: "全部已读",
style: .plain,
target: self,
action: #selector(markAllRead)
)
super.viewDidLoad()
wireViewModel(viewModel) { [weak self] in self?.updateBarButtons() }
}
override func tableRowCount() -> Int {
viewModel.messages.count
}
override func configureCell(_ cell: TitleSubtitleTableViewCell, at indexPath: IndexPath) {
let item = viewModel.messages[indexPath.row]
cell.configure(
title: item.title,
subtitle: item.detail,
detail: item.isRead ? item.time : "未读 · \(item.time)"
)
cell.accessoryType = item.isRead ? .none : .disclosureIndicator
}
override func didSelectTableRow(at indexPath: IndexPath) {
let item = viewModel.messages[indexPath.row]
Task {
try? await viewModel.markAsRead(api: services.messageCenterAPI, item: item)
showAlert(title: item.title, message: item.detail)
}
}
override func reloadContent() async {
isLoading = viewModel.messages.isEmpty
await viewModel.reloadFirstPage(api: services.messageCenterAPI)
isLoading = false
}
@objc private func markAllRead() {
Task { try? await viewModel.markAllAsRead(api: services.messageCenterAPI) }
}
private func updateBarButtons() {
navigationItem.rightBarButtonItem?.isEnabled = viewModel.unreadCount > 0 && !viewModel.messages.isEmpty
}
private func showAlert(title: String, message: String) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "知道了", style: .default))
present(alert, animated: true)
}
}
extension MessageCenterViewModel: ViewModelBindable {}