forked from AcaMate/AcaMate_iOS
131 lines
5.1 KiB
Swift
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))
|
|
}
|
|
}
|
|
}
|