// // PLJobViewModel.swift // IOS_study // // Created by CC-star on 2025/6/29. // import Foundation @Observable final class PLJobViewModel { var jobs: [PLJob] = [] var currentPage = 0 var isFcJobs = false var isJobsLoaded = false //分页用 var fcJobsErrMsg = "" var isFinshed = false var filter = PLFilter()//筛选用,实例化PLFilter var order = PLOrder.updatedAt//排序用 var isOF = false //排序筛选完成后滑动到顶部 var job = PLJob() var draftJob = PLJob()//草稿 var isPosting = false//是否在提交 var isRemoving = false var isToggling = false//上/下线 @MainActor func getJobs(isResFresh: Bool = false) async { if isFcJobs { return }//保证当前没有在获取数据状态,防止用户在请求数据时,再次请求数据 isFcJobs = true//开始获取数据状态 defer{ isFcJobs = false }//最后关闭获取数据状态 isJobsLoaded = false fcJobsErrMsg = "" if isResFresh { currentPage = 0 isFinshed = false } do { let skip = kJobLimit * currentPage let newJobs = try await PLJobManager.shared.findJobsByREST(limit: kJobLimit, skip: skip, filter: filter, order: order) if isResFresh { jobs = newJobs } else { jobs.append(contentsOf: newJobs)//讲一个数组添加到另外一个数组 } currentPage += 1//分页 isJobsLoaded = true//防止onappear多次加载 if newJobs.count < kJobLimit || newJobs.isEmpty { isFinshed = true } } catch { if isResFresh { jobs.removeAll()//置空 } fcJobsErrMsg = "\(error)" print("获取plJobs失败:\(error)") } } @MainActor func postJob(isEditing: Bool = false) async throws { job = draftJob // job.updatedAT = Date() //处理空格(必填部分) job.title = job.title.trimmed job.placeName = job.placeName.trimmed job.province = job.province.trimmed job.city = job.city.trimmed //处理空格(选填部分) if job.otherTime.isBlank { job.otherTime = "" } else { job.otherTime = job.otherTime.trimmed } if job.otherNeed.isBlank { job.otherNeed = "" } else { job.otherNeed = job.otherNeed.trimmed } if job.workContent.isBlank { job.workContent = "" } else { job.workContent = job.workContent.trimmed } if job.otherBenefit.isBlank { job.otherBenefit = "" } else { job.otherBenefit = job.otherBenefit.trimmed } job.userID = AuthManager.shared.getUserID() //存到数据库 try await PLJobManager.shared.save(job: job, isEditing: isEditing) // do { // try await PLJobManager.shared.saveByREST(job: job)//使用链接进行存储 // } catch { // print(error.localizedDescription)//返回中文的报错 // } } @MainActor func toggleJobStatus(id: String) async throws { isToggling = true defer { isToggling = false } job.isActive.toggle() try await PLJobManager.shared.toggleJobStatus(id: id, isAictive: job.isActive) } @MainActor func removeJob(id: String) async throws { isRemoving = true defer { isRemoving = false } try await PLJobManager.shared.removeJob(id: id) } }