RoomUIView.swift 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. //
  2. // RoomUIView.swift
  3. // fiveConstant
  4. //
  5. // Created by 李建 on 2023/1/29.
  6. //
  7. import SwiftUI
  8. struct RoomUIView: View {
  9. @State var showMenu: Bool = false
  10. @EnvironmentObject var progressState: ProgressState
  11. @StateObject var roomVm: MyRoomVM = MyRoomVM()
  12. var body: some View {
  13. ZStack {
  14. VStack {
  15. HStack {
  16. Spacer()
  17. Text("我的房间")
  18. .font(.title2).bold()
  19. Spacer()
  20. Image(systemName: "ellipsis")
  21. .font(.title2.bold())
  22. .onTapGesture {
  23. withAnimation {
  24. showMenu.toggle()
  25. }
  26. }
  27. }.padding(.bottom, 20)
  28. if !roomVm.showEmpety {
  29. RefreshableScrollView(refreshing:$roomVm.loading) {
  30. LazyVGrid(columns: Array(repeating: GridItem(.fixed(170)), count: 2), spacing: 20) {
  31. ForEach(roomVm.roomData, id: \.record_id) { list in
  32. NavigationLink(destination: {
  33. RoomControlView(roomInfo: list, controller: RoomController(roomId: list.record_id!, gatewayId: "YX20230203", controlNumber: list.control_number!))
  34. }, label: {
  35. RoomCard(roomData: list)
  36. })
  37. }
  38. }
  39. }
  40. } else {
  41. // 没有房间
  42. ZStack {
  43. Image("img_no_room")
  44. .resizable()
  45. .frame(width: 274, height: 280)
  46. Text("你还没有添加房间")
  47. .foregroundColor(.gray)
  48. .font(.subheadline)
  49. .offset(x:0, y:50)
  50. }.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
  51. }
  52. }
  53. if showMenu {
  54. DotMenuView(show: $showMenu).zIndex(99)
  55. }
  56. }.padding()
  57. .onTapGesture {
  58. withAnimation {
  59. showMenu = false
  60. }
  61. }
  62. }
  63. }
  64. struct DotMenuView: View {
  65. @Binding var show: Bool
  66. var body: some View {
  67. ZStack {
  68. RoundedRectangle(cornerRadius: 20)
  69. .fill(.white)
  70. VStack {
  71. NavigationLink(destination: {
  72. AddRoomUIView()
  73. }) {
  74. Label("添加房间", systemImage: "plus.app")
  75. }
  76. Divider().padding(.horizontal, 20)
  77. Button {
  78. } label: {
  79. Label("编辑房间", systemImage: "square.and.pencil")
  80. }
  81. }
  82. .foregroundColor(Color("SecondColor"))
  83. .padding()
  84. }
  85. .frame(width: 150, height: 100)
  86. .scaleEffect( show ? 1 : 0)
  87. .shadow(radius: 10)
  88. .offset(x: UIScreen.main.bounds.width / 2 - 80, y: -UIScreen.main.bounds.height / 3 + 40)
  89. }
  90. }
  91. class MyRoomVM: ObservableObject {
  92. init() {
  93. self.loadRoomData()
  94. }
  95. @Published var loading: Bool = false {
  96. didSet {
  97. if oldValue == false && loading {
  98. self.loadRoomData()
  99. }
  100. }
  101. }
  102. @Published var showEmpety: Bool = false
  103. @Published var roomData: [RoomInfo] = []
  104. func loadRoomData() {
  105. HttpRequest<[RoomInfo]>.loadData(target: UserApi.myRooms) { returnData in
  106. self.roomData = returnData
  107. self.loading = false
  108. if returnData.count == 0 {
  109. self.showEmpety = true
  110. }
  111. }
  112. }
  113. }
  114. struct RoomUIView_Previews: PreviewProvider {
  115. static var previews: some View {
  116. RoomUIView()
  117. }
  118. }