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:
2026-06-26 15:16:12 +08:00
parent 9edf993432
commit d99a5b1bf8
124 changed files with 5195 additions and 1536 deletions

View File

@ -25,6 +25,7 @@ final class RealNameAuthViewController: UIViewController {
private let startDatePicker = UIDatePicker()
private let endDatePicker = UIDatePicker()
/// UI
override func viewDidLoad() {
super.viewDidLoad()
title = "实名认证"
@ -34,6 +35,7 @@ final class RealNameAuthViewController: UIViewController {
Task { await loadInfo() }
}
/// Form UI
private func setupForm() {
contentStack.axis = .vertical
contentStack.spacing = 16
@ -107,6 +109,7 @@ final class RealNameAuthViewController: UIViewController {
contentStack.addArrangedSubview(submitButton)
}
/// SectionTitle
private func makeSectionTitle(_ text: String) -> UILabel {
let label = UILabel()
label.text = text
@ -114,6 +117,7 @@ final class RealNameAuthViewController: UIViewController {
return label
}
/// labeled
private func labeledField(_ title: String, _ field: UITextField) -> UIStackView {
let label = UILabel()
label.text = title
@ -125,6 +129,7 @@ final class RealNameAuthViewController: UIViewController {
return stack
}
/// apply
private func applyViewModel() {
realNameField.text = viewModel.realName
idCardField.text = viewModel.idCardNo
@ -163,6 +168,7 @@ final class RealNameAuthViewController: UIViewController {
}
}
/// Info
private func loadInfo() async {
do {
try await appServices.globalLoading.withLoading(message: "加载中...") {
@ -173,10 +179,12 @@ final class RealNameAuthViewController: UIViewController {
}
}
/// longValid
@objc private func longValidChanged() {
viewModel.isLongValid = longValidSwitch.isOn
}
/// send
@objc private func sendCodeTapped() {
Task {
do {
@ -187,6 +195,7 @@ final class RealNameAuthViewController: UIViewController {
}
}
/// Tapped
@objc private func submitTapped() {
viewModel.realName = realNameField.text ?? ""
viewModel.idCardNo = idCardField.text ?? ""
@ -215,16 +224,19 @@ final class RealNameAuthViewController: UIViewController {
private var pendingSide: RealNameImageSide = .front
/// pickFront
@objc private func pickFront() {
pendingSide = .front
presentImagePicker()
}
/// pickBack
@objc private func pickBack() {
pendingSide = .back
presentImagePicker()
}
/// ImagePicker
private func presentImagePicker() {
var config = PHPickerConfiguration()
config.filter = .images
@ -236,6 +248,7 @@ final class RealNameAuthViewController: UIViewController {
}
extension RealNameAuthViewController: PHPickerViewControllerDelegate {
/// picker
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true)
guard let provider = results.first?.itemProvider, provider.canLoadObject(ofClass: UIImage.self) else { return }
@ -253,6 +266,7 @@ extension RealNameAuthViewController: PHPickerViewControllerDelegate {
}
private extension UILabel {
///
convenience init(text: String) {
self.init()
self.text = text