104 lines
3.4 KiB
Swift
104 lines
3.4 KiB
Swift
//
|
||
// 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)
|
||
}
|
||
|
||
}
|
||
|