// // 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 {}