Initial commit: suixinkan_ios UIKit rewrite project.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -0,0 +1,87 @@
|
||||
//
|
||||
// QueueManagementViewControllers.swift
|
||||
// suixinkan
|
||||
//
|
||||
// Created by Codex on 2026/6/26.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
/// 排队管理页。
|
||||
final class QueueManagementViewController: ModuleTableViewController {
|
||||
private let viewModel = QueueManagementViewModel()
|
||||
|
||||
override func viewDidLoad() {
|
||||
title = "排队管理"
|
||||
navigationItem.rightBarButtonItem = UIBarButtonItem(
|
||||
title: "设置",
|
||||
style: .plain,
|
||||
target: self,
|
||||
action: #selector(openSettings)
|
||||
)
|
||||
super.viewDidLoad()
|
||||
wireViewModel(viewModel) { [weak self] in self?.updateTitle() }
|
||||
}
|
||||
|
||||
override func tableRowCount() -> Int { viewModel.items.count }
|
||||
|
||||
override func configureCell(_ cell: TitleSubtitleTableViewCell, at indexPath: IndexPath) {
|
||||
let item = viewModel.items[indexPath.row]
|
||||
cell.configure(title: item.phoneMasked, subtitle: item.statusText, detail: item.queueCode)
|
||||
}
|
||||
|
||||
override func reloadContent() async {
|
||||
await viewModel.reload(
|
||||
api: services.scenicQueueAPI,
|
||||
scenicId: services.currentScenicId,
|
||||
userId: services.userId,
|
||||
spots: services.scenicSpotContext.spots
|
||||
)
|
||||
updateTitle()
|
||||
}
|
||||
|
||||
private func updateTitle() {
|
||||
title = "排队 \(viewModel.queueCount)"
|
||||
}
|
||||
|
||||
@objc private func openSettings() {
|
||||
navigationController?.pushViewController(ScenicQueueSettingsViewController(), animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
extension QueueManagementViewModel: ViewModelBindable {}
|
||||
|
||||
/// 排队设置页。
|
||||
final class ScenicQueueSettingsViewController: ModuleTableViewController {
|
||||
private let viewModel = ScenicQueueSettingsViewModel()
|
||||
|
||||
override func viewDidLoad() {
|
||||
title = "排队设置"
|
||||
super.viewDidLoad()
|
||||
wireViewModel(viewModel) { }
|
||||
}
|
||||
|
||||
override func tableRowCount() -> Int { viewModel.scenicSpots.count }
|
||||
|
||||
override func configureCell(_ cell: TitleSubtitleTableViewCell, at indexPath: IndexPath) {
|
||||
let spot = viewModel.scenicSpots[indexPath.row]
|
||||
let selected = viewModel.selectedSpotId == spot.id
|
||||
cell.configure(title: spot.name, subtitle: selected ? "当前打卡点" : nil)
|
||||
cell.accessoryType = selected ? .checkmark : .none
|
||||
}
|
||||
|
||||
override func didSelectTableRow(at indexPath: IndexPath) {
|
||||
viewModel.selectedSpotId = viewModel.scenicSpots[indexPath.row].id
|
||||
}
|
||||
|
||||
override func reloadContent() async {
|
||||
await viewModel.load(
|
||||
api: services.scenicQueueAPI,
|
||||
scenicId: services.currentScenicId,
|
||||
userId: services.userId,
|
||||
spots: services.scenicSpotContext.spots
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension ScenicQueueSettingsViewModel: ViewModelBindable {}
|
||||
Reference in New Issue
Block a user