IOS_Boss/IOS_study/Job/PLJobView.swift
2025-07-27 12:33:06 +08:00

146 lines
5.8 KiB
Swift

//
// PLJobView.swift
// IOS_study
//
// Created by CC-star on 2025/6/13.
//
import SwiftUI
import Photos
struct PLJobView: View {
var canEdit = false
var showBoss = true
@Environment(HUD.self) var hud
@Environment(PLJobViewModel.self) var vm
@Environment(ProfileViewModel.self) var profileVM
@Environment(AuthViewModel.self) var authVM
@Environment(ReviewViewModel.self) var reviewVM
@Environment(\.displayScale) var displayScale//
@State var showActiveDialog = false///线
@State var showRemoveDialog = false//
@State var showRemoveAlert = false//
@State var saveImage: UIImage?
@State var openSetting = false
@State var viewDidLoad = false
@State var showReportDialog = false
@State var showPostReview = false
@Binding var naviPath : NavigationPath
var job: PLJob { vm.job }
var isActive:Bool{ vm.job.isActive }
var titleAD: String { isActive ? "" : "[已下线]" }
var isIng: Bool { vm.isRemoving || vm.isToggling }
var shareImage: Image? { if let saveImage { return Image(uiImage: saveImage) } else { return nil } }
var body: some View {
List {
tilteView//
if showBoss { companyView }//
detailView//
contactView//
goRevireBtn
listBottomEView()
}.listStyle().navigationTitle("长期兼职").navigationBarTitleDisplayMode(.inline).navigationBarBackButtonHidden()
//
.toolbar {
ToolbarItem(placement: .topBarLeading) {
Button {
if !naviPath.isEmpty {//
naviPath.removeLast()//
}
} label: {
Image(systemName: "chevron.left").secondary().padding(.horizontal,6)
}
}
ToolbarItem(placement: .topBarTrailing) {
HStack(spacing: 3) {
if !canEdit {
Button("举报") { showReportDialog = true }
.confirmationDialog("确定举报吗?", isPresented: $showReportDialog, titleVisibility: .visible) {
Button("确定") {
Task {
await report()
}
}
Button("取消", role: .cancel) { }
}
}
Button { Task { await saveImageToAlbum() } } label: { Text("保存") }
if let shareImage {
ShareLink(item: shareImage, preview: SharePreview("以长图形式分享", image: shareImage)) { Text("分享") }
}
}.tc2().size15()
}
}
.alert("请允许保存图片权限", isPresented: $openSetting) {
Button("再想想") { openSetting = false }
Button("去设置") {
if let url = URL(string: UIApplication.openSettingsURLString), UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) }
}
} message: { Text("请重新设置照片权限") }
.sheet(isPresented: $showPostReview, content: {
PostReviewView()
})
.onAppear {
if !viewDidLoad {
Task { generateSnapshot() }
viewDidLoad = true
}
}
}
var shareView: some View {
VStack(spacing: 0) {
Text("招兼职").size18b()
tilteView//
companyView //
detailView//
contactView//
listBottomEView()
Text("\(kAppName)App").accent().bold().padding()
}.padding(.top, 60).padding(.bottom, 30)
.frame(width: UIScreen.main.bounds.size.width)//
.bg2()
}
@MainActor func generateSnapshot() {
let renderer = ImageRenderer(content: shareView)
renderer.scale = displayScale
saveImage = renderer.uiImage
}
@MainActor func saveImageToAlbum() async {
if let saveImage {
let currenStatus = PHPhotoLibrary.authorizationStatus(for: .addOnly)
if currenStatus == .notDetermined {//
let status = await PHPhotoLibrary.requestAuthorization(for: .addOnly)//
if status == .authorized {//
writeToAlbum(saveImage)
} else if currenStatus == .authorized {//
writeToAlbum(saveImage)
} else { openSetting = true }
} else { hud.show("相片保存失败,请退出本页后重试") }
}
}
func writeToAlbum(_ saveImage: UIImage) { UIImageWriteToSavedPhotosAlbum(saveImage, nil, nil, nil); hud.show("相片保存成功,请返回相册查看") }
// MARK: -
func report() async {
var reports = (UserDefaults.standard.array(forKey: jobReportsKey) as? [String]) ?? []
if reports.contains(job.id) {
hud.show("已举报,会尽快处理")
} else {
let userID = AuthManager.shared.getUserID()
if !userID.isEmpty {
if reports.count > 50 { reports.removeAll() }
do {
try await JobReportManger.shared.save(report: JobReport(jobID: job.id, jobType: "兼职", jobTitle: job.title, bossID: job.userID, userID: userID))
reports.append(job.id)
UserDefaults.standard.set(reports, forKey: jobReportsKey)
hud.show("举报成功,请等候处理")
} catch {
print("举报失败:\(error)")
hud.show("举报失败,请检查网络")
}
} else { hud.show("请先登录") }
}
}
}