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

104 lines
3.4 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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)
}
}