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

159 lines
6.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.

//
// PLJobsView.swift
// IOS_study
//
// Created by CC-star on 2025/6/12.
//
import SwiftUI
import LeanCloud
struct PLJobsView: View {
@State var lastPLFilter = PLFilter()
@State var showFilterView = false
@State var showOrderView = false
@State var lastPLOrder: PLOrder = .updatedAt
@Environment(HUD.self) var hud
@Environment(PLJobViewModel.self) var vm
@Environment(TabBarViewModel.self) var TabBarVM
@Environment(NetworkMonitor.self) var nt
@State var naviPath = NavigationPath()
var body: some View {
NavigationStack(path: $naviPath) {
ZStack {
if !vm.jobs.isEmpty {
ScrollViewReader { scrollView in
List{
Color.clear.frame(height: 1).listRowStyle().id("top")//
ForEach(vm.jobs) {job in
Button {
vm.job = job
naviPath.append(Navi1.PLJobsToPLJob)
} label: {
PLJobCellView(job: job)
}.buttonStyle(.borderless)
}.listRowStyle()
// Button("", action: {
// loadMore()
// }).buttonStyle(.borderless)
Group {
if vm.fcJobsErrMsg.isEmpty {
if !vm.isFinshed {
if vm.isFcJobs { Text("正在加载中...") } else { Text("正在加载中...").onAppear { loadMore() } }
} else {
if nt.isConnected {
Text("已全部加载")
} else {
Text("当前无网络,无法加载更多数据,请联网后下拉刷新")
}
}
} else {
HStack {
Text("自动加载数据失败,请手动加载")
Button("点击加载", action: loadMore).buttonStyle(.borderless).accent()
}
}
}.listRowStyleLoading2()
}.listStyle().refreshable { await refreashable() }
.onChange(of: vm.isOF) {//
withAnimation { scrollView.scrollTo("top", anchor: .top) }
}
}
} else {
//,
if vm.fcJobsErrMsg.isEmpty {//
if !vm.isFcJobs {
if nt.isConnected && vm.filter.totalCount > 0 {
//todo
Text("没有找到符合筛选条件的在招职位,请更改筛选条件").explainStyle()
} else {//1. 2.
VStack(spacing: 9) {//SDK
Button {
refreash()
} label: {
Text("点击刷新").appleStyle()
}
Text("网络问题若刷新失败请重启App").explainStyle()
}
}
} else {
Color.bg2//
}
} else {//
VStack(alignment: .leading, spacing: 9) {
Button {
refreash()
} label: {
Text("点击刷新").appleStyle()
}
Text("加载数据失败,请点击刷新")
HStack {
Text("若刷新失败,请截图并联系客服微信:\(KdevContact)")
Button {
UIPasteboard.general.string = KdevContact
hud.show("复制成功")
} label: {
Text("复制").accent()
}
}
exDivider()
// HStack {
Text("错误信息").push(to: .center)
Text(vm.fcJobsErrMsg).red()
// }
}.explainStyle()
}
}
}.naviBarStyle()
.navigationDestination(for: Navi1.self) { navi in
switch navi {
case .PLJobsToPLJob : PLJobView(naviPath: $naviPath)
}
}
.toolbar {
ToolbarItem(placement: .topBarLeading) { orderBtn }
ToolbarItem(placement: .principal) { Text("好工作").tc().bold() }
ToolbarItem(placement: .topBarTrailing) { filterBtn }
}
.overlay {
if showFilterView || showOrderView {//\
Color.black.opacity(0.3)//
.onTapGesture {//
showFilterView = false
showOrderView = false
}
}
}
.overlay(alignment: .top) {
if showFilterView { plFilterView } else if showOrderView { plOrderView }
}
.overlay { if vm.isFcJobs { BprogressView() } }
}.animation(.default, value: showFilterView)//showFilterView使default
.onAppear {
getJobsOnce()
refreshIFNeed()
}
}
func getJobsOnce() {
if vm.isJobsLoaded { return }
Task { await vm.getJobs() }
}
func refreshIFNeed() {
if vm.isJobsLoaded && TabBarVM.refreshJobs && TabBarVM.jobType == "兼职" {
vm.filter = PLFilter()
vm.order = .updatedAt
refreash()
TabBarVM.refreshJobs = false
}
}
func refreashable() async { await vm.getJobs(isResFresh: true) }
func refreash() { Task { await refreashable() } }
func loadMore() { Task { await vm.getJobs() } }
}
#Preview {
PLJobsView()
}