完善景区排队设置页与全局按钮配置迁移。

重构排队设置与变更日志交互,补充 Overlay 与资源,并将多页面主操作按钮统一到 UIButton Configuration,同步更新相关单元测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-14 16:51:23 +08:00
parent 6336feff27
commit 5eef31b8da
17 changed files with 181 additions and 124 deletions

View File

@ -358,28 +358,27 @@ final class MaterialFormViewController: BaseViewController {
}
private func makeVideoItem(data: Data, fileName: String, sourceURL: URL) -> MaterialUploadedMediaItem {
let size = videoDisplaySize(url: sourceURL)
let preview = videoPreview(url: sourceURL)
return MaterialUploadedMediaItem(
data: data,
thumbnailData: videoThumbnailData(url: sourceURL),
thumbnailData: preview.thumbnailData,
fileName: fileName,
width: Int(size.width),
height: Int(size.height)
width: preview.width,
height: preview.height
)
}
private func videoDisplaySize(url: URL) -> CGSize {
let asset = AVAsset(url: url)
guard let track = asset.tracks(withMediaType: .video).first else { return .zero }
let transformed = track.naturalSize.applying(track.preferredTransform)
return CGSize(width: abs(transformed.width), height: abs(transformed.height))
}
private func videoThumbnailData(url: URL) -> Data? {
private func videoPreview(url: URL) -> (thumbnailData: Data?, width: Int, height: Int) {
let generator = AVAssetImageGenerator(asset: AVAsset(url: url))
generator.appliesPreferredTrackTransform = true
guard let imageRef = try? generator.copyCGImage(at: .zero, actualTime: nil) else { return nil }
return UIImage(cgImage: imageRef).jpegData(compressionQuality: 0.75)
guard let imageRef = try? generator.copyCGImage(at: .zero, actualTime: nil) else {
return (nil, 0, 0)
}
return (
UIImage(cgImage: imageRef).jpegData(compressionQuality: 0.75),
imageRef.width,
imageRef.height
)
}
}