// // RoomUIView.swift // fiveConstant // // Created by 李建 on 2023/1/29. // import SwiftUI struct RoomUIView: View { @State var showMenu: Bool = false @EnvironmentObject var progressState: ProgressState @StateObject var roomVm: MyRoomVM = MyRoomVM() var body: some View { ZStack { VStack { HStack { Spacer() Text("我的房间") .font(.title2).bold() Spacer() Image(systemName: "ellipsis") .font(.title2.bold()) .onTapGesture { withAnimation { showMenu.toggle() } } }.padding(.bottom, 20) if !roomVm.showEmpety { RefreshableScrollView(refreshing:$roomVm.loading) { LazyVGrid(columns: Array(repeating: GridItem(.fixed(170)), count: 2), spacing: 20) { ForEach(roomVm.roomData, id: \.record_id) { list in NavigationLink(destination: { RoomControlView(roomInfo: list, controller: RoomController(roomId: list.record_id!, gatewayId: "YX20230203", controlNumber: list.control_number!)) }, label: { RoomCard(roomData: list) }) } } } } else { // 没有房间 ZStack { Image("img_no_room") .resizable() .frame(width: 274, height: 280) Text("你还没有添加房间") .foregroundColor(.gray) .font(.subheadline) .offset(x:0, y:50) }.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity) } } if showMenu { DotMenuView(show: $showMenu).zIndex(99) } }.padding() .onTapGesture { withAnimation { showMenu = false } } } } struct DotMenuView: View { @Binding var show: Bool var body: some View { ZStack { RoundedRectangle(cornerRadius: 20) .fill(.white) VStack { NavigationLink(destination: { AddRoomUIView() }) { Label("添加房间", systemImage: "plus.app") } Divider().padding(.horizontal, 20) Button { } label: { Label("编辑房间", systemImage: "square.and.pencil") } } .foregroundColor(Color("SecondColor")) .padding() } .frame(width: 150, height: 100) .scaleEffect( show ? 1 : 0) .shadow(radius: 10) .offset(x: UIScreen.main.bounds.width / 2 - 80, y: -UIScreen.main.bounds.height / 3 + 40) } } class MyRoomVM: ObservableObject { init() { self.loadRoomData() } @Published var loading: Bool = false { didSet { if oldValue == false && loading { self.loadRoomData() } } } @Published var showEmpety: Bool = false @Published var roomData: [RoomInfo] = [] func loadRoomData() { HttpRequest<[RoomInfo]>.loadData(target: UserApi.myRooms) { returnData in self.roomData = returnData self.loading = false if returnData.count == 0 { self.showEmpety = true } } } } struct RoomUIView_Previews: PreviewProvider { static var previews: some View { RoomUIView() } }