Add role-based order/deposit lists, AVFoundation QR scanning, verify dialogs, and ViewModel tests so photographers, scenic admins, and store admins match Android behavior. Co-authored-by: Cursor <cursoragent@cursor.com>
96 lines
4.0 KiB
Swift
96 lines
4.0 KiB
Swift
//
|
|
// OrderDialogControllers.swift
|
|
// suixinkan
|
|
//
|
|
|
|
import UIKit
|
|
|
|
enum OrderRefundAlertController {
|
|
static func present(
|
|
from presenter: UIViewController,
|
|
order: OrderEntity,
|
|
onConfirm: @escaping (OrderRefundRequest) -> Void
|
|
) {
|
|
let alert = UIAlertController(title: "订单退款", message: order.orderNumber, preferredStyle: .alert)
|
|
alert.addTextField { $0.placeholder = "退款金额"; $0.text = order.actualPayAmount }
|
|
alert.addTextField { $0.placeholder = "退款原因" }
|
|
alert.addAction(UIAlertAction(title: "取消", style: .cancel))
|
|
alert.addAction(UIAlertAction(title: "确认退款", style: .destructive) { _ in
|
|
let amount = alert.textFields?.first?.text ?? order.actualPayAmount
|
|
let reason = alert.textFields?.last?.text ?? ""
|
|
onConfirm(OrderRefundRequest(orderNumber: order.orderNumber, refundType: 1, refundAmount: amount, refundReason: reason))
|
|
})
|
|
presenter.present(alert, animated: true)
|
|
}
|
|
}
|
|
|
|
enum DepositOrderRefundAlertController {
|
|
static func present(
|
|
from presenter: UIViewController,
|
|
orderNumber: String,
|
|
amount: String,
|
|
refundType: Int,
|
|
onConfirm: @escaping (String, String) -> Void
|
|
) {
|
|
let title = refundType == 3 ? "部分退款" : "全额退款"
|
|
let alert = UIAlertController(title: title, message: orderNumber, preferredStyle: .alert)
|
|
alert.addTextField { $0.placeholder = "退款金额"; $0.text = amount }
|
|
alert.addTextField { $0.placeholder = "退款原因" }
|
|
alert.addAction(UIAlertAction(title: "取消", style: .cancel))
|
|
alert.addAction(UIAlertAction(title: "确认", style: .destructive) { _ in
|
|
let refundAmount = alert.textFields?.first?.text ?? amount
|
|
let reason = alert.textFields?.last?.text ?? ""
|
|
onConfirm(refundAmount, reason)
|
|
})
|
|
presenter.present(alert, animated: true)
|
|
}
|
|
}
|
|
|
|
enum OrderSignInAlertController {
|
|
static func present(from presenter: UIViewController, response: OrderSignInResponse) {
|
|
let message = """
|
|
项目:\(response.projectName)
|
|
景区:\(response.scenicName)
|
|
金额:¥\(response.orderAmount)
|
|
手机号:\(response.userPhone)
|
|
"""
|
|
let alert = UIAlertController(title: response.checkIn ? "签到成功" : "核销结果", message: message, preferredStyle: .alert)
|
|
alert.addAction(UIAlertAction(title: "确定", style: .default))
|
|
presenter.present(alert, animated: true)
|
|
}
|
|
}
|
|
|
|
enum WriteOffResultAlertController {
|
|
static func present(from presenter: UIViewController, response: WriteOffOrderResponse) {
|
|
let message = """
|
|
项目:\(response.projectName)
|
|
景区:\(response.scenicName)
|
|
金额:¥\(response.orderAmount)
|
|
手机号:\(response.userPhone)
|
|
"""
|
|
let alert = UIAlertController(title: response.orderVerify ? "核销成功" : "核销结果", message: message, preferredStyle: .alert)
|
|
alert.addAction(UIAlertAction(title: "确定", style: .default))
|
|
presenter.present(alert, animated: true)
|
|
}
|
|
}
|
|
|
|
enum SendGiftAlertController {
|
|
static func present(
|
|
from presenter: UIViewController,
|
|
photoNum: Int,
|
|
videoNum: Int,
|
|
onConfirm: @escaping (Int, Int) -> Void
|
|
) {
|
|
let alert = UIAlertController(title: "赠送修图", message: nil, preferredStyle: .alert)
|
|
alert.addTextField { $0.placeholder = "赠送照片数"; $0.keyboardType = .numberPad; $0.text = "\(photoNum)" }
|
|
alert.addTextField { $0.placeholder = "赠送视频数"; $0.keyboardType = .numberPad; $0.text = "\(videoNum)" }
|
|
alert.addAction(UIAlertAction(title: "取消", style: .cancel))
|
|
alert.addAction(UIAlertAction(title: "确认", style: .default) { _ in
|
|
let photo = Int(alert.textFields?.first?.text ?? "0") ?? 0
|
|
let video = Int(alert.textFields?.last?.text ?? "0") ?? 0
|
|
onConfirm(photo, video)
|
|
})
|
|
presenter.present(alert, animated: true)
|
|
}
|
|
}
|