AcaMate_iOS/AcaMate/1. View/12. Main/121. Home/DriveBoxView.swift
2025-02-12 16:56:14 +09:00

131 lines
5.1 KiB
Swift

//
// DriveBoxView.swift
// AcaMate
//
// Created by TAnine on 2/12/25.
//
import SwiftUI
struct DriveBoxView: View {
@EnvironmentObject var appVM: AppViewModel
@State var summaryDriveList: [SummaryDrive]
var body: some View {
DashBoardView(image: Image(.Icon.drive), title: "배차 현황") {
if summaryDriveList.isEmpty {
EmptyBoxView(title: "등록된 차량이 없습니다.")
} else {
VStack(spacing: 12) {
ForEach(Array(summaryDriveList.enumerated()),id: \.offset) { index, drive in
DriveCellView(summaryDrive: $summaryDriveList[index])
}
}
}
} moreAction: {
appVM.menuName = .Management
}
}
}
struct DriveCellView: View {
@EnvironmentObject var appVM: AppViewModel
@StateObject var btnVM = ButtonViewModel()
@Binding var summaryDrive: SummaryDrive
@State var setNotiBtn = UUID()
var body: some View {
VStack(spacing:0) {
HStack(spacing: 0) {
Image(summaryDrive.isUsable ? .Icon.driveON : .Icon.driveOFF)
.resizable()
.frame(width: 24, height: 24, alignment: .center)
Spacer(minLength: 1)
HStack(alignment: .bottom, spacing: 4) {
Text("[\(summaryDrive.title)]")
.font(.nps(size: 14))
Text("\(summaryDrive.isIn ? "등원" : "하원")")
.font(.nps(font: .bold, size: 20))
Text("차량")
.font(.nps(size: 18))
}
.foregroundStyle(Color(.Text.detail))
Spacer(minLength: 1)
SimpleBtnView(vm: btnVM, id: setNotiBtn)
}
HStack(spacing: 0) {
Spacer(minLength: 1)
Text("\(summaryDrive.driver) 기사님")
.font(.nps(size: 12))
.foregroundStyle(Color(.Text.detail))
}
HStack(spacing: 0) {
Text("\(summaryDrive.isUsable ? (summaryDrive.isDrive ? "운행": "") : "정지" )")
.font(.nps(font: .bold, size: 20))
.foregroundStyle(summaryDrive.isUsable ? (summaryDrive.isDrive ? Color(.Other.red): Color(.Text.detail)) : Color(.Text.disabled))
Spacer(minLength: 1)
}
HStack(alignment: .bottom, spacing: 4) {
Text("출발")
.font(.nps(size: 16))
Text("\(summaryDrive.time)")
.font(.nps(font: .bold, size: 20))
Spacer(minLength: 1)
Text("\(summaryDrive.number)")
.font(.nps(font: .bold, size: 20))
Text("차량")
.font(.nps(size: 16))
}
.foregroundStyle(Color(.Text.detail))
}
.padding(12)
.background {
RoundedRectangle(cornerRadius: 4)
.stroke(summaryDrive.isUsable ? (summaryDrive.isDrive ? Color(.Other.red): Color(.Second.normal)) : Color(.Disable.dark),
lineWidth: 2)
.fill(summaryDrive.isUsable ? (summaryDrive.isDrive ? Color(.Danger.normal): Color(.Second.light)) : Color(.Disable.normal))
}
.onTapGesture {
// MARK: TO-DO
//
printLog(summaryDrive)
}
.onAppear {
btnVM.setImage(for: setNotiBtn, newImage: summaryDrive.isAlarm ? Image(.Icon.notificationON) : Image(.Icon.notificationOFF))
btnVM.setSize(for: setNotiBtn, newWidth: 24, newHeight: 24)
btnVM.setAction(for: setNotiBtn) {
if summaryDrive.isUsable {
if summaryDrive.isAlarm{
appVM.alertData = AlertData(body: "알람이 해제되었습니다.",
button: [
ButtonType(name: "확인", role: .cancel) { printLog("차량 알림 변경 알럿") }
])
} else {
appVM.alertData = AlertData(body: "알람이 설정되었습니다.",
button: [
ButtonType(name: "확인", role: .cancel) { printLog("차량 알림 변경 알럿") }
])
}
appVM.showAlert.toggle()
summaryDrive.isAlarm.toggle()
}
}
}
.onChange(of: summaryDrive.isAlarm) { _, _ in
btnVM.setImage(for: setNotiBtn, newImage: summaryDrive.isAlarm ? Image(.Icon.notificationON) : Image(.Icon.notificationOFF))
}
}
}