Advance UIKit rewrite with AMap integration and core UI modules.
Integrate高德 SDK with simulator-safe build flags, add map views for operating area and punch points, refactor main tabs and key feature screens to UIKit with Diffable lists, and document Swift concurrency defaults in AGENTS.md. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -20,6 +20,7 @@ struct ScenicSettlementSubmitRequest: Encodable, Equatable {
|
||||
let applyAmount: String
|
||||
let applyRemark: String
|
||||
|
||||
/// 枚举,定义相关常量或状态。
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case scenicId = "scenic_id"
|
||||
case applyAmount = "apply_amount"
|
||||
|
||||
@ -13,6 +13,7 @@ final class ScenicSettlementViewController: ModuleTableViewController {
|
||||
private let amountField = UITextField()
|
||||
private let remarkField = UITextField()
|
||||
|
||||
/// 视图加载完成后的 UI 初始化与数据绑定。
|
||||
override func viewDidLoad() {
|
||||
title = "景区结算"
|
||||
navigationItem.rightBarButtonItem = UIBarButtonItem(
|
||||
@ -26,6 +27,7 @@ final class ScenicSettlementViewController: ModuleTableViewController {
|
||||
wireViewModel(viewModel) { }
|
||||
}
|
||||
|
||||
/// 初始化Header相关 UI 或状态。
|
||||
private func setupHeader() {
|
||||
amountField.placeholder = "结算金额"
|
||||
amountField.borderStyle = .roundedRect
|
||||
@ -41,20 +43,24 @@ final class ScenicSettlementViewController: ModuleTableViewController {
|
||||
tableView.tableHeaderView = stack
|
||||
}
|
||||
|
||||
/// table行Count相关逻辑。
|
||||
override func tableRowCount() -> Int {
|
||||
viewModel.options.count
|
||||
}
|
||||
|
||||
/// 配置Cell展示内容。
|
||||
override func configureCell(_ cell: TitleSubtitleTableViewCell, at indexPath: IndexPath) {
|
||||
let option = viewModel.options[indexPath.row]
|
||||
cell.configure(title: option.name, subtitle: option.selected ? "已选择" : nil)
|
||||
cell.accessoryType = option.selected ? .checkmark : .none
|
||||
}
|
||||
|
||||
/// didSelectTableRow 回调处理。
|
||||
override func didSelectTableRow(at indexPath: IndexPath) {
|
||||
viewModel.toggleScenic(id: viewModel.options[indexPath.row].id)
|
||||
}
|
||||
|
||||
/// 刷新Content。
|
||||
override func reloadContent() async {
|
||||
await viewModel.load(
|
||||
api: services.scenicPermissionAPI,
|
||||
@ -62,6 +68,7 @@ final class ScenicSettlementViewController: ModuleTableViewController {
|
||||
)
|
||||
}
|
||||
|
||||
/// 提交。
|
||||
@objc private func submit() {
|
||||
viewModel.amountText = amountField.text ?? ""
|
||||
viewModel.remarkText = remarkField.text ?? ""
|
||||
@ -83,23 +90,28 @@ extension ScenicSettlementViewModel: ViewModelBindable {}
|
||||
final class ScenicSettlementReviewViewController: ModuleTableViewController {
|
||||
private let viewModel = ScenicSettlementReviewViewModel()
|
||||
|
||||
/// 视图加载完成后的 UI 初始化与数据绑定。
|
||||
override func viewDidLoad() {
|
||||
title = "结算审核"
|
||||
super.viewDidLoad()
|
||||
wireViewModel(viewModel) { }
|
||||
}
|
||||
|
||||
override func numberOfSections(in tableView: UITableView) -> Int { 2 }
|
||||
/// 返回列表 section 数量。
|
||||
override func numberOfTableSections() -> Int { 2 }
|
||||
|
||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
/// 返回指定 section 行数。
|
||||
override func tableRowCount(in section: Int) -> Int {
|
||||
section == 0 ? viewModel.scenicApplications.count : viewModel.roleApplications.count
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
|
||||
/// section 标题。
|
||||
override func tableSectionTitle(for section: Int) -> String? {
|
||||
section == 0 ? "景区申请" : "权限申请"
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
/// 提供自定义 Cell。
|
||||
override func tableCell(for indexPath: IndexPath, row: ModuleTableRow, in tableView: UITableView) -> UITableViewCell {
|
||||
let cell = tableView.dequeueReusableCell(
|
||||
withIdentifier: TitleSubtitleTableViewCell.reuseIdentifier,
|
||||
for: indexPath
|
||||
@ -122,6 +134,7 @@ final class ScenicSettlementReviewViewController: ModuleTableViewController {
|
||||
return cell
|
||||
}
|
||||
|
||||
/// 刷新Content。
|
||||
override func reloadContent() async {
|
||||
await viewModel.load(api: services.scenicPermissionAPI)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user