146 lines
5.8 KiB
Swift
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("请先登录") }
|
|
}
|
|
}
|
|
}
|
|
|